Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan konfigurasi Spark saat Anda menjalankan EMR pekerjaan Tanpa Server
Anda dapat menjalankan pekerjaan Spark pada aplikasi dengan type
parameter yang disetel keSPARK
. Pekerjaan harus kompatibel dengan versi Spark yang kompatibel dengan versi EMR rilis Amazon. Misalnya, ketika Anda menjalankan pekerjaan dengan Amazon EMR rilis 6.6.0, pekerjaan Anda harus kompatibel dengan Apache Spark 3.2.0. Untuk informasi tentang versi aplikasi untuk setiap rilis, lihatEMRVersi rilis Amazon Tanpa Server.
Parameter pekerjaan percikan
Bila Anda menggunakan StartJobRun
APIuntuk menjalankan pekerjaan Spark, Anda dapat menentukan parameter berikut.
Parameter yang diperlukan
Peran runtime pekerjaan percikan
Gunakan executionRoleArn
ARNuntuk menentukan IAM peran yang digunakan aplikasi Anda untuk menjalankan pekerjaan Spark. Peran ini harus berisi izin berikut:
-
Baca dari bucket S3 atau sumber data lain di mana data Anda berada
-
Baca dari bucket atau awalan S3 tempat skrip atau file Anda PySpark berada JAR
-
Menulis ke ember S3 di mana Anda ingin menulis hasil akhir Anda
-
Menulis log ke bucket S3 atau awalan yang menentukan
S3MonitoringConfiguration
-
Akses ke KMS kunci jika Anda menggunakan KMS kunci untuk mengenkripsi data di bucket S3
-
Akses ke Katalog Data AWS Glue jika Anda menggunakan Spark SQL
Jika pekerjaan Spark Anda membaca atau menulis data ke atau dari sumber data lain, tentukan izin yang sesuai dalam peran iniIAM. Jika Anda tidak memberikan izin ini untuk IAM peran tersebut, pekerjaan mungkin gagal. Untuk informasi selengkapnya, silakan lihat Peran runtime Job untuk Amazon Tanpa Server EMR dan Menyimpan log.
Parameter pengemudi pekerjaan percikan
Gunakan jobDriver
untuk memberikan masukan pada pekerjaan. Parameter driver pekerjaan hanya menerima satu nilai untuk jenis pekerjaan yang ingin Anda jalankan. Untuk pekerjaan Spark, nilai parameternya adalahsparkSubmit
. Anda dapat menggunakan jenis pekerjaan ini untuk menjalankan Scala, Java, PySpark, SparkR, dan pekerjaan lain yang didukung melalui pengiriman Spark. Pekerjaan percikan memiliki parameter berikut:
-
sparkSubmitParameters
— Ini adalah parameter Spark tambahan yang ingin Anda kirim ke pekerjaan. Gunakan parameter ini untuk mengganti properti Spark default seperti memori driver atau jumlah pelaksana, seperti yang didefinisikan dalam argumen atau.--conf
--class
-
entryPointArguments
— Ini adalah array argumen yang ingin Anda sampaikan ke file utama JAR atau Python Anda. Anda harus menangani membaca parameter ini menggunakan kode entrypoint Anda. Pisahkan setiap argumen dalam array dengan koma. -
entryPoint
— Ini adalah referensi di Amazon S3 ke file utama atau JAR Python yang ingin Anda jalankan. Jika Anda menjalankan Scala atau JavaJAR, tentukan kelas entri utama dalamSparkSubmitParameters
menggunakan--class
argumen.
Untuk informasi tambahan, lihat Peluncuran Aplikasi dengan spark-submit
Parameter penggantian konfigurasi percikan
Gunakan configurationOverrides
untuk mengganti properti konfigurasi tingkat pemantauan dan tingkat aplikasi. Parameter ini menerima JSON objek dengan dua bidang berikut:
-
monitoringConfiguration
- Gunakan bidang ini untuk menentukan Amazon S3 URL (s3MonitoringConfiguration
) tempat Anda ingin pekerjaan EMR Tanpa Server menyimpan log pekerjaan Spark Anda. Pastikan Anda telah membuat bucket ini dengan yang sama Akun AWS yang meng-host aplikasi Anda, dan di tempat yang sama Wilayah AWS di mana pekerjaan Anda berjalan. -
applicationConfiguration
— Untuk mengganti konfigurasi default untuk aplikasi, Anda dapat menyediakan objek konfigurasi di bidang ini. Anda dapat menggunakan sintaks singkatan untuk menyediakan konfigurasi, atau Anda dapat mereferensikan objek konfigurasi dalam file. JSON Objek konfigurasi terdiri dari klasifikasi, properti, dan konfigurasi bersarang opsional. Properti terdiri dari pengaturan yang ingin Anda timpa dalam file itu. Anda dapat menentukan beberapa klasifikasi untuk beberapa aplikasi dalam satu JSON objek.catatan
Klasifikasi konfigurasi yang tersedia bervariasi menurut rilis Tanpa EMR Server tertentu. Misalnya, klasifikasi untuk Log4j kustom
spark-driver-log4j2
dan hanyaspark-executor-log4j2
tersedia dengan rilis 6.8.0 dan yang lebih tinggi.
Jika Anda menggunakan konfigurasi yang sama dalam penggantian aplikasi dan dalam parameter pengiriman Spark, parameter pengiriman Spark akan diprioritaskan. Konfigurasi peringkat dalam prioritas sebagai berikut, dari tertinggi ke terendah:
-
Konfigurasi yang disediakan EMR Tanpa Server saat dibuat.
SparkSession
-
Konfigurasi yang Anda berikan sebagai bagian dari
sparkSubmitParameters
--conf
argumen. -
Konfigurasi yang Anda berikan sebagai bagian dari penggantian aplikasi Anda ketika Anda memulai pekerjaan.
-
Konfigurasi yang Anda berikan sebagai bagian dari
runtimeConfiguration
saat Anda membuat aplikasi. -
Konfigurasi yang dioptimalkan yang EMR digunakan Amazon untuk rilis.
-
Konfigurasi sumber terbuka default untuk aplikasi.
Untuk informasi selengkapnya tentang mendeklarasikan konfigurasi di tingkat aplikasi, dan mengganti konfigurasi selama menjalankan pekerjaan, lihat. Konfigurasi aplikasi default untuk Tanpa EMR Server
Spark optimasi alokasi sumber daya dinamis
Gunakan dynamicAllocationOptimization
untuk mengoptimalkan penggunaan sumber daya di EMR Tanpa Server. Menyetel properti ini ke true
dalam klasifikasi konfigurasi Spark Anda menunjukkan ke EMR Tanpa Server untuk mengoptimalkan alokasi sumber daya pelaksana untuk menyelaraskan tingkat permintaan dan pembatalan Spark dengan tingkat di mana Serverless membuat dan melepaskan pekerja. EMR Dengan demikian, EMR Tanpa Server menggunakan kembali pekerja secara optimal di seluruh tahap, menghasilkan biaya yang lebih rendah saat menjalankan pekerjaan dengan beberapa tahap sambil mempertahankan kinerja yang sama.
Properti ini tersedia di semua versi EMR rilis Amazon.
Berikut ini adalah klasifikasi konfigurasi sampel dengandynamicAllocationOptimization
.
[ { "Classification": "spark", "Properties": { "dynamicAllocationOptimization": "true" } } ]
Pertimbangkan hal berikut jika Anda menggunakan optimasi alokasi dinamis:
-
Pengoptimalan ini tersedia untuk pekerjaan Spark yang Anda aktifkan alokasi sumber daya dinamis.
-
Untuk mencapai efisiensi biaya terbaik, kami sarankan untuk mengonfigurasi batas skala atas pada pekerja menggunakan pengaturan tingkat pekerjaan
spark.dynamicAllocation.maxExecutors
atau pengaturan kapasitas maksimum tingkat aplikasi berdasarkan beban kerja Anda. -
Anda mungkin tidak melihat peningkatan biaya dalam pekerjaan yang lebih sederhana. Misalnya, jika pekerjaan Anda berjalan pada kumpulan data kecil atau selesai berjalan dalam satu tahap, Spark mungkin tidak memerlukan jumlah pelaksana yang lebih besar atau beberapa peristiwa penskalaan.
-
Pekerjaan dengan urutan tahap besar, tahapan yang lebih kecil, dan kemudian tahap besar lagi mungkin mengalami regresi dalam runtime pekerjaan. Karena EMR Tanpa Server menggunakan sumber daya secara lebih efisien, ini mungkin menyebabkan lebih sedikit pekerja yang tersedia untuk tahap yang lebih besar, yang mengarah ke runtime yang lebih lama.
Properti pekerjaan percikan
Tabel berikut mencantumkan properti Spark opsional dan nilai defaultnya yang dapat Anda ganti saat mengirimkan pekerjaan Spark.
Kunci | Deskripsi | Nilai default |
---|---|---|
spark.archives |
Daftar arsip yang dipisahkan koma yang diekstrak Spark ke dalam direktori kerja masing-masing pelaksana. Jenis file yang didukung termasuk.jar ,
.tar.gz , .tgz dan.zip . Untuk menentukan nama direktori yang akan diekstrak, tambahkan # setelah nama file yang ingin Anda ekstrak. Misalnya, file.zip#directory . |
NULL |
spark.authenticate |
Opsi yang mengaktifkan otentikasi koneksi internal Spark. | TRUE |
spark.driver.cores |
Jumlah core yang digunakan driver. | 4 |
spark.driver.extraJavaOptions |
Opsi Java ekstra untuk driver Spark. | NULL |
spark.driver.memory |
Jumlah memori yang digunakan pengemudi. | 14G |
spark.dynamicAllocation.enabled |
Opsi yang mengaktifkan alokasi sumber daya dinamis. Opsi ini menaikkan atau menurunkan jumlah pelaksana yang terdaftar dengan aplikasi, berdasarkan beban kerja. | TRUE |
spark.dynamicAllocation.executorIdleTimeout |
Lamanya waktu seorang eksekutor dapat tetap menganggur sebelum Spark menghapusnya. Ini hanya berlaku jika Anda mengaktifkan alokasi dinamis. | 60-an |
spark.dynamicAllocation.initialExecutors |
Jumlah awal pelaksana untuk dijalankan jika Anda mengaktifkan alokasi dinamis. | 3 |
spark.dynamicAllocation.maxExecutors |
Batas atas untuk jumlah pelaksana jika Anda mengaktifkan alokasi dinamis. | Untuk 6.10.0 dan lebih tinggi, Untuk 6.9.0 dan lebih rendah, |
spark.dynamicAllocation.minExecutors |
Batas bawah untuk jumlah pelaksana jika Anda mengaktifkan alokasi dinamis. | 0 |
spark.emr-serverless.allocation.batch.size |
Jumlah kontainer untuk meminta dalam setiap siklus alokasi pelaksana. Ada kesenjangan satu detik antara setiap siklus alokasi. | 20 |
spark.emr-serverless.driver.disk |
Disk driver Spark. | 20G |
spark.emr-serverless.driverEnv. |
Opsi yang menambahkan variabel lingkungan ke driver Spark. | NULL |
spark.emr-serverless.executor.disk |
Disk eksekutor Spark. | 20G |
spark.emr-serverless.memoryOverheadFactor |
Mengatur overhead memori untuk ditambahkan ke driver dan memori kontainer pelaksana. | 0,1 |
spark.emr-serverless.driver.disk.type |
Jenis disk yang terpasang pada driver Spark. | Standar |
spark.emr-serverless.executor.disk.type |
Jenis disk yang melekat pada pelaksana Spark. | Standar |
spark.executor.cores |
Jumlah core yang digunakan setiap eksekutor. | 4 |
spark.executor.extraJavaOptions |
Opsi Java ekstra untuk eksekutor Spark. | NULL |
spark.executor.instances |
Jumlah kontainer pelaksana Spark untuk dialokasikan. | 3 |
spark.executor.memory |
Jumlah memori yang digunakan setiap eksekutor. | 14G |
spark.executorEnv. |
Opsi yang menambahkan variabel lingkungan ke pelaksana Spark. | NULL |
spark.files |
Daftar file yang dipisahkan koma untuk masuk ke direktori kerja masing-masing pelaksana. Anda dapat mengakses jalur file dari file-file ini di pelaksana denganSparkFiles.get( . |
NULL |
spark.hadoop.hive.metastore.client.factory.class |
Kelas implementasi metastore Hive. | NULL |
spark.jars |
Guci tambahan untuk ditambahkan ke classpath runtime driver dan executor. | NULL |
spark.network.crypto.enabled |
Opsi yang mengaktifkan RPC enkripsi AES berbasis. Ini termasuk protokol otentikasi yang ditambahkan di Spark 2.2.0. | FALSE |
spark.sql.warehouse.dir |
Lokasi default untuk database dan tabel terkelola. | Nilai $PWD/spark-warehouse |
spark.submit.pyFiles |
Daftar.zip ,.egg , atau
.py file yang dipisahkan koma untuk ditempatkan di aplikasi untuk PYTHONPATH Python. |
NULL |
Tabel berikut mencantumkan parameter pengiriman Spark default.
Kunci | Deskripsi | Nilai default |
---|---|---|
archives |
Daftar arsip yang dipisahkan koma yang diekstrak Spark ke dalam direktori kerja masing-masing pelaksana. | NULL |
class |
Kelas utama aplikasi (untuk aplikasi Java dan Scala). | NULL |
conf |
Properti konfigurasi Spark arbitrer. | NULL |
driver-cores |
Jumlah core yang digunakan driver. | 4 |
driver-memory |
Jumlah memori yang digunakan pengemudi. | 14G |
executor-cores |
Jumlah core yang digunakan setiap eksekutor. | 4 |
executor-memory |
Jumlah memori yang digunakan eksekutor. | 14G |
files |
Daftar file yang dipisahkan koma untuk ditempatkan di direktori kerja masing-masing pelaksana. Anda dapat mengakses jalur file dari file-file ini di pelaksana denganSparkFiles.get( . |
NULL |
jars |
Daftar stoples yang dipisahkan koma untuk disertakan pada classpath driver dan eksekutor. | NULL |
num-executors |
Jumlah eksekutor yang akan diluncurkan. | 3 |
py-files |
Daftar.zip ,.egg , atau .py file yang dipisahkan koma untuk ditempatkan di aplikasi untuk PYTHONPATH Python. |
NULL |
verbose |
Opsi yang mengaktifkan output debug tambahan. | NULL |
Contoh percikan
Contoh berikut menunjukkan bagaimana menggunakan StartJobRun
API untuk menjalankan script Python. Untuk end-to-end tutorial yang menggunakan contoh ini, lihatMemulai dengan Amazon Tanpa EMR Server. Anda dapat menemukan contoh tambahan tentang cara menjalankan PySpark pekerjaan dan menambahkan dependensi Python di repositori Sampel Tanpa Server. EMR
aws emr-serverless start-job-run \ --application-id
application-id
\ --execution-role-arnjob-role-arn
\ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py", "entryPointArguments": ["s3://amzn-s3-demo-destination-bucket
/wordcount_output"], "sparkSubmitParameters": "--conf spark.executor.cores=1 --conf spark.executor.memory=4g --conf spark.driver.cores=1 --conf spark.driver.memory=4g --conf spark.executor.instances=1" } }'
Contoh berikut menunjukkan bagaimana menggunakan StartJobRun
API untuk menjalankan SparkJAR.
aws emr-serverless start-job-run \ --application-id
application-id
\ --execution-role-arnjob-role-arn
\ --job-driver '{ "sparkSubmit": { "entryPoint": "/usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": ["1"], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=1" } }'