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 workload Anda akan diskalakan.
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:
- Penurunan skala node asinkron: Penskalaan otomatis V2 menggantikan penurunan skala sinkron V1 dengan penurunan 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 menurunkan skala secara perlahan tidak akan memblokir peningkatan skala.
- Pemilihan node penurunan skala yang cerdas: Penskalaan otomatis V2 menggantikan pemilihan node acak V1 dengan algoritma cerdas yang mengidentifikasi node terbaik untuk menurunkan skala terlebih dahulu. Algoritma ini mempertimbangkan faktor-faktor seperti ukuran data shuffle node dan waktu tidak ada aktivitas.
- Perilaku penghentian tuntas dan migrasi shuffle Spark yang dapat dikonfigurasi: Penskalaan otomatis V2 memungkinkan Anda menggunakan properti Spark standar untuk mengonfigurasi penghentian tuntas 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 |
| Penurunan skala node | Sinkron | Asinkron |
| Pemilihan node untuk penurunan 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 menetapkan properti Spark).
| Properti | Deskripsi | Default |
|---|---|---|
spark.dataproc.scaling.version |
Versi penskalaan otomatis Managed Service untuk Apache Spark. Tentukan
versi 1 atau 2 (lihat
Penskalaan otomatis Managed Service untuk Apache Spark V2). |
1 |
spark.dynamicAllocation.enabled |
Apakah akan menggunakan alokasi resource dinamis, yang meningkatkan dan menurunkan skala jumlah eksekutor berdasarkan the
workload.
Menetapkan nilai ke false akan menonaktifkan penskalaan otomatis
untuk workload. Default: true. |
true |
spark.dynamicAllocation.initialExecutors |
Jumlah awal eksekutor yang dialokasikan ke workload. Setelah
workload dimulai, penskalaan otomatis dapat mengubah jumlah eksekutor aktif.
Nilai minimum adalah 2; nilai maksimum adalah 2000. |
2 |
spark.dynamicAllocation.minExecutors |
Jumlah minimum eksekutor untuk menurunkan skala workload.
Nilai minimum adalah 2. |
2 |
spark.dynamicAllocation.maxExecutors |
Jumlah maksimum eksekutor untuk meningkatkan skala workload.
Nilai maksimum adalah 2000. |
1000 |
spark.dynamicAllocation.executorAllocationRatio |
Menyesuaikan peningkatan skala workload Spark. Menerima nilai dari
0 hingga 1. Nilai 1.0
memberikan kemampuan peningkatan skala maksimum dan membantu mencapai
paralelisme maksimum. Nilai 0.5 menetapkan kemampuan peningkatan skala dan
paralelisme pada setengah nilai maksimum. |
0.3 |
spark.dynamicAllocation.diagnosis.enabled |
Jika true, informasi diagnostik akan dicatat jika eksekutor yang berjalan melebihi eksekutor yang diperlukan maksimum
untuk periode yang ditentukan oleh spark.dynamicAllocation.diagnosis.interval.
Diagnostik mencakup ringkasan eksekutor dengan jumlah eksekutor tidak ada aktivitas dan persentil waktu tidak ada aktivitas
distribusi tugas aktif, ukuran data shuffle, dan ukuran RDD yang di-cache.
Gunakan spark.dynamicAllocation.diagnosis.logLevel untuk mengontrol tingkat log output. |
false |
spark.dynamicAllocation.profile |
Tetapkan ke performance atau cost untuk menerapkan kumpulan konfigurasi yang telah ditentukan dan dioptimalkan untuk performa atau efektivitas biaya.
Properti yang ditentukan pengguna akan mengganti default profil. Lihat
Profil alokasi dinamis Spark untuk mengetahui detailnya. |
none |
spark.dynamicAllocation.shuffleTracking.dynamicTimeout.enabled |
Jika true, mengaktifkan perhitungan waktu tunggu dinamis untuk eksekutor yang menyimpan data shuffle.
Daripada menggunakan spark.dynamicAllocation.shuffleTracking.timeout statis,
waktu tunggu dihitung berdasarkan jumlah data shuffle yang disimpan di eksekutor.
Hal ini memungkinkan eksekutor dengan shuffle kecil dirilis lebih cepat sekaligus mempertahankan eksekutor
dengan shuffle besar tetap aktif lebih lama. |
false |
spark.reducer.fetchMigratedShuffle.enabled |
Jika ditetapkan ke true, memungkinkan pengambilan lokasi output shuffle dari driver Spark setelah pengambilan gagal dari eksekutor yang dihentikan karena alokasi dinamis Spark. Hal ini mengurangi
ExecutorDeadException error yang disebabkan oleh migrasi blok shuffle
dari eksekutor yang dihentikan ke eksekutor aktif, dan mengurangi percobaan ulang tahap
yang disebabkan oleh FetchFailedException
error (lihat
FetchFailedException yang disebabkan oleh
ExecutorDeadException).
Properti ini tersedia di Managed Service untuk Apache Spark
Spark runtime
versions
1.1.12 dan yang lebih baru serta 2.0.20 dan yang lebih baru. |
false |
spark.scheduler.excludeShuffleSkewExecutors |
Jika true, menghindari penjadwalan tugas pada eksekutor yang miring shuffle, yaitu eksekutor yang memiliki data shuffle dalam jumlah besar atau tugas peta yang telah selesai dalam jumlah besar. Hal ini dapat meningkatkan performa dengan mengurangi kemiringan shuffle. |
false |
Profil alokasi dinamis Spark
Anda dapat menetapkan properti spark.dynamicAllocation.profile ke performance atau cost untuk menerapkan kumpulan konfigurasi Spark yang telah ditentukan dan dioptimalkan untuk performa atau efektivitas biaya. Jika Anda menetapkan properti Spark selain menetapkan properti spark.dynamicAllocation.profile, setelan Anda akan mengganti default profil untuk properti tersebut.
performance: Profil ini dioptimalkan untuk waktu eksekusi minimum dengan menerapkan setelan default berikut:
spark.scheduler.excludeShuffleSkewExecutors:truespark.dynamicAllocation.executorIdleTimeout:300sspark.dynamicAllocation.initialExecutors:10
cost: Profil ini dioptimalkan untuk mengurangi 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 berjalan dan tertunda. |
running |
Jumlah eksekutor yang 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 pereduksi Spark pada eksekutor mengambil output shuffle dari lokasi yang ditetapkan oleh driver Spark saat tugas pereduksi dimulai, jika file shuffle dimigrasikan, pereduksi dapat terus mencoba mengambil output shuffle dari eksekutor yang dihentikan, sehingga menyebabkan error
ExecutorDeadExceptiondanFetchFailedException.Solusi: Aktifkan pengambilan ulang lokasi shuffle dengan menetapkan
spark.reducer.fetchMigratedShuffle.enabledketruesaat Anda menjalankan workload batch Managed Service untuk Apache Spark (lihat Menetapkan properti workload batch Spark). Jika properti ini diaktifkan, tugas pereduksi akan mengambil ulang lokasi output shuffle dari driver setelah pengambilan dari eksekutor yang dihentikan gagal.