Saat Anda mengirimkan beban kerja Spark, Dataproc Serverless untuk Spark dapat secara dinamis menskalakan resource workload, seperti jumlah eksekutor, untuk menjalankan beban kerja Anda secara efisien. Penskalaan otomatis tanpa server Dataproc adalah perilaku default, dan menggunakan alokasi resource dinamis Spark untuk menentukan apakah, bagaimana, dan kapan harus menskalakan workload Anda.
Penskalaan otomatis tanpa server Dataproc V2
Penskalaan otomatis Dataproc Serverless versi 2 (V2) menambahkan fitur dan peningkatan ke versi default 1 (V1) untuk membantu Anda mengelola beban kerja Dataproc Serverless, meningkatkan performa beban kerja, dan menghemat biaya:
- Penurunan skala node asinkron: Penskalaan otomatis V2 menggantikan downscaling sinkron V1 dengan penurunan skala asinkron. Dengan menggunakan downscaling asinkron, Dataproc Serverless akan menurunkan skala resource workload tanpa menunggu semua node menyelesaikan migrasi acak. Artinya, node longtail yang diperkecil secara perlahan tidak akan menghalangi peningkatan skala.
- Pemilihan node penskalaan cerdas yang cerdas: Penskalaan otomatis 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 acak node dan waktu tidak ada aktivitas.
- Perilaku migrasi shuffle dan penghentian tuntas Spark yang dapat dikonfigurasi: Penskalaan otomatis V2 memungkinkan Anda menggunakan properti Spark standar untuk mengonfigurasi penonaktifan Spark dan mengacak migrasi. Fitur ini dapat membantu Anda mempertahankan kompatibilitas migrasi dengan properti Spark yang disesuaikan.
Fitur penskalaan otomatis tanpa server Dataproc
Fitur | Penskalaan Otomatis Tanpa Server Dataproc V1 | Penskalaan Otomatis Tanpa Server Dataproc V2 |
Penurunan skala node | Sinkron | Asinkron |
Pemilihan node untuk menurunkan skala | Acak | Cerdas |
Spark penghentian tuntas dan migrasi acak | Tidak dapat dikonfigurasi | Dapat Dikonfigurasi |
Properti alokasi dinamis Spark
Tabel berikut mencantumkan properti Alokasi Dinamis Spark yang dapat Anda tetapkan saat mengirimkan beban kerja batch untuk mengontrol penskalaan otomatis (lihat cara menetapkan properti Spark).
Properti | Deskripsi | Default |
---|---|---|
spark.dataproc.scaling.version |
Versi penskalaan otomatis Dataproc Serverless Spark. Tentukan versi 1 atau 2 (lihat Penskalaan otomatis tanpa server Dataproc V2). |
1 |
spark.dynamicAllocation.enabled |
Apakah akan menggunakan alokasi resource dinamis, yang meningkatkan dan menurunkan
jumlah eksekutor berdasarkan beban kerja.
Menetapkan nilai ini ke false akan menonaktifkan penskalaan otomatis untuk workload. Default: true . |
true |
spark.dynamicAllocation.initialExecutors |
Jumlah eksekutor awal yang dialokasikan untuk beban kerja. Setelah workload dimulai, penskalaan otomatis dapat mengubah jumlah eksekutor aktif.
Nilai minimum adalah 2 ; nilai maksimum adalah 500 . |
2 |
spark.dynamicAllocation.minExecutors |
Jumlah minimum eksekutor untuk memperkecil skala beban kerja.
Nilai minimum adalah 2 . |
2 |
spark.dynamicAllocation.maxExecutors |
Jumlah eksekutor maksimum untuk menskalakan beban kerja.
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 dengan setengah dari nilai maksimumnya. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
Jika ditetapkan ke true , pengambilan lokasi output acak akan diaktifkan dari driver Spark setelah pengambilan gagal dari eksekutor yang dinonaktifkan karena alokasi dinamis Spark. Tindakan ini akan mengurangi error ExecutorDeadException yang disebabkan oleh migrasi pemblokiran acak dari eksekutor yang dinonaktifkan menjadi eksekutor aktif, serta mengurangi percobaan ulang tahap yang disebabkan oleh error FetchFailedException (lihat FetchFailedException yang disebabkan oleh ExecutorDeadException).
Properti ini tersedia di Dataproc Serverless versi runtime Spark
1.1.12 dan yang lebih baru, serta 2.0.20 dan yang lebih baru. |
false |
Metrik alokasi dinamis Spark
Workload batch Spark menghasilkan metrik yang tercantum di bawah ini terkait alokasi resource dinamis Spark (untuk informasi tambahan tentang metrik Spark, lihat Pemantauan dan Instrumentasi).
Metrik | Deskripsi |
---|---|
maximum-needed |
Jumlah eksekutor maksimum yang diperlukan dengan beban saat ini untuk memenuhi semua tugas yang sedang berjalan dan yang tertunda. |
running |
Jumlah eksekutor yang berjalan yang melaksanakan tugas. |
Memicu masalah dan solusi alokasi dinamis
FetchFailedException yang disebabkan oleh ExecutorDeadException
Penyebab: Saat alokasi dinamis Spark menurunkan skala eksekutor, file acak akan dimigrasikan ke eksekutor live. Namun, karena tugas peredam Spark pada eksekutor mengambil output acak dari lokasi yang ditetapkan oleh driver Spark saat tugas peredam dimulai, jika file acak dimigrasikan, peredam dapat terus mencoba mengambil output acak dari eksekutor yang dinonaktifkan, sehingga menyebabkan error
ExecutorDeadException
danFetchFailedException
.Solusi: Aktifkan pengambilan ulang lokasi acak dengan menetapkan
spark.reducer.fetchMigratedShuffle.enabled
ketrue
saat Anda menjalankan beban kerja batch Dataproc Serverless untuk Spark (lihat bagian Menetapkan properti beban kerja batch Spark). Jika properti ini diaktifkan, tugas peredam akan mengambil kembali lokasi output yang diacak dari driver setelah pengambilan dari eksekutor yang dinonaktifkan gagal.