Lowongan kerja Spark - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Lowongan kerja Spark

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 StartJobRunAPIuntuk menjalankan pekerjaan Spark, Anda dapat menentukan parameter berikut.

Peran runtime pekerjaan percikan

Gunakan executionRoleArnARNuntuk 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 Serverless EMR dan Menyimpan log.

Parameter pengemudi pekerjaan percikan

Gunakan jobDriveruntuk 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 dalam SparkSubmitParameters menggunakan --class argumen.

Untuk informasi tambahan, lihat Peluncuran Aplikasi dengan spark-submit.

Parameter penggantian konfigurasi percikan

Gunakan configurationOverridesuntuk 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 hanya spark-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, infinity

Untuk 6.9.0 dan lebih rendah, 100

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.[KEY] 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.[KEY] 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(fileName). 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(fileName). 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 GitHub

aws emr-serverless start-job-run \ --application-id application-id \ --execution-role-arn job-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-arn job-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" } }'