Apa itu penskalaan otomatis
Mengestimasi jumlah cluster worker (node) yang "tepat" untuk workload sulit dilakukan, dan ukuran cluster tunggal untuk seluruh pipeline sering kali tidak ideal. Penskalaan Cluster yang dimulai pengguna sebagian mengatasi tantangan ini, tetapi memerlukan pemantauan pemanfaatan cluster dan intervensi manual.
AutoscalingPolicies API Dataproc
menyediakan mekanisme untuk mengotomatiskan pengelolaan resource cluster serta memungkinkan
penskalaan otomatis worker VM cluster. Autoscaling Policy adalah konfigurasi yang dapat digunakan kembali yang menjelaskan cara menskalakan worker cluster menggunakan kebijakan penskalaan otomatis. Fitur ini menentukan
batas, frekuensi, dan agresivitas penskalaan untuk memberikan kontrol terperinci
atas resource cluster selama masa berlaku cluster.
Kapan harus menggunakan penskalaan otomatis
Gunakan penskalaan otomatis:
pada cluster yang menyimpan data di layanan eksternal, seperti Cloud Storage atau BigQuery
pada cluster yang memproses banyak tugas
untuk meningkatkan skala cluster tugas tunggal
dengan Mode Fleksibilitas yang Ditingkatkan untuk tugas batch Spark
Penskalaan otomatis tidak direkomendasikan digunakan dengan/untuk:
HDFS: Penskalaan otomatis tidak ditujukan untuk penskalaan HDFS dalam cluster karena:
- Penggunaan HDFS bukan merupakan sinyal untuk penskalaan otomatis.
- Data HDFS hanya dihosting di worker primer. Jumlah worker primer harus cukup untuk menghosting semua data HDFS.
- Menghentikan DataNode HDFS dapat menunda penghapusan worker. Datanode akan menyalin blok HDFS ke DataNode lain sebelum worker dihapus. Bergantung pada ukuran data dan faktor replikasi, proses ini dapat memakan waktu berjam-jam.
Label Node YARN: Penskalaan otomatis tidak mendukung Label Node YARN, atau properti
dataproc:am.primary_onlydisebabkan adanya YARN-9088. YARN salah melaporkan metrik cluster saat label node digunakan.Spark Structured Streaming: Penskalaan otomatis tidak mendukung Spark Structured Streaming (baca bagian Penskalaan otomatis dan Spark Structured Streaming).
Cluster Nonaktif: Penskalaan otomatis tidak direkomendasikan untuk tujuan menskalakan cluster ke ukuran minimum saat cluster tidak ada aktivitas. Karena membuat cluster baru sama cepatnya dengan mengubah ukurannya, pertimbangkan untuk menghapus cluster yang tidak ada aktivitas dan membuatnya lagi. Alat berikut mendukung model "ephemeral" ini:
Gunakan Workflow Dataproc untuk menjadwalkan serangkaian tugas di cluster khusus, lalu hapus cluster saat tugas selesai. Untuk orkestrasi yang lebih canggih, gunakan Cloud Composer, yang didasarkan pada Apache Airflow.
Untuk cluster yang memproses kueri ad-hoc atau workload yang terjadwal secara eksternal, gunakan Penghapusan Cluster Terjadwal untuk menghapus cluster setelah periode atau durasi tidak ada aktivitas tertentu, atau pada waktu tertentu.
Workload berukuran berbeda: Saat tugas kecil dan besar berjalan di cluster, penurunan skala penghentian tuntas akan menunggu hingga tugas besar selesai. Akibatnya, tugas yang berjalan lama akan menunda penskalaan otomatis resource untuk tugas lebih kecil yang berjalan di cluster hingga tugas yang berjalan lama selesai. Untuk menghindari hasil ini, kelompokkan tugas yang lebih kecil dengan ukuran serupa dalam satu cluster dan pisahkan tiap tugas berdurasi panjang di cluster yang berbeda.
Mengaktifkan penskalaan otomatis
Untuk mengaktifkan penskalaan otomatis di cluster:
Pilih antara:
Membuat kebijakan penskalaan otomatis
gcloud CLI
Anda dapat menggunakan perintah
gcloud dataproc autoscaling-policies import
untuk membuat kebijakan penskalaan otomatis. Perintah ini membaca file
YAML
lokal yang menentukan kebijakan penskalaan otomatis. Format dan konten file
harus cocok dengan objek dan kolom konfigurasi yang ditentukan oleh
REST API
autoscalingPolicies.
Contoh YAML berikut menentukan kebijakan untuk cluster standar Dataproc, dengan semua kolom wajib diisi. Selain itu, perintah ini juga memberikan nilai
minInstances dan maxInstances untuk
worker primer, nilai maxInstances untuk worker sekunder (preemptible), dan menentukan cooldownPeriod selama 4 menit (defaultnya adalah 2 menit). workerConfig mengonfigurasi
worker primer. Dalam contoh ini, minInstances dan
maxInstances diberikan nilai yang sama
untuk menghindari penskalaan worker primer.
workerConfig:
minInstances: 10
maxInstances: 10
secondaryWorkerConfig:
maxInstances: 50
basicAlgorithm:
cooldownPeriod: 4m
yarnConfig:
scaleUpFactor: 0.05
scaleDownFactor: 1.0
gracefulDecommissionTimeout: 1h
Contoh YAML berikut menentukan kebijakan untuk cluster standar Dataproc, dengan semua kolom kebijakan penskalaan otomatis wajib diisi dan opsional.
clusterType: STANDARD
workerConfig:
minInstances: 10
maxInstances: 10
weight: 1
secondaryWorkerConfig:
minInstances: 0
maxInstances: 100
weight: 1
basicAlgorithm:
cooldownPeriod: 2m
yarnConfig:
scaleUpFactor: 0.05
scaleDownFactor: 1.0
scaleUpMinWorkerFraction: 0.0
scaleDownMinWorkerFraction: 0.0
gracefulDecommissionTimeout: 1h
Contoh YAML berikut menentukan kebijakan untuk cluster berskala nol.
Untuk cluster berskala nol, jangan menyertakanworkerConfig.
clusterType: ZERO_SCALE
secondaryWorkerConfig:
minInstances: 0
maxInstances: 100
weight: 1
basicAlgorithm:
cooldownPeriod: 2m
yarnConfig:
scaleUpFactor: 0.05
scaleDownFactor: 1.0
scaleUpMinWorkerFraction: 0.0
scaleDownMinWorkerFraction: 0.0
gracefulDecommissionTimeout: 1h
Jalankan perintah gcloud berikut dari terminal lokal atau di
Cloud Shell untuk membuat
kebijakan penskalaan otomatis. Berikan nama untuk kebijakan. Nama ini akan menjadi
id kebijakan, yang dapat Anda gunakan dalam perintah gcloud
selanjutnya untuk merujuk kebijakan. Gunakan flag --source untuk menentukan
jalur lokal dan nama file YAML dari kebijakan penskalaan otomatis yang akan diimpor.
gcloud dataproc autoscaling-policies import policy-name \ --source=filepath/filename.yaml \ --region=region
REST API
Buat kebijakan penskalaan otomatis dengan menentukan Kebijakan penskalaan otomatis sebagai bagian dari permintaan autoscalingPolicies.create.
Konsol
Untuk membuat kebijakan penskalaan otomatis, pilih CREATE POLICY dari halaman Autoscaling policies Dataproc menggunakan konsol Google Cloud . Di halaman Create policy, Anda dapat memilih panel rekomendasi kebijakan guna mengisi kolom kebijakan penskalaan otomatis untuk jenis tugas atau tujuan penskalaan tertentu.
Membuat cluster penskalaan otomatis
Setelah membuat kebijakan penskalaan otomatis, buat cluster yang akan menggunakan kebijakan penskalaan otomatis. Cluster harus berada di region yang sama dengan kebijakan penskalaan otomatis.
gcloud CLI
Jalankan perintah gcloud berikut dari terminal lokal atau di
Cloud Shell untuk membuat
cluster penskalaan otomatis. Berikan nama untuk cluster, lalu gunakan
flag --autoscaling-policy untuk menentukan policy ID
(nama kebijakan yang Anda tentukan saat
membuat kebijakan)
atau kebijakan
resource URI (resource name)
(lihat
kolom id dan name AutoscalingPolicy).
gcloud dataproc clusters create cluster-name \ --autoscaling-policy=policy id or resource URI \ --region=region
REST API
Buat cluster penskalaan otomatis dengan menyertakan AutoscalingConfig sebagai bagian dari permintaan clusters.create.
Konsol
Anda dapat memilih kebijakan penskalaan otomatis yang sudah ada untuk diterapkan ke cluster baru dari bagian Autoscaling policy pada panel Set up cluster di halaman Create a cluster Dataproc di konsol Google Cloud .
Mengaktifkan penskalaan otomatis di cluster yang sudah ada
Setelah membuat kebijakan penskalaan otomatis, Anda dapat mengaktifkan kebijakan pada cluster yang ada di region yang sama.
gcloud CLI
Jalankan perintah gcloud berikut dari terminal lokal atau di
Cloud Shell untuk mengaktifkan
kebijakan penskalaan otomatis di cluster yang sudah ada. Berikan nama untuk cluster, lalu gunakan
flag --autoscaling-policy untuk menentukan policy ID
(nama kebijakan yang Anda tentukan saat
membuat kebijakan)
atau kebijakan
resource URI (resource name)
(lihat
kolom id dan name AutoscalingPolicy).
gcloud dataproc clusters update cluster-name \ --autoscaling-policy=policy id or resource URI \ --region=region
REST API
Untuk mengaktifkan kebijakan penskalaan otomatis pada cluster yang sudah ada, atur
AutoscalingConfig.policyUri
kebijakan di updateMask dari
permintaan clusters.patch.
Konsol
Mengaktifkan kebijakan penskalaan otomatis di cluster yang sudah ada tidak didukung di konsol Google Cloud .
Penggunaan kebijakan multi-cluster
Kebijakan penskalaan otomatis menentukan perilaku penskalaan yang dapat diterapkan ke beberapa cluster. Kebijakan penskalaan otomatis paling efektif diterapkan di beberapa cluster jika cluster tersebut akan berbagi workload serupa atau menjalankan tugas dengan pola penggunaan resource yang sama.
Anda dapat memperbarui kebijakan yang digunakan oleh beberapa cluster. Pembaruan akan langsung memengaruhi perilaku penskalaan otomatis untuk semua cluster yang menggunakan kebijakan tersebut (lihat autoscalingPolicies.update). Jika Anda tidak ingin pembaruan kebijakan berlaku untuk cluster yang menggunakan kebijakan tersebut, nonaktifkan penskalaan otomatis di cluster sebelum memperbarui kebijakan.
gcloud CLI
Jalankan perintah gcloud berikut dari terminal lokal atau di
Cloud Shell untuk
menonaktifkan penskalaan otomatis pada suatu cluster.
gcloud dataproc clusters update cluster-name --disable-autoscaling \ --region=region
REST API
Untuk menonaktifkan penskalaan otomatis pada cluster, tetapkan
AutoscalingConfig.policyUri
menjadi string kosong dan tetapkan
update_mask=config.autoscaling_config.policy_uri dalam
permintaan clusters.patch.
Konsol
Penonaktifan penskalaan otomatis pada cluster tidak didukung di konsol Google Cloud .
- Kebijakan yang sedang digunakan oleh satu atau beberapa cluster tidak dapat dihapus (lihat autoscalingPolicies.delete).
Cara kerja penskalaan otomatis
Penskalaan otomatis akan memeriksa metrik Hadoop YARN cluster saat tiap "periode tunggu" berakhir untuk menentukan apakah cluster perlu diskalakan atau tidak, dan jika perlu, juga akan menentukan seberapa besar perubahan yang diperlukan.
Nilai metrik resource tertunda YARN (Memori Tertunda atau Inti Tertunda) akan menentukan apakah skala akan dinaikkan atau diturunkan. Nilai yang lebih besar daripada
0menunjukkan bahwa tugas YARN sedang menunggu resources dan peningkatan skala mungkin diperlukan. Nilai0menunjukkan bahwa YARN memiliki resource yang memadai sehingga penurunan skala atau perubahan lainnya mungkin tidak diperlukan.If pending resource is > 0:
$estimated\_worker\_count =$
\[ \Biggl \lceil AVERAGE\ during\ cooldown\ period\Big(\frac{Pending + Available + Allocated + Reserved}{Resource\ per\ worker}\Big)\Biggr \rceil \]
If pending resource is 0:
$estimated\_worker\_count =$
\[ \Biggl \lceil AVERAGE\ during\ cooldown\ period\Big(\frac{Allocated + Reserved}{Resource\ per\ worker}\Big)\Biggr \rceil \]
Secara default, mulai dari Dataproc image 2.2, autoscaler memantau memori YARN dan core YARN sehingga
estimated_worker_countdievaluasi secara terpisah untuk memori dan core, dan jumlah worker yang lebih besar dipilih. Untuk versi image sebelumnya, autoscaler hanya memantau memori YARN, kecuali jika Anda mengaktifkan penskalaan otomatis berbasis core.$estimated\_worker\_count =$
\[ max(estimated\_worker\_count\_by\_memory,\ estimated\_worker\_count\_by\_cores) \]
\[ estimated\ \Delta worker = estimated\_worker\_count - current\_worker\_count \]
Mengingat perkiraan perubahan yang diperlukan pada jumlah worker, penskalaan otomatis menggunakan
scaleUpFactoratauscaleDownFactoruntuk menghitung perubahan sebenarnya pada jumlah worker:if estimated Δworkers > 0: actual Δworkers = ROUND_UP(estimated Δworkers * scaleUpFactor) # examples: # ROUND_UP(estimated Δworkers=5 * scaleUpFactor=0.5) = 3 # ROUND_UP(estimated Δworkers=0.8 * scaleUpFactor=0.5) = 1 else: actual Δworkers = ROUND_DOWN(estimated Δworkers * scaleDownFactor) # examples: # ROUND_DOWN(estimated Δworkers=-5 * scaleDownFactor=0.5) = -2 # ROUND_DOWN(estimated Δworkers=-0.8 * scaleDownFactor=0.5) = 0 # ROUND_DOWN(estimated Δworkers=-1.5 * scaleDownFactor=0.5) = 0
scaleUpFactor atau scaleDownFactor sebesar 1.0 berarti penskalaan otomatis akan menskalakan sehingga resource yang tertunda atau tersedia adalah 0 (penggunaan sempurna).
Setelah perubahan jumlah worker dihitung,
scaleUpMinWorkerFractionatauscaleDownMinWorkerFractionakan bertindak sebagai nilai minimum untuk menentukan apakah penskalaan otomatis akan menskalakan cluster atau tidak. Angka pecahan kecil menunjukkan bahwa penskalaan otomatis harus melakukan penskalaan meskipunΔworkerstergolong kecil. Angka pecahan yang lebih besar berarti penskalaan hanya dapat terjadi jikaΔworkersbesar. ATAUIF (Δworkers > scaleUpMinWorkerFraction * current_worker_count) then scale up
IF (abs(Δworkers) > scaleDownMinWorkerFraction * current_worker_count), THEN scale down.
Jika jumlah worker yang akan diskalakan cukup besar untuk memicu penskalaan, penskalaan otomatis akan menggunakan batas
minInstancesmaxInstancesdariworkerConfigdansecondaryWorkerConfigdanweight(rasio worker primer terhadap sekunder) untuk menentukan cara membagi jumlah worker di seluruh grup worker instance primer dan sekunder. Hasil penghitungan ini adalah perubahan penskalaan otomatis akhir pada cluster selama periode penskalaan.Permintaan penurunan skala penskalaan otomatis akan dibatalkan di cluster yang dibuat dengan versi image 2.0.57+, 2.1.5+, dan versi image yang lebih baru jika:
- penurunan skala sedang berlangsung dengan nilai waktu tunggu penghentian tuntas bukan nol, dan
jumlah worker YARN AKTIF ("worker aktif") ditambah perubahan jumlah total worker yang direkomendasikan oleh autoscaler (
Δworkers) sama dengan atau lebih besar daripadaDECOMMISSIONINGworker YARN ("worker yang dihentikan"), seperti yang ditunjukkan dalam rumus berikut:IF (active workers + Δworkers ≥ active workers + decommissioning workers) THEN cancel the scaledown operation
Untuk mengetahui contoh pembatalan penurunan skala, baca bagian Kapan penskalaan otomatis membatalkan operasi penurunan skala?.
Rekomendasi konfigurasi penskalaan otomatis
Bagian ini berisi rekomendasi untuk membantu Anda mengonfigurasi penskalaan otomatis.
Menghindari penskalaan worker primer
Worker primer menjalankan Datanode HDFS, sedangkan worker sekunder hanya melakukan komputasi.
Dengan worker sekunder, Anda dapat menskalakan resource komputasi secara efisien tanpa
perlu menyediakan penyimpanan, sehingga akan menghasilkan kemampuan penskalaan yang lebih cepat.
Namenode HDFS dapat memiliki beberapa kondisi race yang menyebabkan HDFS menjadi
rusak sehingga penghapusan mengalami hambatan tanpa batas waktu. Untuk
menghindari masalah ini, hindari menskalakan worker primer. Contoh:
none
workerConfig:
minInstances: 10
maxInstances: 10
secondaryWorkerConfig:
minInstances: 0
maxInstances: 100
Ada beberapa modifikasi yang perlu dilakukan pada perintah pembuatan cluster:
- Tetapkan
--num-workers=10agar sesuai dengan ukuran grup worker utama kebijakan penskalaan otomatis. - Tetapkan
--secondary-worker-type=non-preemptibleuntuk mengonfigurasi worker sekunder agar bersifat non-preemptible. (Kecuali jika preemptible VM menjadi pilihan). - Salin konfigurasi hardware dari worker primer ke worker sekunder. Misalnya, tetapkan
--secondary-worker-boot-disk-size=1000GBagar cocok dengan--worker-boot-disk-size=1000GB.
Menggunakan Mode Fleksibilitas yang Ditingkatkan untuk tugas batch Spark
Gunakan Mode Fleksibilitas yang Ditingkatkan (EFM) dengan penskalaan otomatis untuk:
memungkinkan penurunan skala cluster yang lebih cepat saat tugas sedang berjalan
mencegah gangguan pada tugas yang sedang berjalan karena adanya penurunan skala cluster
mengurangi gangguan pada tugas yang sedang berjalan karena preemption dari worker sekunder preemptible
Dengan mengaktifkan EFM, waktu tunggu penghentian tuntas kebijakan penskalaan otomatis harus ditetapkan ke 0s. Kebijakan penskalaan otomatis hanya boleh menskalakan otomatis worker sekunder.
Memilih waktu tunggu penghentian tuntas
Penskalaan otomatis mendukung Penghentian tuntas YARN saat menghapus node dari sebuah cluster. Dengan penghentian tuntas, aplikasi dapat menyelesaikan pengacakan data antartahap untuk menghindari kemunduran progres tugas. Waktu tunggu penghentian tuntas yang diberikan dalam kebijakan penskalaan otomatis adalah batas atas durasi YARN yang akan menunggu aplikasi yang sedang berjalan (aplikasi yang sedang berjalan saat penghentian dimulai) sebelum menghapus node.
Jika proses tidak selesai dalam periode waktu tunggu penghentian tuntas yang ditentukan, worker node akan dimatikan secara paksa, sehingga berpotensi menyebabkan kehilangan data atau gangguan layanan. Untuk membantu menghindari kemungkinan ini, tetapkan waktu tunggu penghentian tuntas ke nilai yang lebih lama daripada tugas paling lama yang akan diproses cluster. Misalnya, jika Anda memperkirakan tugas terlama Anda akan berjalan selama satu jam, tetapkan waktu tunggu minimal satu jam (1h).
Pertimbangkan untuk memigrasikan tugas yang memerlukan waktu lebih lama daripada 1 jam ke cluster ephemeral-nya sendiri untuk menghindari hambatan penghentian tuntas.
Menetapkan scaleUpFactor
scaleUpFactor mengontrol seberapa agresif autoscaler meningkatkan skala cluster.
Tetapkan angka antara 0.0 hingga 1.0 untuk menetapkan nilai pecahan
dari resource tertunda YARN yang menyebabkan penambahan node.
Misalnya, jika ada 100 container tertunda yang masing-masing meminta 512 MB, berarti ada 50 GB memori YARN yang tertunda. Jika scaleUpFactor adalah 0.5, autoscaler akan menambahkan node yang cukup untuk menambahkan memori YARN sebesar 25 GB. Demikian pula, jika nilainya
0.1, autoscaler akan menambahkan node yang cukup untuk 5 GB. Perhatikan bahwa nilai ini
sesuai dengan memori YARN, bukan total memori yang tersedia secara fisik di VM.
Titik awal yang baik adalah 0.05 untuk tugas MapReduce dan tugas Spark dengan alokasi dinamis aktif. Untuk tugas Spark dengan jumlah eksekutor tetap dan tugas Tez, gunakan
1.0. ScaleUpFactor sebesar 1.0 berarti penskalaan otomatis akan menskalakan sehingga
resource yang tertunda atau tersedia adalah 0 (penggunaan sempurna).
Menetapkan scaleDownFactor
scaleDownFactor mengontrol seberapa agresif autoscaler memperkecil skala cluster. Tentukan angka antara 0.0 hingga 1.0 untuk menetapkan nilai pecahan
dari resource yang tersedia di YARN yang menyebabkan penghapusan node.
Biarkan nilai ini di angka 1.0 untuk sebagian besar cluster multitugas yang perlu sering meningkatkan dan memperkecil skala. Sebagai hasil dari penghentian tuntas, operasi penurunan skala jauh lebih lambat daripada operasi peningkatan skala. scaleDownFactor=1.0 akan menetapkan
laju penurunan skala yang agresif, yang meminimalkan jumlah operasi penurunan skala
yang diperlukan untuk mencapai ukuran cluster yang sesuai.
Untuk cluster yang memerlukan stabilitas lebih tinggi, tetapkan agar scaleDownFactor menjadi lebih rendah untuk laju pengurangan skala yang lebih lambat.
Tetapkan nilai ini ke 0.0 untuk mencegah penurunan skala cluster, misalnya, saat
menggunakan cluster sementara atau tugas tunggal.
Menetapkan scaleUpMinWorkerFraction dan scaleDownMinWorkerFraction
scaleUpMinWorkerFraction dan scaleDownMinWorkerFraction digunakan
bersama dengan scaleUpFactor atau scaleDownFactor dan memiliki nilai
default 0.0. Nilai ini mewakili nilai minimum ketika autoscaler akan
meningkatan skala atau memperkecil skala cluster: nilai pecahan minimum akan menambah
atau mengurangi ukuran cluster yang penting untuk mengeluarkan permintaan peningkatan dan penurunan skala.
Contoh: Autoscaler tidak akan mengeluarkan permintaan update untuk menambahkan 5 worker ke
cluster 100 node kecuali jika scaleUpMinWorkerFraction kurang dari atau sama dengan 0.05
(5%). Jika ditetapkan ke 0.1, autoscaler tidak akan mengeluarkan permintaan untuk meningkatkan skala cluster.
Demikian pula, jika scaleDownMinWorkerFraction bernilai 0.05, autoscaler tidak akan
memulai operasi penurunan kecuali setidaknya 5 node akan dihapus.
Nilai default 0.0 menandakan tidak ada nilai minimum.
Menetapkan
scaleDownMinWorkerFractionthresholds lebih tinggi pada cluster besar
(> 100 node) untuk menghindari operasi penskalaan kecil yang tidak perlu
sangat direkomendasikan.
Memilih periode tunggu
cooldownPeriod menetapkan jangka waktu saat autoscaler tidak akan mengeluarkan permintaan untuk mengubah ukuran cluster. Anda dapat menggunakannya
untuk membatasi frekuensi perubahan autoscaler pada ukuran cluster.
cooldownPeriod minimum dan default
adalah dua menit. Jika cooldownPeriod yang lebih singkat ditetapkan dalam kebijakan, perubahan workload akan lebih cepat memengaruhi ukuran cluster, tetapi cluster mungkin akan melakukan peningkatan skala dan penurunan skala
yang tidak diperlukan. Praktik yang disarankan adalah menetapkan kebijakan
scaleUpMinWorkerFraction dan scaleDownMinWorkerFraction
ke nilai selain nol saat menggunakan cooldownPeriod yang lebih singkat. Hal ini memastikan bahwa
cluster hanya akan ditingkatkan atau diperkecil jika perubahan dalam penggunaan resource cukup
untuk menjamin update cluster.
Jika workload Anda sensitif terhadap perubahan ukuran cluster, Anda dapat memperpanjang periode tunggu. Misalnya, jika Anda menjalankan tugas batch processing, Anda dapat menetapkan periode tunggu menjadi 10 menit atau lebih. Bereksperimenlah dengan berbagai periode tunggu untuk menemukan nilai yang paling sesuai untuk workload Anda.
Batas jumlah worker dan bobot grup
Tiap grup worker memiliki minInstances dan maxInstances yang mengonfigurasi batas ketat pada ukuran tiap grup.
Tiap grup juga memiliki parameter yang disebut weight yang bertugas mengonfigurasi target
keseimbangan antara kedua grup. Perhatikan bahwa parameter ini hanya merupakan petunjuk, dan jika
grup mencapai ukuran minimum atau maksimumnya, node hanya akan ditambahkan atau dihapus
dari grup lain. Jadi, weight hampir selalu dibiarkan pada nilai default yaitu 1.
Menggunakan penskalaan otomatis berbasis inti
Untuk aplikasi intensif CPU, praktik terbaiknya adalah menggunakan Kalkulator Resource Dominan untuk alokasi resource. Ini adalah konfigurasi YARN default mulai dari versi image Dataproc 2.2. Dengan versi image sebelumnya, Dataproc mengonfigurasi YARN untuk menggunakan metrik memori untuk alokasi resource kecuali jika Anda menyetel properti berikut saat membuat cluster untuk mengonfigurasi YARN agar menggunakan Kalkulator Resource Dominan:
capacity-scheduler:yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DominantResourceCalculator
Metrik dan log penskalaan otomatis
Resource dan alat berikut dapat membantu Anda memantau operasi penskalaan otomatis dan pengaruhnya terhadap cluster Anda beserta tugasnya.
Cloud Monitoring
Gunakan Cloud Monitoring untuk:
- melihat metrik yang digunakan oleh penskalaan otomatis
- melihat jumlah Pengelola Node di cluster Anda
- memahami alasan penskalaan otomatis menskalakan cluster Anda atau tidak

Cloud Logging
Gunakan Cloud Logging untuk melihat log dari Autoscaler Dataproc.
1) Cari log untuk cluster Anda.

2) Pilih dataproc.googleapis.com/autoscaler.

3) Luaskan pesan log untuk melihat kolom status. Log berada dalam format JSON,
yakni format yang dapat dibaca mesin.

4) Perluas pesan log untuk melihat rekomendasi penskalaan, metrik yang akan digunakan untuk keputusan penskalaan, ukuran cluster asli, dan ukuran cluster target baru.

Latar belakang: Penskalaan otomatis dengan Apache Hadoop dan Apache Spark
Bagian berikut membahas cara penskalaan otomatis saling beroperasi (atau tidak) dengan Hadoop YARN dan Hadoop MapReduce, serta dengan Apache Spark, Spark Streaming, dan Spark Structured Streaming.
Metrik Hadoop YARN
Penskalaan otomatis berpusat pada metrik Hadoop YARN berikut:
Allocated resourcemengacu pada total resource YARN yang digunakan oleh container yang berjalan di seluruh cluster. Jika ada 6 container beroperasi yang dapat menggunakan hingga 1 unit resource, berarti ada 6 resource yang dialokasikan.Available resourceadalah resource YARN di cluster yang tidak digunakan oleh container yang dialokasikan. Jika ada 10 unit resource di seluruh pengelola node dan 6 di antaranya dialokasikan, berarti ada 4 resource yang masih tersedia. Jika ada resource yang tersedia (tidak digunakan) di cluster, penskalaan otomatis dapat menghapus worker dari cluster.Pending resourceadalah jumlah permintaan resource YARN untuk container tertunda. Container tertunda menunggu ruang tersedia untuk dijalankan di YARN. Resource tertunda bernilai bukan nol hanya jika resource yang tersedia bernilai nol atau terlalu kecil untuk dialokasikan ke container berikutnya. Jika ada container tertunda, penskalaan otomatis dapat menambahkan worker ke cluster.
Anda dapat melihat metrik ini di Cloud Monitoring. Secara default, memori YARN adalah 0,8 * total memori di cluster, dengan sisa memori yang dicadangkan untuk penggunaan daemon dan sistem operasi lainnya, seperti cache halaman. Anda dapat mengganti nilai default dengan setelan konfigurasi YARN "yarn.nodemanager.resource.memory-mb" (lihat Apache Hadoop YARN, HDFS, Spark, dan properti terkait).
Penskalaan otomatis dan Hadoop MapReduce
MapReduce menjalankan tiap tugas pemetaan dan pengurangan sebagai container YARN terpisah. Saat tugas dimulai, MapReduce mengirimkan permintaan container untuk tiap tugas pemetaan, sehingga terjadi lonjakan besar dalam memori YARN tertunda. Saat tugas pemetaan selesai, memori tertunda akan berkurang.
Setelah mapreduce.job.reduce.slowstart.completedmaps selesai (95% secara default di Dataproc), MapReduce akan mengantrekan permintaan container untuk semua pengurang, sehingga menyebabkan lonjakan baru dalam memori tertunda.
Kecuali jika tugas pemetaan dan pengurangan Anda memerlukan waktu beberapa menit atau lebih, jangan
menetapkan nilai tinggi untuk scaleUpFactor penskalaan otomatis. Menambahkan worker ke cluster memerlukan waktu minimal 1,5 menit. Jadi pastikan ada tugas tertunda yang cukup untuk memanfaatkan worker baru selama beberapa menit. Titik awal yang baik adalah dengan menetapkan scaleUpFactor ke 0,05 (5%) atau 0,1 (10%) dari memori tertunda.
Penskalaan Otomatis dan Spark
Spark menambahkan lapisan penjadwalan tambahan selain yang disediakan YARN. Secara khusus, alokasi dinamis Spark Core membuat permintaan ke YARN agar container menjalankan pengeksekusi Spark, kemudian menjadwalkan tugas Spark di thread pengeksekusi tersebut. Cluster Dataproc akan mengaktifkan alokasi dinamis secara default, sehingga pengeksekusi akan ditambahkan dan dihapus sesuai kebutuhan.
Spark akan selalu meminta container ke YARN, tetapi tanpa alokasi dinamis. Spark hanya akan meminta container di awal tugas. Dengan alokasi dinamis, Spark akan menghapus container, atau meminta container baru, sesuai kebutuhan.
Spark dimulai dari sejumlah kecil pengeksekusi – 2 di cluster penskalaan otomatis – dan
terus menggandakan jumlah pengeksekusi selama ada tugas yang tertunda.
Hal ini dapat membebaskan memori tertunda dari hambatan (lebih sedikit lonjakan memori tertunda). Sebaiknya tetapkan
scaleUpFactor penskalaan otomatis ke angka yang besar, seperti 1,0 (100%), untuk tugas Spark.
Menonaktifkan alokasi dinamis Spark
Jika Anda menjalankan tugas Spark terpisah yang tidak mendapatkan manfaat dari alokasi dinamis Spark, Anda dapat menonaktifkan alokasi dinamis Spark dengan menyetel
spark.dynamicAllocation.enabled=false dan menyetel spark.executor.instances.
Anda tetap dapat menggunakan penskalaan otomatis untuk meningkatkan dan menurunkan skala cluster saat tugas Spark terpisah berjalan.
Tugas Spark dengan data yang di-cache
Tetapkan spark.dynamicAllocation.cachedExecutorIdleTimeout atau hapus cache set data jika tidak diperlukan lagi. Secara default, Spark tidak akan menghapus pengeksekusi yang telah meng-cache data, dan hal ini akan mencegah penurunan skala cluster.
Penskalaan otomatis dan Spark Streaming
Karena Spark Streaming memiliki versi alokasi dinamis sendiri yang menggunakan sinyal streaming khusus untuk menambahkan dan menghapus pengeksekusi, tetapkan
spark.streaming.dynamicAllocation.enabled=truedan nonaktifkan alokasi dinamis Spark Core dengan menetapkanspark.dynamicAllocation.enabled=false.Jangan menggunakan Penghentian tuntas (penskalaan otomatis
gracefulDecommissionTimeout) bersama dengan tugas Spark Streaming. Sebagai gantinya, untuk menghapus worker dengan aman menggunakan penskalaan otomatis, konfigurasi pembuatan checkpoint untuk toleransi kesalahan.
Atau, untuk menggunakan Spark Streaming tanpa penskalaan otomatis:
- Nonaktifkan alokasi dinamis Spark Core (
spark.dynamicAllocation.enabled=false), dan - Tetapkan jumlah pengeksekusi (
spark.executor.instances) untuk tugas Anda. Lihat Properti cluster.
Penskalaan otomatis dan Spark Structured Streaming
Penskalaan otomatis tidak kompatibel dengan Spark Structured Streaming karena Spark Structured Streaming tidak mendukung alokasi dinamis (baca bagian SPARK-24815: Structured Streaming seharusnya mendukung alokasi dinamis).
Mengontrol penskalaan otomatis melalui partisi dan paralelisme
Meskipun paralelisme biasanya disetel atau ditentukan oleh resource cluster (misalnya, jumlah kontrol blok HDFS berdasarkan jumlah tugas), dengan penskalaan otomatis, hal sebaliknya berlaku: penskalaan otomatis menetapkan jumlah worker sesuai dengan paralelisme tugas. Berikut adalah panduan untuk membantu Anda menyetel paralelisme tugas:
- Meskipun Dataproc menetapkan jumlah tugas pengurangan MapReduce default berdasarkan ukuran cluster awal Anda, Anda dapat menetapkan
mapreduce.job.reducesuntuk meningkatkan paralelisme fase pengurangan. - Paralelisme Spark SQL dan Dataframe ditentukan oleh
spark.sql.shuffle.partitions, yang secara default bernilai 200. - Fungsi RDD Spark secara default adalah
spark.default.parallelism, yang ditetapkan ke jumlah core pada node worker saat tugas dimulai. Namun, semua fungsi RDD yang membuat shuffle menggunakan parameter untuk jumlah partisi, yang menggantikanspark.default.parallelism.
Anda harus memastikan data Anda dipartisi secara merata. Jika ada kecondongan kunci yang signifikan, satu atau beberapa tugas mungkin perlu waktu yang jauh lebih lama daripada tugas lain, sehingga menyebabkan pemanfaatan yang kurang optimal.
Setelan properti penskalaan otomatis Spark dan Hadoop default
Cluster penskalaan otomatis memiliki nilai properti cluster default yang membantu menghindari kegagalan tugas saat worker primer dihapus atau worker sekunder di-preempt. Anda dapat mengganti nilai default ini saat membuat cluster dengan penskalaan otomatis (baca bagian Properti Cluster).
Default untuk meningkatkan jumlah maksimum upaya coba ulang untuk tugas, master aplikasi, dan tahap:
yarn:yarn.resourcemanager.am.max-attempts=10 mapred:mapreduce.map.maxattempts=10 mapred:mapreduce.reduce.maxattempts=10 spark:spark.task.maxFailures=10 spark:spark.stage.maxConsecutiveAttempts=10
Default untuk mereset penghitung percobaan ulang (berguna untuk tugas Spark Streaming yang berjalan lama):
spark:spark.yarn.am.attemptFailuresValidityInterval=1h spark:spark.yarn.executor.failuresValidityInterval=1h
Secara default, mekanisme alokasi dinamis mulai lambat Spark dimulai dari ukuran kecil:
spark:spark.executor.instances=2
Pertanyaan umum (FAQ)
Bagian ini berisi pertanyaan dan jawaban umum terkait penskalaan otomatis.
Dapatkah penskalaan otomatis diaktifkan di cluster dengan ketersediaan tinggi dan cluster node tunggal?
Penskalaan otomatis dapat diaktifkan di cluster dengan ketersediaan tinggi, tetapi tidak di cluster node tunggal (Cluster node tunggal tidak mendukung pengubahan ukuran).
Dapatkah Anda mengubah ukuran cluster penskalaan otomatis secara manual?
Ya. Anda dapat memutuskan untuk mengubah ukuran cluster secara manual sebagai tindakan sementara saat menyesuaikan kebijakan penskalaan otomatis. Namun, perubahan ini hanya akan memberikan efek sementara, dan Penskalaan Otomatis pada akhirnya akan menskalakan cluster kembali.
Alih-alih mengubah ukuran cluster penskalaan otomatis secara manual, coba pertimbangkan:
Memperbarui kebijakan penskalaan otomatis. Tiap perubahan yang dilakukan pada kebijakan penskalaan otomatis akan memengaruhi semua cluster yang saat ini menggunakan kebijakan tersebut (baca bagian Penggunaan kebijakan multi-cluster).
Melepaskan kebijakan dan menskalakan cluster secara manual ke ukuran yang diinginkan.
Mendapatkan dukungan Dataproc.
Apa perbedaan Dataproc dengan penskalaan otomatis Dataflow?
Baca bagian Penskalaan otomatis horizontal Dataflow dan Penskalaan otomatis vertikal Dataflow Prime.
Dapatkah tim developer Dataproc mereset status cluster dari ERROR kembali ke RUNNING?
Secara umum, tidak. Tindakan reset tersebut memerlukan upaya manual untuk memverifikasi apakah aman mereset status cluster atau tidak, dan sering kali cluster tidak dapat direset tanpa langkah-langkah manual lainnya, seperti memulai ulang HDFS NameNode.
Dataproc menetapkan status cluster ke ERROR jika tidak dapat menentukan status cluster setelah operasi gagal. Cluster dengan status
ERROR tidak akan diskalakan otomatis. Penyebab umumnya mencakup:
Error yang ditampilkan dari Compute Engine API, sering kali selama terjadi pemadaman layanan Compute Engine.
HDFS mengalami kerusakan disebabkan bug dalam penghapusan HDFS.
Error Dataproc Control API seperti "Task lease expired".
Hapus dan buat ulang cluster yang berstatus ERROR.
Kapan penskalaan otomatis akan membatalkan operasi penurunan skala?
Grafik berikut adalah ilustrasi yang menunjukkan kapan penskalaan otomatis akan membatalkan operasi penurunan skala (baca juga Cara kerja penskalaan otomatis).

Catatan:
- Cluster mengaktifkan penskalaan otomatis berdasarkan metrik memori YARN saja (default).
- T1-T9 mewakili interval periode tunggu saat autoscaler mengevaluasi jumlah worker (waktu peristiwa telah disederhanakan).
- Diagram batang bertumpuk menandakan jumlah worker YARN cluster aktif, dalam proses penghentian, dan telah dihentikan.
- Jumlah worker yang direkomendasikan autoscaler (garis hitam) didasarkan pada metrik memori YARN, jumlah worker aktif YARN, dan setelan kebijakan penskalaan otomatis (lihat Cara kerja penskalaan otomatis).
- Area latar belakang merah menunjukkan periode saat operasi penurunan skala sedang berjalan.
- Area latar belakang kuning menunjukkan periode saat operasi penurunan skala dibatalkan.
- Area latar belakang hijau menunjukkan periode operasi peningkatan skala.
Operasi berikut terjadi pada saat waktu-waktu berikut:
T1: Autoscaler memulai operasi penurunan skala penghentian tuntas untuk memperkecil skala sekitar setengah dari worker cluster saat ini.
T2: Autoscaler terus memantau metrik cluster. Rekomendasi penurunan skala tidak berubah, dan operasi penurunan skala berlanjut. Beberapa worker telah dihentikan, dan yang lainnya sedang dihentikan (Dataproc akan menghapus worker yang dihentikan).
T3: Autoscaler menghitung bahwa jumlah worker dapat diperkecil skalanya lebih lanjut, kemungkinan karena memori YARN tambahan tersedia. Namun, karena jumlah worker aktif ditambah perubahan jumlah worker yang direkomendasikan tidak sama dengan atau lebih besar daripada jumlah worker yang aktif ditambah worker yang sedang dihentikan, kriteria pembatalan penurunan skala tidak terpenuhi, dan autoscaler tidak membatalkan operasi penurunan skala.
T4: YARN melaporkan kenaikan memori tertunda. Namun, autoscaler tidak mengubah rekomendasi jumlah worker. Seperti pada T3, kriteria pembatalan penurunan skala tetap tidak terpenuhi, dan autoscaler tidak membatalkan operasi penurunan skala.
T5: Memori tertunda YARN meningkat, dan perubahan jumlah worker yang direkomendasikan oleh autoscaler meningkat. Namun, karena jumlah worker aktif ditambah perubahan yang direkomendasikan dalam jumlah worker kurang dari jumlah worker aktif ditambah worker yang akan dihentikan, kriteria pembatalan tetap tidak terpenuhi, dan operasi penurunan skala tidak dibatalkan.
T6: Memori tertunda YARN terus meningkat. Jumlah worker aktif ditambah perubahan jumlah worker yang direkomendasikan oleh autoscaler kini lebih besar daripada jumlah worker aktif ditambah worker yang akan dihentikan. Kriteria pembatalan terpenuhi dan autoscaler membatalkan operasi penurunan skala.
T7: Autoscaler sedang menunggu pembatalan operasi penurunan skala selesai. Autoscaler tidak mengevaluasi dan merekomendasikan perubahan jumlah worker selama interval ini.
T8: Pembatalan operasi penurunan skala selesai. Worker yang akan dihentikan ditambahkan ke cluster dan menjadi aktif. Autoscaler mendeteksi penyelesaian pembatalan operasi penurunan skala, dan menunggu periode evaluasi berikutnya (T9) untuk menghitung jumlah worker yang direkomendasikan.
T9: Tidak ada operasi yang aktif pada saat T9. Berdasarkan kebijakan penskalaan otomatis dan metrik YARN, autoscaler merekomendasikan operasi peningkatan skala.