Melakukan penskalaan otomatis resource workload

Penskalaan otomatis Managed Service untuk Apache Spark memungkinkan Anda menskalakan resource workload secara dinamis, seperti jumlah eksekutor, untuk menjalankan tugas Spark secara efisien. Diaktifkan secara default, penskalaan otomatis menggunakan alokasi resource dinamis Spark untuk menentukan apakah, bagaimana, dan kapan harus menskalakan workload Anda.

Penskalaan otomatis V2 Managed Service untuk Apache Spark

Penskalaan otomatis Managed Service untuk Apache Spark versi 2 (V2) menambahkan fitur dan peningkatan pada versi default 1 (V1) untuk membantu Anda mengelola workload Managed Service untuk Apache Spark, meningkatkan performa workload, dan menghemat biaya:

  • Penurunan skala node asinkron: Autoscaling 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 longtail yang memperkecil skala secara perlahan tidak akan memblokir peningkatan skala.
  • Pemilihan node perkecil skala yang cerdas: Penskalaan otomatis V2 menggantikan pemilihan node acak V1 dengan algoritma cerdas yang mengidentifikasi node terbaik untuk diperkecil skala terlebih dahulu. Algoritma ini mempertimbangkan faktor-faktor seperti ukuran data shuffle dan waktu tidak ada aktivitas node.
  • Perilaku penghentian tuntas dan migrasi shuffle Spark yang dapat dikonfigurasi: Penskalaan otomatis V2 memungkinkan Anda menggunakan properti Spark standar untuk mengonfigurasi penghentian tuntas dan migrasi shuffle Spark. 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 V2 Managed Service untuk Apache Spark
Downscaling 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. 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 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 memperkecil 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 ke dalam log jika eksekutor yang berjalan melebihi eksekutor yang diperlukan maksimum untuk periode yang ditentukan oleh spark.dynamicAllocation.diagnosis.interval. Diagnosis 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 level log output. false
spark.dynamicAllocation.profile Tetapkan ke performance atau cost untuk menerapkan serangkaian konfigurasi yang telah ditetapkan dan dioptimalkan untuk performa atau efektivitas 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 shuffle. Alih-alih 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 menjaga eksekutor dengan shuffle 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 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 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 Jika true, menghindari penjadwalan tugas pada eksekutor yang mengalami shuffle-skew, yaitu eksekutor yang memiliki data shuffle dalam jumlah besar atau sejumlah besar tugas peta yang telah selesai. Hal ini dapat meningkatkan performa dengan mengurangi kecondongan shuffle. false

Profil alokasi dinamis Spark

Anda dapat menetapkan properti spark.dynamicAllocation.profile ke performance atau cost untuk menerapkan serangkaian konfigurasi Spark yang telah ditetapkan dan dioptimalkan untuk performa atau efektivitas biaya. Jika Anda menetapkan properti Spark selain menetapkan properti spark.dynamicAllocation.profile, setelan Anda akan mengganti setelan default profil untuk properti tersebut.

performa: Profil ini mengoptimalkan waktu eksekusi minimum dengan menerapkan setelan default berikut:

  • spark.scheduler.excludeShuffleSkewExecutors: true
  • spark.dynamicAllocation.executorIdleTimeout: 300s
  • spark.dynamicAllocation.initialExecutors: 10

cost: Profil ini mengoptimalkan pengurangan konsumsi resource dengan menerapkan setelan default berikut:

  • spark.dynamicAllocation.executorIdleTimeout: 120s
  • spark.dynamicAllocation.cachedExecutorIdleTimeout: 120s
  • spark.dynamicAllocation.shuffleTracking.dynamicTimeout.enabled: true
  • spark.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 sedang menjalankan tugas.

Masalah dan solusi alokasi dinamis Spark

  • FetchFailedException yang disebabkan oleh ExecutorDeadException

    Penyebab: Saat alokasi dinamis Spark memperkecil skala eksekutor, file shuffle akan 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 dihentikan, sehingga menyebabkan error ExecutorDeadException dan FetchFailedException.

    Solusi: Aktifkan pengambilan ulang lokasi shuffle dengan menetapkan spark.reducer.fetchMigratedShuffle.enabled ke true saat Anda menjalankan workload batch Managed Service 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 dinonaktifkan gagal.