Penskalaan otomatis Serverless for Apache Spark

Dokumen ini memberikan informasi tentang Google Cloud penskalaan otomatis Serverless for Apache Spark. Saat Anda mengirimkan workload Spark, Serverless untuk Apache Spark dapat menskalakan resource workload secara dinamis, seperti jumlah eksekutor, untuk menjalankan workload Anda secara efisien. Penskalaan otomatis Serverless untuk Apache Spark adalah perilaku default, dan menggunakan alokasi resource dinamis Spark untuk menentukan apakah, bagaimana, dan kapan harus menskalakan workload Anda.

Penskalaan otomatis V2 untuk Apache Spark serverless

Penskalaan otomatis Serverless untuk Apache Spark versi 2 (V2) menambahkan fitur dan peningkatan ke versi 1 (V1) default untuk membantu Anda mengelola workload Serverless 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 penurunan skala asinkron, Serverless 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 penskalaan bawah 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 pengacakan dan waktu tidak ada aktivitas node.
  • Perilaku migrasi shuffle dan penonaktifan yang lancar untuk Spark yang dapat dikonfigurasi: Autoscaling V2 memungkinkan Anda menggunakan properti Spark standar untuk mengonfigurasi penonaktifan yang lancar dan migrasi shuffle Spark. Fitur ini dapat membantu Anda mempertahankan kompatibilitas migrasi dengan properti Spark yang disesuaikan.

Fitur penskalaan otomatis Serverless for Apache Spark

Fitur Penskalaan Otomatis Serverless untuk Apache Spark V1 Penskalaan Otomatis V2 untuk Apache Spark Serverless
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 menetapkan properti Spark).

Properti Deskripsi Default
spark.dataproc.scaling.version Versi penskalaan otomatis Spark Serverless untuk Apache Spark. Tentukan versi 1 atau 2 (lihat Penskalaan otomatis Serverless untuk Apache Spark V2). 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 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 memperkecil skala beban kerja. 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 peningkatan skala dan paralelisme pada setengah dari nilai maksimum. 0.3
spark.reducer.fetchMigratedShuffle.enabled Jika disetel ke true, memungkinkan pengambilan lokasi output pengacakan 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 executor yang dihentikan ke executor aktif, dan mengurangi percobaan ulang tahap yang disebabkan oleh error FetchFailedException (lihat FetchFailedException yang disebabkan oleh ExecutorDeadException). Properti ini tersedia di Serverless for Apache Spark 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 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 di bawah beban saat ini untuk memenuhi semua tugas yang sedang berjalan dan menunggu persetujuan.
running Jumlah eksekutor yang sedang 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 ExecutorDeadException dan FetchFailedException.

    Solusi: Aktifkan pengambilan ulang lokasi shuffle dengan menyetel spark.reducer.fetchMigratedShuffle.enabled ke true saat Anda menjalankan workload batch Serverless untuk Apache Spark (lihat Menetapkan 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.