Apa yang dimaksud dengan penskalaan otomatis?
Memperkirakan jumlah pekerja cluster (node) yang "tepat" untuk beban kerja sulit, dan satu ukuran cluster untuk seluruh pipeline sering kali tidak ideal. Penskalaan Cluster yang dimulai pengguna sebagian mengatasi tantangan ini, tetapi memerlukan pemantauan penggunaan cluster dan intervensi manual.
AutoscalingPolicies API Dataproc menyediakan mekanisme untuk mengotomatiskan pengelolaan resource cluster dan memungkinkan penskalaan otomatis VM pekerja cluster. Autoscaling Policy
adalah konfigurasi yang dapat digunakan kembali yang menjelaskan cara pekerja cluster yang menggunakan kebijakan penskalaan otomatis seharusnya diskalakan. Kebijakan 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:
di cluster yang menyimpan data di layanan eksternal, seperti Cloud Storage atau BigQuery
di cluster yang memproses banyak tugas
untuk menskalakan cluster tugas tunggal
dengan Mode Fleksibilitas yang Ditingkatkan untuk tugas batch Spark
Penskalaan otomatis tidak direkomendasikan dengan/untuk:
HDFS: Penskalaan otomatis tidak dimaksudkan untuk menskalakan HDFS di cluster karena:
- Penggunaan HDFS bukan merupakan sinyal untuk penskalaan otomatis.
- Data HDFS hanya dihosting di pekerja utama. Jumlah pekerja utama harus memadai untuk menghosting semua data HDFS.
- Penghentian DataNode HDFS dapat menunda penghapusan pekerja. Datanode menyalin blok HDFS ke DataNode lain sebelum pekerja dihapus. Bergantung pada ukuran data dan faktor replikasi, proses ini dapat memerlukan waktu beberapa jam.
Label Node YARN: Penskalaan otomatis tidak mendukung Label Node YARN, atau properti
dataproc:am.primary_only
karena YARN-9088. YARN salah melaporkan metrik cluster saat label node digunakan.Spark Structured Streaming: Penskalaan otomatis tidak mendukung Spark Structured Streaming (lihat Penskalaan Otomatis dan Spark Structured Streaming).
Cluster Tidak Ada Aktivitas: Penskalaan otomatis tidak direkomendasikan untuk tujuan menskalakan cluster ke ukuran minimum saat cluster tidak ada aktivitas. Karena membuat cluster baru sama cepatnya dengan mengubah ukuran cluster, sebaiknya hapus cluster tidak ada aktivitas dan buat ulang. Alat berikut mendukung model "ephemeral" ini:
Gunakan Alur Kerja Dataproc untuk menjadwalkan serangkaian tugas di cluster khusus, lalu hapus cluster tersebut saat tugas selesai. Untuk orkestrasi lanjutan, gunakan Cloud Composer, yang didasarkan pada Apache Airflow.
Untuk cluster yang memproses kueri ad hoc atau beban kerja terjadwal secara eksternal, gunakan Penghapusan Terjadwal Cluster untuk menghapus cluster setelah periode atau durasi tidak ada aktivitas yang ditentukan, atau pada waktu tertentu.
Workload dengan ukuran berbeda: Saat tugas kecil dan besar berjalan di cluster, penskalaan turun penghentian layanan yang halus akan menunggu tugas besar selesai. Akibatnya, tugas yang berjalan lama akan menunda penskalaan otomatis resource untuk tugas yang lebih kecil yang berjalan di cluster hingga tugas yang berjalan lama selesai. Untuk menghindari hasil ini, kelompokkan tugas yang lebih kecil dengan ukuran yang sama di cluster, dan isolasi setiap tugas berdurasi lama di cluster terpisah.
Mengaktifkan penskalaan otomatis
Untuk mengaktifkan penskalaan otomatis di cluster:
Salah satu:
Membuat kebijakan penskalaan otomatis
perintah gcloud
Anda dapat menggunakan perintah gcloud dataproc autoscaling-policies import
untuk membuat kebijakan penskalaan otomatis. File ini membaca file
YAML
lokal yang menentukan kebijakan penskalaan otomatis. Format dan konten file
harus cocok dengan objek dan kolom konfigurasi yang ditentukan oleh
autoscalingPolicies
REST API.
Contoh YAML berikut menentukan kebijakan yang menentukan semua kolom yang diperlukan. Fungsi ini juga memberikan nilai minInstances
dan
maxInstances
untuk pekerja utama, nilai
maxInstances
untuk pekerja sekunder (dapat di-preempt),
dan menentukan cooldownPeriod
4 menit (defaultnya adalah 2
menit). workerConfig
mengonfigurasi pekerja utama. Dalam
contoh ini, minInstances
dan maxInstances
ditetapkan ke nilai yang sama untuk menghindari penskalaan pekerja utama.
workerConfig: minInstances: 10 maxInstances: 10 secondaryWorkerConfig: maxInstances: 50 basicAlgorithm: cooldownPeriod: 4m yarnConfig: scaleUpFactor: 0.05 scaleDownFactor: 1.0 gracefulDecommissionTimeout: 1h
Berikut adalah contoh YAML lain yang menentukan semua kolom kebijakan penskalaan otomatis opsional dan wajib.
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
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
berikutnya untuk mereferensikan kebijakan. Gunakan flag --source
untuk menentukan jalur file lokal dan nama file file YAML 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 AutoscalingPolicy 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 untuk 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.
perintah gcloud
Jalankan perintah gcloud
berikut dari terminal lokal atau di Cloud Shell untuk membuat cluster penskalaan otomatis. Berikan nama untuk cluster, dan gunakan
flag --autoscaling-policy
untuk menentukan policy id
(nama kebijakan yang Anda tentukan saat
membuat kebijakan)
atau kebijakan
resource URI (resource name)
(lihat
kolom AutoscalingPolicy id
dan name
).
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 ada untuk diterapkan ke cluster baru dari bagian Kebijakan penskalaan otomatis di panel Siapkan cluster di halaman Dataproc Buat cluster di konsol Google Cloud.
Mengaktifkan penskalaan otomatis di cluster yang ada
Setelah membuat kebijakan penskalaan otomatis, Anda dapat mengaktifkan kebijakan di cluster yang ada di region yang sama.
perintah gcloud
Jalankan perintah gcloud
berikut dari terminal lokal atau di Cloud Shell untuk mengaktifkan kebijakan penskalaan otomatis di cluster yang ada. Berikan nama cluster, dan gunakan
flag --autoscaling-policy
untuk menentukan policy id
(nama kebijakan yang Anda tentukan saat
membuat kebijakan)
atau kebijakan
resource URI (resource name)
(lihat
kolom AutoscalingPolicy id
dan name
).
gcloud dataproc clusters update cluster-name \ --autoscaling-policy=policy id or resource URI \ --region=region
REST API
Untuk mengaktifkan kebijakan penskalaan otomatis di cluster yang ada, tetapkan
AutoscalingConfig.policyUri
kebijakan di updateMask
permintaan
clusters.patch.
Konsol
Saat ini, mengaktifkan kebijakan penskalaan otomatis di cluster yang 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 baik diterapkan di beberapa cluster jika cluster akan berbagi beban kerja yang serupa atau menjalankan tugas dengan pola penggunaan resource yang serupa.
Anda dapat memperbarui kebijakan yang digunakan oleh beberapa cluster. Pembaruan tersebut akan langsung memengaruhi perilaku penskalaan otomatis untuk semua cluster yang menggunakan kebijakan (lihat autoscalingPolicies.update). Jika Anda tidak ingin update kebijakan diterapkan ke cluster yang menggunakan kebijakan, nonaktifkan penskalaan otomatis di cluster sebelum mengupdate kebijakan.
perintah gcloud
Jalankan perintah gcloud
berikut dari terminal lokal atau di
Cloud Shell untuk
menonaktifkan penskalaan otomatis di cluster.
gcloud dataproc clusters update cluster-name --disable-autoscaling \ --region=region
REST API
Untuk menonaktifkan penskalaan otomatis di cluster, tetapkan
AutoscalingConfig.policyUri
ke string kosong dan tetapkan
update_mask=config.autoscaling_config.policy_uri
dalam
permintaan
clusters.patch.
Konsol
Saat ini, menonaktifkan penskalaan otomatis di 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 memeriksa metrik Hadoop YARN cluster saat setiap periode "cooldown" berlalu untuk menentukan apakah akan menskalakan cluster, dan jika ya, besarnya pembaruan.
Nilai metrik resource tertunda YARN (Pending Memory atau Pending Cores) menentukan apakah akan menskalakan ke atas atau ke bawah. Nilai yang lebih besar dari
0
menunjukkan bahwa tugas YARN sedang menunggu resource dan perlu dilakukan penskalaan. Nilai0
menunjukkan YARN memiliki resource yang memadai sehingga penskalaan ke bawah atau perubahan lainnya mungkin tidak diperlukan.Jika resource yang tertunda > 0:
$estimated\_worker\_count =$
\[ \Biggl \lceil AVERAGE\ during\ cooldown\ period\Big(\frac{Pending + Available + Allocated + Reserved}{Resource\ per\ worker}\Big)\Biggr \rceil \]
Jika resource yang tertunda adalah 0:
$estimated\_worker\_count =$
\[ \Biggl \lceil AVERAGE\ during\ cooldown\ period\Big(\frac{Allocated + Reserved}{Resource\ per\ worker}\Big)\Biggr \rceil \]
Secara default, autoscaler memantau resource memori YARN. Jika Anda mengaktifkan penskalaan otomatis berbasis core, memori YARN dan core YARN akan dipantau:
estimated_worker_count
dievaluasi secara terpisah untuk memori dan core, dan jumlah pekerja yang lebih besar yang dihasilkan akan dipilih.$estimated\_worker\_count =$
\[ max(estimated\_worker\_count\_by\_memory,\ estimated\_worker\_count\_by\_cores) \]
\[ estimated\ \Delta worker = estimated\_worker\_count - current\_worker\_count \]
Dengan estimasi perubahan yang diperlukan pada jumlah pekerja, penskalaan otomatis menggunakan
scaleUpFactor
atauscaleDownFactor
untuk menghitung perubahan sebenarnya pada jumlah pekerja: scaleUpFactor atau scaleDownFactor sebesar 1,0 berarti penskalaan otomatis akan diskalakan sehingga resource yang tertunda/tersedia adalah 0 (pemanfaatan sempurna).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
Setelah perubahan pada jumlah pekerja dihitung,
scaleUpMinWorkerFraction
danscaleDownMinWorkerFraction
akan bertindak sebagai nilai minimum untuk menentukan apakah penskalaan otomatis akan menskalakan cluster. Bagian kecil menunjukkan bahwa penskalaan otomatis harus diskalakan meskipunΔworkers
kecil. Fraksi yang lebih besar berarti penskalaan hanya boleh terjadi saatΔworkers
besar. ATAUIF (Δworkers > scaleUpMinWorkerFraction * current_worker_count) then scale up
IF (abs(Δworkers) > scaleDownMinWorkerFraction * current_worker_count), THEN scale down.
Jika jumlah pekerja yang akan diskalakan cukup besar untuk memicu penskalaan, penskalaan otomatis akan menggunakan batas
minInstances
maxInstances
dariworkerConfig
dansecondaryWorkerConfig
sertaweight
(rasio pekerja primer terhadap sekunder) untuk menentukan cara membagi jumlah pekerja di seluruh grup instance pekerja primer dan sekunder. Hasil penghitungan ini adalah perubahan autoscaling akhir ke cluster untuk periode penskalaan.Permintaan penskalaan otomatis akan dibatalkan di cluster yang dibuat dengan versi image setelah 2.0.57 dan 2.1.5 jika:
- penskalaan ke bawah sedang berlangsung dengan nilai waktu tunggu penghentian tuntas yang bukan nol, dan
jumlah pekerja YARN AKTIF ("pekerja aktif") ditambah perubahan jumlah total pekerja yang direkomendasikan oleh autoscaler (
Δworkers
) sama dengan atau lebih besar dariDECOMMISSIONING
pekerja YARN ("pekerja yang dinonaktifkan"), seperti yang ditunjukkan dalam formula berikut:IF (active workers + Δworkers ≥ active workers + decommissioning workers) THEN cancel the scaledown operation
Untuk contoh pembatalan penurunan skala, lihat Kapan penskalaan otomatis membatalkan operasi penurunan skala?.
Rekomendasi konfigurasi penskalaan otomatis
Menghindari penskalaan pekerja primer
Pekerja utama menjalankan Datanode HDFS, sedangkan pekerja sekunder hanya untuk komputasi.
Penggunaan pekerja sekunder memungkinkan Anda menskalakan resource komputasi secara efisien tanpa
perlu menyediakan penyimpanan, sehingga menghasilkan kemampuan penskalaan yang lebih cepat.
Namenode HDFS dapat memiliki beberapa kondisi perlombaan yang menyebabkan HDFS menjadi rusak sehingga penghentian layanan macet selamanya. Untuk
menghindari masalah ini, hindari penskalaan pekerja utama. Contoh:
workerConfig:
minInstances: 10
maxInstances: 10
secondaryWorkerConfig:
minInstances: 0
maxInstances: 100
Ada beberapa modifikasi yang perlu dilakukan pada perintah pembuatan cluster:
- Tetapkan
--num-workers=10
agar cocok dengan ukuran grup pekerja utama kebijakan penskalaan otomatis. - Tetapkan
--secondary-worker-type=non-preemptible
untuk mengonfigurasi pekerja sekunder agar tidak dapat di-preempt. (Kecuali jika preemptible VM diinginkan). - Menyalin konfigurasi hardware dari pekerja utama ke pekerja sekunder. Misalnya, tetapkan
--secondary-worker-boot-disk-size=1000GB
agar 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 berjalan
mencegah gangguan pada tugas yang sedang berjalan karena penyempitan skala cluster
meminimalkan gangguan pada tugas yang sedang berjalan karena preemptif pekerja sekunder yang dapat di-preempt
Dengan EFM diaktifkan, waktu tunggu penghentian tuntas
kebijakan penskalaan otomatis harus ditetapkan ke 0s
. Kebijakan penskalaan otomatis hanya boleh
menskalakan otomatis pekerja sekunder.
Memilih waktu tunggu penghentian tuntas
Penskalaan otomatis mendukung penghentian normal YARN saat menghapus node dari cluster. Penghentian pengoperasian yang halus memungkinkan aplikasi menyelesaikan pengacakan data antar-tahap untuk menghindari penentuan ulang progres tugas. Waktu tunggu penghentian layanan yang wajar yang diberikan dalam kebijakan penskalaan otomatis adalah batas atas durasi yang akan ditunggu YARN untuk menjalankan aplikasi (aplikasi yang berjalan saat penghentian layanan dimulai) sebelum menghapus node.
Jika proses tidak selesai dalam periode waktu tunggu penghentian operasi yang ditentukan, node pekerja akan dimatikan secara paksa, yang berpotensi menyebabkan hilangnya data atau gangguan layanan. Untuk membantu menghindari kemungkinan ini, tetapkan waktu tunggu penghentian tuntas ke nilai yang lebih lama dari
tugas terlama yang akan diproses cluster. Misalnya, jika Anda mengharapkan tugas terpanjang
berjalan selama satu jam, tetapkan waktu tunggu setidaknya satu jam (1h
).
Pertimbangkan untuk memigrasikan tugas yang memerlukan waktu lebih dari 1 jam ke cluster sementaranya sendiri untuk menghindari pemblokiran penghentian layanan yang halus.
Setelan scaleUpFactor
scaleUpFactor
mengontrol seberapa agresif autoscaler meningkatkan skala cluster.
Tentukan angka antara 0.0
dan 1.0
untuk menetapkan nilai pecahan
resource YARN yang tertunda yang menyebabkan penambahan node.
Misalnya, jika ada 100 penampung tertunda yang masing-masing meminta 512 MB, maka
ada memori YARN tertunda sebesar 50 GB. 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 yang diaktifkan. Untuk tugas Spark dengan jumlah eksekutor tetap dan tugas Tez, gunakan
1.0
. scaleUpFactor 1.0
berarti penskalaan otomatis akan diskalakan sehingga resource yang tertunda/tersedia adalah 0 (penggunaan sempurna).
Setelan scaleDownFactor
scaleDownFactor
mengontrol seberapa agresif autoscaler menurunkan skala cluster. Tentukan angka antara 0.0
dan 1.0
untuk menetapkan nilai pecahan
resource yang tersedia YARN yang menyebabkan penghapusan node.
Tetapkan nilai ini ke 1.0
untuk sebagian besar cluster multi-tugas yang perlu sering ditingkatkan dan diturunkan skalanya. Sebagai akibat dari penghentian tuntas, operasi penskalaan ke bawah jauh lebih lambat daripada operasi penskalaan ke atas. Menetapkan scaleDownFactor=1.0
akan menetapkan
tingkat 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 scaleDownFactor
yang lebih rendah untuk
rasio penskalaan yang lebih lambat.
Tetapkan nilai ini ke 0.0
untuk mencegah penurunan skala cluster, misalnya, saat
menggunakan cluster tugas tunggal atau sementara.
Menetapkan scaleUpMinWorkerFraction
dan scaleDownMinWorkerFraction
scaleUpMinWorkerFraction
dan scaleDownMinWorkerFraction
digunakan
dengan scaleUpFactor
atau scaleDownFactor
dan memiliki nilai
default 0.0
. Nilai ini mewakili nilai minimum saat autoscaler akan menaikkan atau menurunkan skala cluster: peningkatan nilai pecahan minimum atau penurunan ukuran cluster yang diperlukan untuk mengeluarkan permintaan penskalaan ke atas atau ke bawah.
Contoh: Autoscaler tidak akan mengeluarkan permintaan pembaruan untuk menambahkan 5 pekerja 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 menskalakan cluster.
Demikian pula, jika scaleDownMinWorkerFraction
adalah 0.05
, autoscaler tidak akan
mengeluarkan permintaan update untuk menghapus node dari cluster 100 node kecuali jika
setidaknya 5 node akan dihapus.
Nilai default 0.0
menunjukkan tidak ada nilai minimum.
Sebaiknya tetapkan scaleDownMinWorkerFractionthresholds
yang lebih tinggi di cluster besar (> 100 node) untuk menghindari operasi penskalaan kecil yang tidak perlu.
Memilih periode tunggu
cooldownPeriod
menetapkan jangka waktu selama 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 beban kerja
akan lebih cepat memengaruhi ukuran cluster, tetapi cluster mungkin tidak perlu diskalakan
ke atas dan ke bawah. Praktik yang direkomendasikan adalah menetapkan
scaleUpMinWorkerFraction
dan scaleDownMinWorkerFraction
kebijakan ke nilai non-nol saat menggunakan cooldownPeriod
yang lebih pendek. Hal ini memastikan bahwa
cluster hanya diskalakan ke atas atau ke bawah jika perubahan dalam penggunaan resource
cukup untuk menjamin update cluster.
Jika workload Anda sensitif terhadap perubahan ukuran cluster, Anda dapat meningkatkan periode tunggu. Misalnya, jika menjalankan tugas pemrosesan batch, Anda dapat menetapkan periode tunggu menjadi 10 menit atau lebih. Bereksperimenlah dengan periode waktu tunggu yang berbeda untuk menemukan nilai yang paling sesuai untuk workload Anda.
Batas jumlah pekerja dan bobot grup
Setiap grup pekerja memiliki minInstances
dan maxInstances
yang mengonfigurasi batas
keras pada ukuran setiap grup.
Setiap grup juga memiliki parameter yang disebut weight
yang mengonfigurasi target
saldo antara kedua grup. Perhatikan bahwa parameter ini hanyalah petunjuk, dan jika
grup mencapai ukuran minimum atau maksimum, node hanya akan ditambahkan atau dihapus
dari grup lain. Jadi, weight
hampir selalu dapat dibiarkan pada 1
default.
Mengaktifkan penskalaan otomatis berbasis core
Secara default, YARN menggunakan metrik memori untuk alokasi resource. Untuk aplikasi yang intensif menggunakan CPU, praktik terbaiknya adalah mengonfigurasi YARN untuk menggunakan Dominant Resource Calculator. Untuk melakukannya, tetapkan properti berikut saat Anda membuat cluster:
capacity-scheduler:yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DominantResourceCalculator
Metrik dan log penskalaan otomatis
Referensi dan alat berikut dapat membantu Anda memantau operasi penskalaan otomatis dan pengaruhnya terhadap cluster dan 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 atau tidak menskalakan cluster Anda
Cloud Logging
Gunakan Cloud Logging untuk melihat log dari Cloud Dataproc Autoscaler.
1) Temukan log untuk cluster Anda.
2) Pilih dataproc.googleapis.com/autoscaler
.
3) Luaskan pesan log untuk melihat kolom status
. Log dalam JSON, yaitu
format yang dapat dibaca mesin.
4) Luaskan pesan log untuk melihat rekomendasi penskalaan, metrik yang 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 (atau tidak) berinteraksi dengan Hadoop YARN dan Hadoop Mapreduce, serta dengan Apache Spark, Spark Streaming, dan Spark Structured Streaming.
Metrik YARN Hadoop
Penskalaan otomatis berfokus pada metrik Hadoop YARN berikut:
Allocated resource
mengacu pada total resource YARN yang digunakan oleh penampung yang berjalan di seluruh cluster. Jika ada 6 penampung yang berjalan yang dapat menggunakan hingga 1 unit resource, ada 6 resource yang dialokasikan.Available resource
adalah resource YARN di cluster yang tidak digunakan oleh penampung yang dialokasikan. Jika ada 10 unit resource di semua pengelola node dan 6 unit di antaranya dialokasikan, akan ada 4 resource yang tersedia. Jika ada resource yang tersedia (tidak digunakan) di cluster, penskalaan otomatis dapat menghapus pekerja dari cluster.Pending resource
adalah jumlah permintaan resource YARN untuk penampung yang tertunda. Penampung tertunda menunggu ruang untuk dijalankan di YARN. Resource yang tertunda tidak nol hanya jika resource yang tersedia nol atau terlalu kecil untuk dialokasikan ke penampung berikutnya. Jika ada penampung yang tertunda, penskalaan otomatis dapat menambahkan pekerja ke cluster.
Anda dapat melihat metrik ini di Cloud Monitoring. Secara default, memori YARN akan menjadi 0,8 * total memori di cluster, dengan memori yang tersisa dicadangkan untuk daemon dan penggunaan 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 MapReduce Hadoop
MapReduce menjalankan setiap tugas pemetaan dan pengurangan sebagai penampung YARN terpisah. Saat tugas dimulai, MapReduce mengirimkan permintaan penampung untuk setiap tugas peta, sehingga menyebabkan lonjakan besar pada memori YARN yang tertunda. Saat tugas peta selesai, memori yang tertunda akan berkurang.
Saat mapreduce.job.reduce.slowstart.completedmaps
selesai (95% secara default
di Dataproc), MapReduce mengantrekan permintaan penampung untuk semua
pengurang, sehingga menyebabkan lonjakan lain dalam memori yang tertunda.
Kecuali jika tugas pemetaan dan pengurangan Anda memerlukan waktu beberapa menit atau lebih, jangan menetapkan nilai tinggi untuk penskalaan otomatis scaleUpFactor
. Menambahkan pekerja ke cluster memerlukan waktu minimal 1,5 menit, jadi pastikan ada cukup pekerjaan yang tertunda untuk menggunakan pekerja baru selama beberapa menit. Titik awal yang baik adalah menetapkan scaleUpFactor
ke 0,05 (5%) atau 0,1 (10%) memori yang tertunda.
Penskalaan Otomatis dan Spark
Spark menambahkan lapisan penjadwalan tambahan di atas YARN. Secara khusus, alokasi dinamis Spark Core membuat permintaan ke YARN agar penampung menjalankan eksekutor Spark, lalu menjadwalkan tugas Spark pada thread di eksekutor tersebut. Cluster Dataproc mengaktifkan alokasi dinamis secara default, sehingga eksekutor ditambahkan dan dihapus sesuai kebutuhan.
Spark selalu meminta container ke YARN, tetapi tanpa alokasi dinamis, Spark hanya meminta container di awal tugas. Dengan alokasi dinamis, penampung akan dihapus, atau meminta penampung baru, sesuai kebutuhan.
Spark dimulai dari sejumlah kecil eksekutor – 2 di cluster penskalaan otomatis – dan terus melipatgandakan jumlah eksekutor saat ada tugas yang tertunda.
Hal ini akan memperlancar memori yang tertunda (lebih sedikit lonjakan memori yang tertunda). Sebaiknya tetapkan scaleUpFactor
penskalaan otomatis ke angka besar, seperti 1,0 (100%), untuk tugas Spark.
Menonaktifkan alokasi dinamis Spark
Jika menjalankan tugas Spark terpisah yang tidak mendapatkan manfaat dari alokasi dinamis Spark, Anda dapat menonaktifkan alokasi dinamis Spark dengan menetapkan spark.dynamicAllocation.enabled=false
dan menetapkan spark.executor.instances
.
Anda tetap dapat menggunakan penskalaan otomatis untuk menskalakan cluster naik dan turun saat tugas Spark
terpisah berjalan.
Tugas Spark dengan data dalam cache
Tetapkan spark.dynamicAllocation.cachedExecutorIdleTimeout
atau hapus cache set data jika
tidak diperlukan lagi. Secara default, Spark tidak menghapus eksekutor yang telah
menyimpan data dalam cache, yang akan mencegah penskalaan cluster ke bawah.
Penskalaan Otomatis dan Spark Streaming
Karena Spark Streaming memiliki versi alokasi dinamis sendiri yang menggunakan sinyal khusus streaming untuk menambahkan dan menghapus eksekutor, tetapkan
spark.streaming.dynamicAllocation.enabled=true
dan nonaktifkan alokasi dinamis Spark Core dengan menetapkanspark.dynamicAllocation.enabled=false
.Jangan gunakan Penghentian tuntas (penskalaan otomatis
gracefulDecommissionTimeout
) dengan tugas Spark Streaming. Sebagai gantinya, untuk menghapus pekerja dengan penskalaan otomatis secara aman, konfigurasi checkpointing untuk toleransi error.
Atau, untuk menggunakan Spark Streaming tanpa penskalaan otomatis:
- Nonaktifkan alokasi dinamis Spark Core (
spark.dynamicAllocation.enabled=false
), dan - Tetapkan jumlah eksekutor (
spark.executor.instances
) untuk tugas Anda. Lihat Properti cluster.
Penskalaan Otomatis dan Streaming Terstruktur Spark
Penskalaan otomatis tidak kompatibel dengan Spark Structured Streaming karena Spark Structured Streaming saat ini tidak mendukung alokasi dinamis (lihat SPARK-24815: Structured Streaming harus mendukung alokasi dinamis).
Mengontrol penskalaan otomatis melalui partisi dan paralelisme
Meskipun paralelisme biasanya ditetapkan atau ditentukan oleh resource cluster (misalnya, jumlah blok HDFS dikontrol oleh jumlah tugas), dengan penskalaan otomatis, hal sebaliknya berlaku: penskalaan otomatis menetapkan jumlah pekerja sesuai dengan paralelisme tugas. Berikut adalah panduan untuk membantu Anda menetapkan paralelisme tugas:
- Meskipun Dataproc menetapkan jumlah default tugas pengurangan MapReduce berdasarkan ukuran cluster awal cluster Anda, Anda dapat menetapkan
mapreduce.job.reduces
untuk meningkatkan paralelisme fase pengurangan. - Paralelisme Spark SQL dan Dataframe ditentukan oleh
spark.sql.shuffle.partitions
, yang secara default ditetapkan ke 200. - Fungsi RDD Spark secara default ditetapkan ke
spark.default.parallelism
, yang ditetapkan ke jumlah core pada node pekerja 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 penyimpangan kunci yang signifikan, satu atau beberapa tugas mungkin memerlukan waktu yang jauh lebih lama daripada tugas lainnya, sehingga penggunaannya rendah.
Setelan properti Spark/Hadoop default penskalaan otomatis
Cluster penskalaan otomatis memiliki nilai properti cluster default yang membantu menghindari kegagalan tugas saat pekerja utama dihapus atau pekerja sekunder didahulukan. Anda dapat mengganti nilai default ini saat membuat cluster dengan penskalaan otomatis (lihat Properti Cluster).
Default untuk meningkatkan jumlah maksimum percobaan 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
Default untuk membuat mekanisme alokasi dinamis Spark dengan awal lambat dimulai dari ukuran kecil:
spark:spark.executor.instances=2
Pertanyaan Umum (FAQ)
Dapatkah penskalaan otomatis diaktifkan di cluster Ketersediaan Tinggi dan cluster Node Tunggal?
Penskalaan otomatis dapat diaktifkan di cluster 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 memiliki efek sementara, dan Penskalaan Otomatis pada akhirnya akan menskalakan kembali cluster.
Daripada mengubah ukuran cluster penskalaan otomatis secara manual, pertimbangkan:
Memperbarui kebijakan penskalaan otomatis. Setiap perubahan yang dilakukan pada kebijakan penskalaan otomatis akan memengaruhi semua cluster yang saat ini menggunakan kebijakan tersebut (lihat Penggunaan kebijakan multi-cluster).
Melepas kebijakan dan menskalakan cluster secara manual ke ukuran yang diinginkan.
Mendapatkan dukungan Dataproc.
Apa perbedaan antara Dataproc dan penskalaan otomatis Dataflow?
Lihat 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 ini memerlukan upaya manual untuk memverifikasi apakah aman untuk mereset status cluster, dan sering kali cluster tidak dapat direset tanpa langkah manual lainnya, seperti memulai ulang Namenode HDFS.
Dataproc menetapkan status cluster ke ERROR
jika
tidak dapat menentukan status cluster setelah operasi gagal. Cluster di ERROR
tidak diskalakan secara otomatis atau tidak menjalankan tugas. Penyebab umum meliputi:
Error yang ditampilkan dari Compute Engine API, sering kali selama pemadaman layanan Compute Engine.
HDFS mengalami kerusakan status karena bug dalam penghentian HDFS.
Error Dataproc Control API seperti "Lease tugas berakhir"
Hapus dan buat ulang cluster yang statusnya ERROR
.
Kapan penskalaan otomatis membatalkan operasi penskalaan turun?
Grafik berikut adalah ilustrasi yang menunjukkan kapan penskalaan otomatis akan membatalkan operasi penskalaan ke bawah (lihat juga Cara kerja penskalaan otomatis).
Catatan:
- Cluster telah mengaktifkan penskalaan otomatis berdasarkan metrik memori YARN saja (default).
- T1-T9 mewakili interval cooldown saat autoscaler mengevaluasi jumlah pekerja (waktu peristiwa telah disederhanakan).
- Batang bertumpuk mewakili jumlah pekerja YARN cluster yang aktif, dinonaktifkan, dan dinonaktifkan.
- Jumlah pekerja yang direkomendasikan autoscaler (garis hitam) didasarkan pada metrik memori YARN, jumlah pekerja aktif YARN, dan setelan kebijakan penskalaan otomatis (lihat Cara kerja penskalaan otomatis).
- Area latar belakang merah menunjukkan periode saat operasi penskalaan turun berjalan.
- Area latar belakang kuning menunjukkan periode saat operasi penskalaan ke bawah dibatalkan.
- Area latar belakang hijau menunjukkan periode operasi penskalaan.
Operasi berikut terjadi pada waktu berikut:
T1: Autoscaler memulai operasi penurunan skala penghentian layanan yang wajar untuk menskalakan turun sekitar setengah dari pekerja cluster saat ini.
T2: Autoscaler terus memantau metrik cluster. Hal ini tidak mengubah rekomendasi penskalaan, dan operasi penskalaan akan berlanjut. Beberapa pekerja telah dinonaktifkan, dan pekerja lainnya sedang dinonaktifkan (Dataproc akan menghapus pekerja yang dinonaktifkan).
T3: Autoscaler menghitung bahwa jumlah pekerja dapat diskalakan lebih lanjut, mungkin karena memori YARN tambahan tersedia. Namun, karena jumlah pekerja aktif ditambah perubahan jumlah pekerja yang direkomendasikan tidak sama dengan atau lebih besar dari jumlah pekerja aktif ditambah pekerja yang dinonaktifkan, kriteria untuk pembatalan penskalaan menurun tidak terpenuhi, dan autoscaler tidak membatalkan operasi penskalaan menurun.
T4: YARN melaporkan peningkatan memori tertunda. Namun, autoscaler tidak mengubah rekomendasi jumlah pekerjanya. Seperti pada T3, kriteria pembatalan penskalaan turun tetap tidak terpenuhi, dan autoscaler tidak membatalkan operasi penskalaan turun.
T5: Memori tertunda YARN meningkat, dan perubahan jumlah pekerja yang direkomendasikan oleh autoscaler meningkat. Namun, karena jumlah pekerja aktif ditambah perubahan yang direkomendasikan dalam jumlah pekerja kurang dari jumlah pekerja aktif ditambah pekerja yang dinonaktifkan, kriteria pembatalan tetap tidak terpenuhi, dan operasi penskalaan turun tidak dibatalkan.
T6: Memori tertunda YARN meningkat lebih lanjut. Jumlah pekerja aktif ditambah perubahan jumlah pekerja yang direkomendasikan oleh autoscaler kini lebih besar dari jumlah pekerja aktif ditambah pekerja yang dinonaktifkan. Kriteria pembatalan terpenuhi, dan autoscaler membatalkan operasi penskalaan ke bawah.
T7: Autoscaler menunggu pembatalan operasi penskalaan ke bawah selesai. Autoscaler tidak mengevaluasi dan merekomendasikan perubahan jumlah pekerja selama interval ini.
T8: Pembatalan operasi penskalaan ke bawah selesai. Pekerja yang dinonaktifkan ditambahkan ke cluster dan menjadi aktif. Autoscaler mendeteksi penyelesaian pembatalan operasi penskalaan, dan menunggu periode evaluasi berikutnya (T9) untuk menghitung jumlah pekerja yang direkomendasikan.
T9: Tidak ada operasi aktif pada waktu T9. Berdasarkan kebijakan autoscaler dan metrik YARN, autoscaler merekomendasikan operasi penskalaan.