Dokumen ini memberikan informasi tentang penskalaan otomatis Managed Service untuk Apache Spark. Saat Anda mengirimkan workload Spark, Managed Service untuk Apache Spark dapat menskalakan resource workload secara dinamis, seperti jumlah eksekutor, untuk menjalankan workload Anda secara efisien. Penskalaan otomatis Managed Service untuk Apache Spark adalah perilaku default, dan menggunakan alokasi resource dinamis Spark untuk menentukan apakah, bagaimana, dan kapan harus menskalakan workload Anda.
Penskalaan otomatis Managed Service untuk Apache Spark V2
Penskalaan otomatis Managed Service untuk Apache Spark versi 2 (V2) menambahkan fitur dan peningkatan ke versi 1 (V1) default untuk membantu Anda mengelola workload Managed Service untuk Apache Spark, meningkatkan performa workload, dan menghemat biaya:
- Pengecilan skala node asinkron: Penskalaan Otomatis V2 menggantikan pengecilan skala sinkron V1 dengan pengecilan skala asinkron. Dengan menggunakan penurunan skala asinkron, Managed Service untuk Apache Spark menurunkan skala resource workload tanpa menunggu semua node menyelesaikan migrasi shuffle. Artinya, node ekor panjang yang diperkecil skalanya secara perlahan tidak akan memblokir penskalaan ke atas.
- Pemilihan node untuk penurunan skala yang cerdas: Autoscaling V2 menggantikan pemilihan node acak V1 dengan algoritma cerdas yang mengidentifikasi node terbaik untuk diturunkan skalanya terlebih dahulu. Algoritma ini mempertimbangkan faktor-faktor seperti ukuran data shuffle dan waktu tidak ada aktivitas node.
- Perilaku migrasi shuffle dan penonaktifan bertahap Spark yang dapat dikonfigurasi: Autoscaling V2 memungkinkan Anda menggunakan properti Spark standar untuk mengonfigurasi penonaktifan bertahap Spark dan migrasi shuffle. Fitur ini dapat membantu Anda mempertahankan kompatibilitas migrasi dengan properti Spark yang disesuaikan.
Fitur penskalaan otomatis Managed Service untuk Apache Spark
| Fitur | Penskalaan Otomatis Managed Service untuk Apache Spark V1 | Penskalaan Otomatis Managed Service untuk Apache Spark V2 |
| Pengecilan skala node | Sinkron | Asinkron |
| Pemilihan node untuk menurunkan skala | Acak | Cerdas |
| Penghentian tuntas dan migrasi shuffle Spark | Tidak dapat dikonfigurasi | Dapat Dikonfigurasi |
Properti alokasi dinamis Spark
Tabel berikut mencantumkan properti Alokasi Dinamis Spark yang dapat Anda tetapkan saat mengirimkan workload batch untuk mengontrol penskalaan otomatis (lihat cara menyetel properti Spark).
| Properti | Deskripsi | Default |
|---|---|---|
spark.dataproc.scaling.version |
Versi penskalaan otomatis Managed Service untuk Apache Spark. Tentukan
versi 1 atau 2. |
1 |
spark.dynamicAllocation.enabled |
Apakah akan menggunakan alokasi resource dinamis, yang meningkatkan dan menurunkan skala
jumlah eksekutor berdasarkan workload.
Menetapkan nilai ke false akan menonaktifkan penskalaan otomatis untuk beban kerja. Default: true. |
true |
spark.dynamicAllocation.initialExecutors |
Jumlah awal eksekutor yang dialokasikan ke workload. Setelah
beban kerja dimulai, penskalaan otomatis dapat mengubah jumlah pengeksekusi aktif.
Nilai minimum adalah 2; nilai maksimum adalah 2000. |
2 |
spark.dynamicAllocation.minExecutors |
Jumlah minimum eksekutor untuk memperkecil skala workload.
Nilai minimum adalah 2. |
2 |
spark.dynamicAllocation.maxExecutors |
Jumlah maksimum eksekutor untuk meningkatkan skala beban kerja.
Nilai maksimum adalah 2000. |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Menyesuaikan penskalaan beban kerja Spark. Menerima nilai dari
0 hingga 1. Nilai 1.0
memberikan kemampuan penskalaan maksimum dan membantu mencapai paralelisme
maksimum. Nilai 0.5 menetapkan kapabilitas penskalaan dan
paralelisme pada setengah nilai maksimum. |
0.3 |
spark.dynamicAllocation.diagnosis.enabled |
Saat true, informasi diagnostik dicatat jika executor yang berjalan melebihi executor yang dibutuhkan maksimal
untuk periode yang ditentukan oleh spark.dynamicAllocation.diagnosis.interval.
Diagnosis mencakup ringkasan eksekutor dengan jumlah eksekutor yang tidak aktif dan persentil waktu tidak aktif, distribusi tugas aktif, ukuran data pengacakan, dan ukuran RDD yang di-cache.
Gunakan spark.dynamicAllocation.diagnosis.logLevel untuk mengontrol level log output. |
false |
spark.dynamicAllocation.profile |
Setel ke performance atau cost untuk menerapkan serangkaian konfigurasi
yang telah ditentukan sebelumnya dan dioptimalkan untuk performa atau efisiensi biaya.
Properti yang ditentukan pengguna menggantikan setelan default profil. Lihat
Profil alokasi dinamis Spark untuk mengetahui detailnya. |
none |
spark.dynamicAllocation.shuffleTracking.dynamicTimeout.enabled |
Jika true, mengaktifkan penghitungan waktu tunggu dinamis untuk eksekutor yang menyimpan data pengacakan.
Daripada menggunakan spark.dynamicAllocation.shuffleTracking.timeout statis,
waktu tunggu dihitung berdasarkan jumlah data shuffle yang disimpan di executor.
Hal ini memungkinkan eksekutor dengan pengacakan kecil dirilis lebih cepat sekaligus menjaga eksekutor
dengan pengacakan besar tetap aktif lebih lama. |
false |
spark.reducer.fetchMigratedShuffle.enabled |
Jika disetel ke true, memungkinkan pengambilan lokasi output shuffle
dari driver Spark setelah pengambilan gagal dari executor yang
dihentikan karena alokasi dinamis Spark. Hal ini mengurangi
error ExecutorDeadException yang disebabkan oleh migrasi blok shuffle
dari eksekutor yang dihentikan ke eksekutor aktif, dan mengurangi percobaan ulang tahap
yang disebabkan oleh error FetchFailedException (lihat
FetchFailedException yang disebabkan oleh
ExecutorDeadException).
Properti ini tersedia di Managed Service untuk Apache Spark
versi runtime Spark
1.1.12 dan yang lebih baru serta 2.0.20 dan yang lebih baru. |
false |
spark.scheduler.excludeShuffleSkewExecutors |
Saat true, menghindari penjadwalan tugas pada eksekutor yang miring karena pengacakan, yaitu eksekutor yang memiliki data pengacakan dalam jumlah besar atau sejumlah besar tugas peta yang telah selesai. Hal ini dapat meningkatkan performa dengan mengurangi kemiringan pengacakan. |
false |
Profil alokasi dinamis Spark
Anda dapat menyetel properti spark.dynamicAllocation.profile ke performance atau cost untuk menerapkan serangkaian konfigurasi Spark yang telah ditentukan sebelumnya dan dioptimalkan untuk performa atau efisiensi biaya. Jika Anda menetapkan properti Spark selain menetapkan properti spark.dynamicAllocation.profile,
setelan Anda akan menggantikan default profil untuk properti tersebut.
performa: Profil ini mengoptimalkan waktu eksekusi minimum dengan menerapkan setelan default berikut:
spark.scheduler.excludeShuffleSkewExecutors:truespark.dynamicAllocation.executorIdleTimeout:300sspark.dynamicAllocation.initialExecutors:10
biaya: Profil ini mengoptimalkan pengurangan konsumsi resource dengan menerapkan setelan default berikut:
spark.dynamicAllocation.executorIdleTimeout:120sspark.dynamicAllocation.cachedExecutorIdleTimeout:120sspark.dynamicAllocation.shuffleTracking.dynamicTimeout.enabled:truespark.dynamicAllocation.diagnosis.enabled:true
Metrik alokasi dinamis Spark
Workload batch Spark menghasilkan metrik berikut yang terkait dengan alokasi resource dinamis Spark (untuk informasi tambahan tentang metrik Spark, lihat Pemantauan dan Instrumentasi).
| Metrik | Deskripsi |
|---|---|
maximum-needed |
Jumlah maksimum eksekutor yang diperlukan dalam beban saat ini untuk memenuhi semua tugas yang sedang berjalan dan menunggu persetujuan. |
running |
Jumlah eksekutor yang sedang berjalan dan menjalankan tugas. |
Masalah dan solusi alokasi dinamis Spark
FetchFailedException yang disebabkan oleh ExecutorDeadException
Penyebab: Saat alokasi dinamis Spark menurunkan skala eksekutor, file shuffle akan dimigrasikan ke eksekutor aktif. Namun, karena tugas reducer Spark pada executor mengambil output shuffle dari lokasi yang ditetapkan oleh driver Spark saat tugas reducer dimulai, jika file shuffle dimigrasikan, reducer dapat terus mencoba mengambil output shuffle dari executor yang dihentikan, sehingga menyebabkan error
ExecutorDeadExceptiondanFetchFailedException.Solusi: Aktifkan pengambilan ulang lokasi shuffle dengan menyetel
spark.reducer.fetchMigratedShuffle.enabledketruesaat Anda menjalankan Managed Service untuk workload batch Apache Spark (lihat Menyetel properti workload batch Spark). Jika properti ini diaktifkan, tugas reducer akan mengambil ulang lokasi output shuffle dari driver setelah pengambilan dari executor yang dihentikan gagal.