Bir ECS örneğinden EMR Serverless Spark spark-submit CLI aracını kullanarak bir Spark işi gönderin.
Ön koşullar
Java Development Kit (JDK) 1,8 veya üzeri bir sürüm yüklüdür.
Spark işini göndermek için bir RAM kullanıcısı kullanıyorsanız, bu kullanıcıyı EMR Serverless Spark çalışma alanına eklemeniz ve geliştirici rolü veya daha yüksek bir rol atamanız gerekir. Daha fazla bilgi için bkz. Kullanıcıları ve rolleri yönetme.
Yordam
Adım 1: EMR Serverless spark-submit aracını indirip yükleyin
Kurulum paketini indirmek için emr-serverless-spark-tool-1.16.0-bin.zip dosyasını tıklayın.
Kurulum paketini ECS örneğinize yükleyin. Daha fazla bilgi için bkz. Dosyaları yükleme veya indirme.
-
EMR Serverless spark-submit aracının sıkıştırmasını açmak için aşağıdaki komutu çalıştırın.
unzip emr-serverless-spark-tool-1.16.0-bin.zip
Adım 2: Parametreleri yapılandırın
Spark'ın yüklü olduğu bir ortamda SPARK_CONF_DIR ortam değişkeni ayarlanmışsa, yapılandırma dosyasını SPARK_CONF_DIR tarafından belirtilen dizine yerleştirmeniz gerekir. Örneğin, bir EMR kümesinde bu dizin genellikle /etc/taihao-apps/spark-conf olur. Aksi takdirde sistem hata verir.
-
connection.propertiesdosyasındaki yapılandırmayı değiştirmek için aşağıdaki komutu çalıştırın.vim emr-serverless-spark-tool-1.16.0/conf/connection.properties -
Aşağıdaki örnekte gösterildiği gibi dosyayı yapılandırın. Parametreler
key=valuebiçimini kullanır.accessKeyId=<ALIBABA_CLOUD_ACCESS_KEY_ID> accessKeySecret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET> regionId=cn-hangzhou endpoint=emr-serverless-spark.cn-hangzhou.aliyuncs.com workspaceId=w-xxxxxxxxxxxxÖnemliBu AccessKey ile ilişkili RAM kullanıcısının veya rolünün RAM üzerinden yetkilendirilmesi ve EMR Serverless Spark çalışma alanına eklenmesi gerekir.
RAM yetkilendirmesi hakkında bilgi için bkz. RAM kullanıcısına izin verme.
EMR Serverless Spark çalışma alanında kullanıcı ve rol yönetimi hakkında bilgi için bkz. Kullanıcıları ve rolleri yönetme.
Aşağıdaki tabloda parametreler açıklanmaktadır.
Parametre
Zorunlu
Açıklama
accessKeyId
Evet
Spark işini çalıştıran Alibaba Cloud hesabının veya RAM kullanıcısının AccessKey ID'si ve AccessKey Secret değeri.
ÖnemliaccessKeyIdveaccessKeySecretparametrelerini yapılandırırken, AccessKey ile ilişkili kullanıcının çalışma alanına bağlı OSS paketinde okuma ve yazma izinlerine sahip olduğundan emin olun. Çalışma alanına bağlı OSS paketini, Spark sayfasında çalışma alanının İşlemler sütunundaki Details seçeneğine tıklayarak görüntüleyebilirsiniz.accessKeySecret
Evet
regionId
Evet
Bölge kimliği. Bu örnekte Çin (Hangzhou) bölgesi kullanılmaktadır.
endpoint
Evet
EMR Serverless Spark uç noktası. Daha fazla bilgi için bkz. Uç noktalar.
Bu örnekte Çin (Hangzhou) bölgesi için genel uç nokta kullanılmaktadır. Parametre değeri
emr-serverless-spark.cn-hangzhou.aliyuncs.comşeklindedir.NotECS örneğiniz internet erişimine sahip değilse, bir VPC uç noktası kullanmanız gerekir.
workspaceId
Evet
EMR Serverless Spark çalışma alanının kimliği.
Adım 3: Bir Spark işi gönderin****
-
EMR Serverless spark-submit aracı dizinine gitmek için aşağıdaki komutu çalıştırın.
cd emr-serverless-spark-tool-1.16.0 -
İş türüne göre bir gönderim yöntemi seçin.
Bir iş gönderirken, JAR paketi veya Python betiği gibi işin bağımlı olduğu dosya kaynaklarını belirtin. Bu kaynaklar OSS'de veya yerel olarak depolanabilir. Bu konudaki tüm örnekler OSS kaynaklarını kullanır.
spark-submit
spark-submit, Java/Scala ve PySpark görevleri için Spark'ın genel amaçlı gönderim aracıdır.Java/Scala işleri
Bu örnekte pi (π) değerini hesaplayan yerleşik bir Spark örneği olan spark-examples_2.12-3.5.2.jar kullanılmaktadır. JAR paketini indirmek ve OSS'e yüklemek için spark-examples_2.12-3.5.2.jar dosyasını tıklayın.
Notspark-examples_2.12-3.5.2.jardosyası, işleri göndermek için esr-4.x motor sürümüyle birlikte kullanılmalıdır. Esr-5.x motor sürümü kullanıyorsanız, bu örnek için spark-examples_2.13-4.0.1.jar dosyasını indirin../bin/spark-submit --name SparkPi \ --queue dev_queue \ --num-executors 5 \ --driver-memory 1g \ --executor-cores 2 \ --executor-memory 2g \ --class org.apache.spark.examples.SparkPi \ oss://<yourBucket>/path/to/spark-examples_2.12-3.5.2.jar \ 10000PySpark işleri
Bu örnekte DataFrame.py ve employee.csv dosyaları kullanılmaktadır. Test dosyalarını indirmek ve OSS'e yüklemek için DataFrame.py ve employee.csv bağlantılarını tıklayın.
NotDataFrame.py, OSS'deki verileri işlemek için Apache Spark çerçevesini kullanan bir kod parçacığıdır.
employee.csv, çalışan adlarını, departmanları ve maaşları içeren bir veri dosyasıdır.
./bin/spark-submit --name PySpark \ --queue dev_queue \ --num-executors 5 \ --driver-memory 1g \ --executor-cores 2 \ --executor-memory 2g \ --conf spark.tags.key=value \ oss://<yourBucket>/path/to/DataFrame.py \ oss://<yourBucket>/path/to/employee.csvParametreler aşağıda açıklanmıştır.
-
Desteklenen açık kaynak parametreleri
Parametre
Örnek
Açıklama
--name
SparkPi
Spark işi için uygulama adı.
--class
org.apache.spark.examples.SparkPi
Spark işi için giriş sınıfı. Bu parametre Java veya Scala uygulamaları için gereklidir ancak Python uygulamaları için gerekli değildir.
--num-executors
5
Spark işi için yürütücü sayısı.
--driver-cores
1
Spark işi için sürücü çekirdek sayısı.
--driver-memory
1g
Spark işi için sürücü bellek miktarı.
--executor-cores
2
Spark işi için yürütücü çekirdek sayısı.
--executor-memory
2g
Spark işi için yürütücü bellek miktarı.
--files
oss://<yourBucket>/file1,oss://<yourBucket>/file2
Spark işi için gereken kaynak dosyalar. Dosyalar OSS'de veya yerel olarak depolanabilir. Birden çok dosyayı virgül (,) ile ayırın.
--py-files
oss://<yourBucket>/file1.py,oss://<yourBucket>/file2.py
Spark işi için gereken Python betikleri. Betikler OSS'de veya yerel olarak depolanabilir. Birden çok dosyayı virgül (,) ile ayırın. Bu parametre yalnızca PySpark uygulamaları içindir.
--jars
oss://<yourBucket>/file1.jar,oss://<yourBucket>/file2.jar
Spark işi için gereken JAR paketleri. Kaynaklar OSS'de veya yerel olarak depolanabilir. Birden çok dosyayı virgül (,) ile ayırın.
--archives
oss://<yourBucket>/archive.tar.gz#env,oss://<yourBucket>/archive2.zip
Spark işi için gereken arşiv dosyaları. Kaynaklar OSS'de veya yerel olarak depolanabilir. Birden çok dosyayı virgül (,) ile ayırın.
--queue
root_queue
Spark işinin çalıştığı kuyruğun adı. Bu ad, EMR Serverless Spark çalışma alanınızın kuyruk yönetimi bölümündeki kuyruk adıyla eşleşmelidir.
--proxy-user
test
Belirtilen değer,HADOOP_USER_NAMEortam değişkenini geçersiz kılar. Davranış açık kaynak sürümüyle tutarlıdır.
--conf
spark.tags.key=value
Spark işi için özel bir parametre.
--status
jr-8598aa9f459d****
Spark işinin durumunu kontrol eder.
--kill
jr-8598aa9f459d****
Spark işini sonlandırır. -
Gelişmiş parametreler
Parametre
Örnek
Açıklama
--detach
Değer gerekmez
İş durumunu beklemeden
spark-submitkomutundan hemen çıkar.--detail
jr-8598aa9f459d****
Spark işinin ayrıntılarını görüntüler.
--release-version
esr-4.1.1 (Spark 3.5.2, Scala 2.12)
Spark motor sürümü. Konsolda görüntülenen sürüm numarasını girin.
--enable-template
Değer gerekmez
Şablon özelliğini etkinleştirir. İş daha sonra çalışma alanının varsayılan yapılandırma şablonunu kullanır.
Configuration management içinde bir Configurations oluşturduysanız,
--confparametresinespark.emr.serverless.templateIdekleyerek kimliğini belirtebilirsiniz. İş daha sonra doğrudan belirtilen şablonu uygular. Şablon oluşturma hakkında daha fazla bilgi için bkz. Yapılandırma yönetimi.-
Yalnızca
--enable-templatebelirtirseniz, görev çalışma alanının varsayılan yapılandırma şablonunu otomatik olarak uygular. -
Şablon kimliğini belirtmek için yalnızca
--confkullanın: Görev doğrudan belirtilen şablon kimliğini uygular. -
Hem
--enable-templatehem de--confbelirtme: Hem--enable-templatehem de--conf spark.emr.serverless.templateIdbelirtirseniz,--confiçindeki şablon kimliği varsayılan şablonu geçersiz kılar. -
Parametre belirtilmemesi:
--enable-templatekullanmazsanız veya--conf spark.emr.serverless.templateIdbelirtmezseniz, iş herhangi bir şablon yapılandırması uygulamaz.
--timeout
60
İş için zaman aşımı süresi (saniye cinsinden).
--workspace-id
w-4b4d7925a797****
İş düzeyindeki çalışma alanı kimliği.
connection.propertiesdosyasındakiworkspaceIdparametresini geçersiz kılar. -
-
Desteklenmeyen açık kaynak parametreleri
--deploy-mode
--master
--repositories
--keytab
--principal
--total-executor-cores
--driver-library-path
--driver-class-path
--supervise
--verbose
spark-sql
spark-sql, SQL sorgularını veya betiklerini doğrudan çalıştırmak için kullanılan bir araçtır.-
Örnek 1: Bir SQL ifadesini doğrudan çalıştırma
spark-sql -e "SHOW TABLES"Bu komut, geçerli veritabanındaki tüm tabloları listeler.
-
Örnek 2: Bir SQL betik dosyası çalıştırma
spark-sql -f oss://<yourBucketname>/path/to/your/example.sqlBu örnekte example.sql dosyası kullanılmaktadır. Test dosyasını indirmek ve OSS'e yüklemek için example.sql dosyasını tıklayın.
Aşağıdaki tabloda parametreler açıklanmaktadır.
Parametre
Örnek
Açıklama-e "<sql>"-e "SELECT * FROM table"
Komut satırından satır içi bir SQL ifadesi yürütür.-f <path>-f oss://path/script.sql
Belirtilen yoldan bir SQL betik dosyası yürütür.
Adım 4: Bir Spark işini sorgulayın
CLI
İş durumunu sorgulayın
cd emr-serverless-spark-tool-1.16.0
./bin/spark-submit --status <jr-8598aa9f459d****>
İş ayrıntılarını sorgulayın
cd emr-serverless-spark-tool-1.16.0
./bin/spark-submit --detail <jr-8598aa9f459d****>
Kullanıcı Arayüzü
EMR Serverless Spark sayfasında sol gezinme bölmesinden Job History seçeneğine tıklayın.
-
Job History sayfasında, Development Job Runs sekmesinde gönderilen işleri görüntüleyebilirsiniz.
İş listesi Job name/Job run ID, Status, Tags, Submission time ve Actions sütunlarını içerir. Actions sütununda Stop, Details veya Spark UI seçeneklerine tıklayabilirsiniz.
(İsteğe bağlı) Adım 5: Bir Spark işini sonlandırın
cd emr-serverless-spark-tool-1.16.0
./bin/spark-submit --kill <jr-8598aa9f459d****>
Yalnızca running durumunda olan işleri sonlandırabilirsiniz.
SSS
spark-submit aracıyla toplu bir iş gönderirken ağ bağlantısını nasıl belirtirim?
Bir ağ bağlantısı oluşturun. Daha fazla bilgi için bkz. Ağ bağlantısı ekleme.
-
spark-submit komutunda, ağ bağlantısını belirtmek için
--confparametresini kullanın.--conf spark.emr.serverless.network.service.name=<networkname><networkname> yerine ağ bağlantınızın adını yazın.