Dokumen ini memberikan informasi tentang penskalaan otomatis Dataproc Serverless untuk Spark. Saat Anda mengirimkan workload Spark, Dataproc Serverless untuk Spark dapat menskalakan resource workload secara dinamis, seperti jumlah eksekutor, untuk menjalankan workload secara efisien. Penskalaan otomatis Dataproc Serverless adalah perilaku default, dan menggunakan alokasi resource dinamis Spark untuk menentukan apakah, bagaimana, dan kapan harus menskalakan workload Anda.
Penskalaan otomatis Dataproc Serverless V2
Penskalaan otomatis Dataproc Serverless versi 2 (V2) menambahkan fitur dan peningkatan ke versi default 1 (V1) untuk membantu Anda mengelola workload Dataproc Serverless, meningkatkan performa workload, dan menghemat biaya:
- Penurunan skala node asinkron: Penskalaan Otomatis V2 menggantikan penurunan skala sinkron V1 dengan penurunan skala asinkron. Dengan menggunakan penskalaan turun asinkron, Dataproc Serverless menskalakan turun resource workload tanpa menunggu semua node menyelesaikan migrasi shuffle. Artinya, node longtail yang diskalakan secara perlahan tidak akan memblokir penskalaan.
- Pemilihan node penskalaan ke bawah yang cerdas: Autoscaling V2 menggantikan pemilihan node acak V1 dengan algoritma cerdas yang mengidentifikasi node terbaik untuk diskalakan ke bawah terlebih dahulu. Algoritma ini mempertimbangkan faktor-faktor seperti ukuran data shuffle dan waktu tidak ada aktivitas node.
- Perilaku migrasi shuffle dan penghentian sementara Spark yang dapat dikonfigurasi: Autoscaling V2 memungkinkan Anda menggunakan properti Spark standar untuk mengonfigurasi penghentian sementara Spark yang halus dan migrasi shuffle. Fitur ini dapat membantu Anda mempertahankan kompatibilitas migrasi dengan properti Spark yang disesuaikan.
Fitur penskalaan otomatis Dataproc Serverless
Fitur | Penskalaan Otomatis Dataproc Serverless V1 | Penskalaan Otomatis Dataproc Serverless V2 |
Penurunan skala node | Sinkron | Asinkron |
Pemilihan node untuk penskalaan ke bawah | Acak | Cerdas |
Penghentian tuntas Spark dan migrasi shuffle | Tidak dapat dikonfigurasi | Dapat Dikonfigurasi |
Properti alokasi dinamis Spark
Tabel berikut mencantumkan properti Spark Dynamic Allocation 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 Dataproc Serverless Spark. Tentukan versi 1 atau 2 (lihat Penskalaan otomatis Dataproc Serverless V2). |
1 |
spark.dynamicAllocation.enabled |
Apakah akan menggunakan alokasi resource dinamis, yang menskalakan jumlah eksekutor ke atas dan ke bawah berdasarkan beban kerja.
Menetapkan nilai ke false akan menonaktifkan penskalaan otomatis untuk beban kerja. Default: true . |
true |
spark.dynamicAllocation.initialExecutors |
Jumlah awal eksekutor yang dialokasikan ke beban kerja. Setelah beban kerja dimulai, penskalaan otomatis dapat mengubah jumlah eksekutor aktif.
Nilai minimum adalah 2 ; nilai maksimum adalah 500 . |
2 |
spark.dynamicAllocation.minExecutors |
Jumlah minimum eksekutor untuk menskalakan beban kerja.
Nilai minimum adalah 2 . |
2 |
spark.dynamicAllocation.maxExecutors |
Jumlah maksimum eksekutor untuk menskalakan 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 kemampuan penskalaan dan
paralelisme pada setengah nilai maksimum. |
0.3 |
spark.reducer.fetchMigratedShuffle.enabled |
Jika ditetapkan ke true , memungkinkan pengambilan lokasi output shuffle
dari driver Spark setelah pengambilan gagal dari eksekutor yang
dinonaktifkan karena alokasi dinamis Spark. Hal ini mengurangi
error ExecutorDeadException yang disebabkan oleh migrasi blok shuffle
dari eksekutor yang dinonaktifkan ke eksekutor aktif, dan 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
Beban kerja 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 berdasarkan beban saat ini untuk memenuhi semua tugas yang sedang berjalan dan tertunda. |
running |
Jumlah eksekutor yang berjalan dan mengeksekusi tugas. |
Masalah dan solusi alokasi dinamis Spark
FetchFailedException yang disebabkan oleh ExecutorDeadException
Penyebab: Saat alokasi dinamis Spark menskalakan eksekutor, file shuffle dimigrasikan ke eksekutor aktif. Namun, karena tugas reducer Spark pada eksekutor 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 eksekutor yang dinonaktifkan, sehingga menyebabkan error
ExecutorDeadException
danFetchFailedException
.Solusi: Aktifkan pengambilan ulang lokasi shuffle dengan menetapkan
spark.reducer.fetchMigratedShuffle.enabled
ketrue
saat Anda menjalankan workload batch Spark Dataproc Serverless (lihat Menetapkan properti workload batch Spark). Jika properti ini diaktifkan, tugas reducer akan mengambil ulang lokasi output shuffle dari driver setelah pengambilan dari eksekutor yang dinonaktifkan gagal.