Apa itu penskalaan otomatis?
Memperkirakan jumlah worker (node) cluster yang "tepat" untuk suatu beban kerja bukanlah hal yang mudah, dan satu ukuran cluster untuk seluruh pipeline sering kali tidak ideal. Penskalaan Cluster yang dimulai pengguna sebagian akan mengatasi tantangan ini, tetapi memerlukan pemantauan penggunaan cluster dan intervensi manual.
Dataproc AutoscalingPolicies API menyediakan mekanisme untuk mengotomatiskan pengelolaan resource cluster serta mengaktifkan penskalaan otomatis VM pekerja cluster. Autoscaling Policy
adalah konfigurasi yang dapat digunakan kembali yang
menjelaskan cara pekerja cluster yang menggunakan kebijakan penskalaan otomatis harus diskalakan. Kebijakan ini menentukan batas, frekuensi, dan agresivitas penskalaan untuk memberikan kontrol terperinci atas resource cluster selama masa aktif cluster.
Kapan harus menggunakan penskalaan otomatis
Menggunakan 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 Enhanced Flexibility Mode untuk tugas batch Spark
Penskalaan otomatis tidak direkomendasikan dengan/untuk:
HDFS: Penskalaan otomatis tidak dimaksudkan untuk penskalaan di HDFS cluster karena:
- Pemakaian HDFS bukan sinyal untuk penskalaan otomatis.
- Data HDFS hanya dihosting di pekerja utama. Jumlah pekerja utama harus cukup untuk menampung semua data HDFS.
- Penonaktifan HDFS DataNodes 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 berjam-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.Streaming Terstruktur Spark: Penskalaan otomatis tidak mendukung Streaming Terstruktur Spark (lihat Penskalaan Otomatis dan Streaming Terstruktur Spark).
Cluster Tidak Aktif: Penskalaan otomatis tidak direkomendasikan untuk tujuan menskalakan cluster ke ukuran minimum saat cluster tidak ada aktivitas. Karena membuat cluster baru secepat mengubah ukuran cluster, sebaiknya hapus cluster yang tidak ada aktivitas dan buat ulang cluster tersebut. Alat berikut mendukung model "efemeral" ini:
Gunakan Alur kerja Dataproc untuk menjadwalkan serangkaian tugas pada cluster khusus, lalu hapus cluster tersebut saat tugas tersebut selesai. Untuk orkestrasi lanjutan, gunakan Cloud Composer, yang didasarkan pada Apache Airflow.
Untuk cluster yang memproses kueri ad-hoc atau workload yang dijadwalkan secara eksternal, gunakan Penghapusan Terjadwal Cluster untuk menghapus cluster setelah periode tidak ada aktivitas atau durasi tertentu, atau pada waktu tertentu.
Beban kerja dengan ukuran berbeda: Saat tugas kecil dan besar dijalankan di cluster, penurunan skala penghentian secara halus akan menunggu tugas besar selesai. Hasilnya adalah tugas yang berjalan lama akan menunda penskalaan otomatis resource untuk tugas kecil yang berjalan di cluster hingga tugas yang berjalan lama selesai. Untuk menghindari hasil ini, kelompokkan tugas yang lebih kecil yang berukuran serupa di cluster, dan isolasi setiap tugas berdurasi panjang di cluster terpisah.
Mengaktifkan penskalaan otomatis
Untuk mengaktifkan penskalaan otomatis di cluster:
Baik:
Membuat kebijakan penskalaan otomatis
Perintah gcloud
Anda dapat menggunakan perintah gcloud dataproc autoscaling-policies import
untuk membuat kebijakan penskalaan otomatis. Alat 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 yang menentukan semua kolom yang diperlukan. Kode ini juga memberikan nilai minInstances
dan maxInstances
untuk pekerja utama, nilai maxInstances
untuk pekerja sekunder (preemptible), 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 yang bersifat 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. Beri nama untuk kebijakan tersebut. Nama ini akan menjadi
id
kebijakan, yang dapat Anda gunakan dalam perintah gcloud
nanti untuk mereferensikan kebijakan. Gunakan flag --source
untuk menentukan
jalur file lokal dan nama file dari 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. Beri 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 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 kebijakan Penskalaan otomatis pada panel Siapkan cluster di halaman Buat cluster Dataproc di Konsol Google Cloud.
Mengaktifkan penskalaan otomatis di cluster yang ada
Setelah membuat kebijakan penskalaan otomatis, Anda dapat mengaktifkan kebijakan tersebut pada 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 dalam updateMask
pada
permintaan
clusters.patch.
Konsol
Saat ini, mengaktifkan kebijakan penskalaan otomatis pada 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 ketika cluster akan berbagi beban kerja yang sama atau menjalankan tugas dengan pola penggunaan resource yang serupa.
Anda dapat memperbarui kebijakan yang sedang digunakan oleh beberapa cluster. Update ini akan langsung memengaruhi perilaku penskalaan otomatis untuk semua cluster yang menggunakan kebijakan tersebut (lihat autoscalingPolicies.update). Jika Anda tidak ingin update kebijakan diterapkan ke cluster yang menggunakan kebijakan tersebut, nonaktifkan penskalaan otomatis pada cluster tersebut sebelum memperbarui 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 pada cluster, tetapkan AutoscalingConfig.policyUri ke string kosong, lalu tetapkan update_mask=config.autoscaling_config.policy_uri
dalam permintaan clusters.patch.
Konsol
Saat ini, menonaktifkan penskalaan otomatis pada cluster tidak didukung di Konsol Google Cloud.
- Kebijakan yang digunakan oleh satu atau beberapa cluster tidak dapat dihapus (lihat autoscalingPolicies.delete).
Cara kerja penskalaan otomatis
Penskalaan otomatis memeriksa cluster metrik YARN Hadoop saat setiap periode "pendinginan" berlalu untuk menentukan apakah akan menskalakan cluster atau tidak, dan, jika demikian, besarnya update.
Nilai metrik resource tertunda YARN (Pending Memory atau Pending Cores) menentukan apakah akan meningkatkan atau menurunkan skala. Nilai yang lebih besar dari
0
menunjukkan bahwa tugas YARN menunggu resource dan peningkatan skala mungkin diperlukan. Nilai0
menunjukkan YARN memiliki resource yang memadai sehingga penskalaan atau perubahan lain mungkin tidak diperlukan.Jika resource yang tertunda > 0:
$estimasi\_worker\_count =$
\[ \Biggl \lceil AVERAGE\ selama\ periode tunggu\ periode\Big(\frac{Tertunda + Tersedia + Dialokasikan + Reservasi}{Resource\ per\ worker}\Big)\Biggr \rceil \]
Jika resource yang tertunda adalah 0:
$estimasi\_worker\_count =$
\[ \Biggl \lceil AVERAGE\ selama\ periode tunggu\ periode\Big(\frac{Dialokasikan + Reservasi}{Resource\ per\ worker}\Big)\Biggr \rceil \]
Secara default, penskala otomatis memantau resource memori YARN. Jika Anda mengaktifkan penskalaan berbasis core, memori YARN dan inti YARN akan dipantau:
estimated_worker_count
dievaluasi secara terpisah untuk memori dan core, dan jumlah pekerja yang dihasilkan lebih besar akan dipilih.$estimasi\_worker\_count =$
\[ max(estimated\_worker\_count\_by\_memory,\ estimated\_worker\_count\_by\_cores) \]
\[ estimasi\ \Delta worker = estimasi\_worker\_count - saat ini\_worker\_count \]
Dengan perkiraan perubahan yang diperlukan untuk jumlah pekerja, penskalaan otomatis menggunakan
scaleUpFactor
atauscaleDownFactor
untuk menghitung perubahan sebenarnya pada jumlah pekerja: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 melakukan penskalaan sehingga resource yang tertunda/tersedia bernilai 0 (penggunaan yang sempurna).Setelah perubahan jumlah pekerja dihitung,
scaleUpMinWorkerFraction
danscaleDownMinWorkerFraction
akan berfungsi sebagai nilai minimum untuk menentukan apakah penskalaan otomatis akan menskalakan cluster ini atau tidak. Fraksi kecil menandakan bahwa penskalaan otomatis harus diskalakan meskipunΔworkers
kecil. Bagian yang lebih besar berarti penskalaan hanya boleh terjadi saatΔworkers
berukuran besar.IF (Δworkers > scaleUpMinWorkerFraction * current_worker_count) then scale up
ATAUIF (abs(Δworkers) > scaleDownMinWorkerFraction * current_worker_count), THEN scale down.
Jika jumlah pekerja yang akan diskalakan cukup besar untuk memicu penskalaan, penskalaan otomatis menggunakan batas
minInstances
maxInstances
dariworkerConfig
dansecondaryWorkerConfig
sertaweight
(rasio pekerja primer terhadap pekerja sekunder) untuk menentukan cara membagi jumlah pekerja di seluruh grup instance pekerja primer dan sekunder. Hasil penghitungan ini adalah perubahan penskalaan otomatis terakhir pada cluster selama periode penskalaan.Permintaan penskalaan otomatis akan dibatalkan pada cluster yang dibuat dengan versi gambar yang lebih lama dari 2.0.57 dan 2.1.5 jika:
- penurunan skala 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 penskalaan otomatis (
Δ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 penskalaan, lihat Kapan penskalaan otomatis membatalkan operasi penskalaan?.
Rekomendasi konfigurasi penskalaan otomatis
Menghindari penskalaan pekerja utama
Pekerja utama menjalankan HDFS Datanodes, sedangkan pekerja sekunder hanya menjalankan 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 race yang menyebabkan HDFS mengalami kerusakan sehingga penonaktifan terhenti tanpa henti. 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 menjadi tidak dapat dihentikan. (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 Enhanced Flexibility Mode (EFM) dengan penskalaan otomatis untuk:
memungkinkan penurunan skala cluster dengan lebih cepat saat tugas sedang berjalan
mencegah gangguan pada tugas yang sedang berjalan karena penurunan skala cluster
meminimalkan gangguan pada tugas yang sedang berjalan karena preemption worker sekunder yang dapat dihentikan
Dengan EFM diaktifkan, waktu tunggu penghentian tuntas kebijakan penskalaan otomatis harus ditetapkan ke 0s
. Kebijakan penskalaan otomatis hanya boleh
menskalakan pekerja sekunder secara otomatis.
Memilih waktu tunggu penghentian tuntas
Penskalaan otomatis mendukung penghentian tuntas YARN saat menghapus node dari cluster. Penghentian tuntas memungkinkan aplikasi menyelesaikan pengacakan data antartahap untuk menghindari penyetelan kembali progres tugas. Waktu tunggu penghentian tuntas yang diberikan dalam kebijakan penskalaan otomatis adalah batas atas dari durasi yang akan ditunggu oleh YARN untuk menjalankan aplikasi (aplikasi yang berjalan saat penonaktifan dimulai) sebelum menghapus node.
Jika proses tidak selesai dalam periode waktu tunggu penghentian tuntas yang ditentukan, node pekerja akan dinonaktifkan 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 dari
tugas terlama yang akan diproses cluster. Misalnya, jika Anda memperkirakan tugas
yang paling lama akan 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 tuntas.
Setelan scaleUpFactor
scaleUpFactor
mengontrol seberapa agresif penskala otomatis meningkatkan skala cluster.
Tentukan angka antara 0.0
dan 1.0
untuk menetapkan nilai pecahan
resource tertunda YARN yang menyebabkan penambahan node.
Misalnya, jika ada 100 container tertunda yang meminta masing-masing 512 MB, maka 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 statusnya adalah
0.1
, penghitung skala otomatis akan menambahkan node yang cukup untuk 5 GB. Perlu diperhatikan 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 dari 1.0
berarti penskalaan otomatis akan melakukan penskalaan sehingga resource yang tertunda/tersedia bernilai 0 (penggunaan yang sempurna).
Setelan scaleDownFactor
scaleDownFactor
mengontrol seberapa agresif penskala otomatis menurunkan skala
cluster. Tentukan angka antara 0.0
dan 1.0
untuk menetapkan nilai pecahan
resource YARN yang tersedia yang menyebabkan penghapusan node.
Biarkan nilai ini di 1.0
untuk sebagian besar cluster multi-tugas yang perlu meningkatkan dan menurunkan skala secara rutin. Akibat penghentian tuntas, operasi penurunan skala akan jauh lebih lambat daripada operasi peningkatan skala. Menyetel 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, tetapkan scaleDownFactor
yang lebih rendah untuk
kecepatan penurunan skala yang lebih lambat.
Tetapkan nilai ini ke 0.0
untuk mencegah penskalaan 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
. Parameter ini mewakili nilai minimum yang digunakan untuk meningkatkan atau menurunkan skala cluster: nilai fraksional minimum atau penurunan ukuran cluster yang diperlukan untuk mengeluarkan permintaan peningkatan skala atau penurunan skala.
Contoh: Autoscaler tidak akan mengeluarkan permintaan update untuk menambahkan 5 pekerja ke cluster 100 node kecuali jika scaleUpMinWorkerFraction
kurang dari atau sama dengan 0.05
(5%). Jika kebijakan disetel ke 0.1
, penskala otomatis tidak akan mengeluarkan permintaan untuk meningkatkan skala cluster.
Demikian pula, jika scaleDownMinWorkerFraction
adalah 0.05
, penskala otomatis tidak akan
mengirimkan permintaan update untuk menghapus node dari cluster 100 node kecuali
setidaknya 5 node harus dihapus.
Nilai default 0.0
menandakan tidak ada nilai minimum.
Menetapkan scaleDownMinWorkerFractionthresholds
yang 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 penskala otomatis tidak akan mengeluarkan permintaan untuk mengubah ukuran cluster. Anda dapat menggunakannya untuk membatasi frekuensi perubahan penskala otomatis pada ukuran cluster.
cooldownPeriod
minimum dan default
adalah dua menit. Jika cooldownPeriod
yang lebih pendek ditetapkan dalam kebijakan, perubahan beban kerja akan lebih cepat memengaruhi ukuran cluster, tetapi peningkatan dan penurunan skala mungkin tidak perlu dilakukan. Praktik yang direkomendasikan adalah menetapkan scaleUpMinWorkerFraction
dan scaleDownMinWorkerFraction
kebijakan ke nilai bukan nol saat menggunakan cooldownPeriod
yang lebih singkat. Hal ini memastikan bahwa
cluster hanya meningkatkan atau menurunkan skala saat perubahan pemanfaatan resource
cukup untuk menjamin update cluster.
Jika beban kerja Anda sensitif terhadap perubahan ukuran cluster, Anda dapat meningkatkan periode tunggu. Misalnya, jika menjalankan tugas pemrosesan batch, Anda dapat menetapkan periode tunggu ke 10 menit atau lebih. Bereksperimenlah dengan berbagai periode tunggu untuk menemukan nilai yang paling sesuai bagi workload Anda.
Batas jumlah pekerja dan bobot grup
Setiap grup pekerja memiliki minInstances
dan maxInstances
yang mengonfigurasi batas pasti
ukuran setiap grup.
Setiap grup juga memiliki parameter yang disebut weight
yang mengonfigurasi keseimbangan target antara dua grup. Perlu diperhatikan bahwa parameter ini hanyalah petunjuk, dan jika sebuah grup mencapai ukuran minimum atau maksimumnya, node hanya akan ditambahkan atau dihapus dari grup lainnya. Jadi, weight
hampir selalu dapat dibiarkan di 1
default.
Aktifkan penskalaan otomatis berbasis core
Secara default, YARN menggunakan metrik memori untuk alokasi sumber daya. Untuk aplikasi yang menggunakan CPU secara intensif, praktik terbaiknya adalah mengonfigurasi YARN untuk menggunakan Kalkulator Resource Dominan. 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
Resource dan alat berikut dapat membantu Anda memantau operasi penskalaan otomatis serta dampaknya terhadap cluster Anda dan tugasnya.
Cloud Monitoring
Gunakan Cloud Monitoring untuk:
- melihat metrik yang digunakan oleh penskalaan otomatis
- melihat jumlah Node Manager di cluster Anda
- memahami alasan penskalaan otomatis melakukan 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 ini memiliki format JSON, yaitu format yang dapat dibaca mesin.
4) Perluas 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) memiliki interoperabilitas dengan Hadoop YARN dan MapReduce Hadoop, serta dengan Apache Spark, Spark Streaming, dan Streaming Terstruktur Spark.
Metrik YARN Hadoop
Penskalaan otomatis berpusat pada metrik YARN Hadoop berikut:
Allocated resource
mengacu pada total resource YARN yang digunakan dengan menjalankan container di seluruh cluster. Jika ada 6 container yang berjalan dan dapat menggunakan hingga 1 unit resource, berarti 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 seluruh pengelola node dan 6 di antaranya dialokasikan, berarti 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. Container yang tertunda menunggu ruang untuk dijalankan di YARN. Resource tertunda bukan nol hanya jika resource yang tersedia nol atau terlalu kecil untuk dialokasikan ke penampung berikutnya. Jika ada container 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 sisa memori yang dicadangkan untuk daemon dan penggunaan sistem operasi lain, seperti cache halaman. Anda dapat mengganti nilai default ini 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 peta dan mengurangi tugas sebagai penampung YARN terpisah. Saat tugas dimulai, MapReduce mengirimkan permintaan container untuk setiap tugas peta, sehingga akan menghasilkan lonjakan besar pada memori YARN yang tertunda. Saat tugas peta selesai, memori yang tertunda akan berkurang.
Setelah mapreduce.job.reduce.slowstart.completedmaps
selesai (95% secara default di Dataproc), MapReduce akan mengantrekan permintaan container untuk semua pengurangan, sehingga akan terjadi lonjakan lain pada memori yang tertunda.
Kecuali jika peta dan pengurangan tugas memerlukan waktu beberapa menit atau lebih, jangan tetapkan nilai tinggi untuk penskalaan otomatis scaleUpFactor
. Menambahkan pekerja ke cluster memerlukan waktu setidaknya 1,5 menit, jadi pastikan ada pekerjaan yang tertunda yang memadai untuk menggunakan pekerja baru selama beberapa menit. Titik awal yang baik adalah menetapkan scaleUpFactor
ke 0,05 (5%) atau 0,1 (10%) memori tertunda.
Penskalaan Otomatis dan Spark
Spark menambahkan lapisan penjadwalan tambahan pada YARN. Secara khusus, alokasi dinamis Spark Core membuat permintaan ke YARN agar container dapat menjalankan eksekutor Spark, lalu menjadwalkan tugas Spark pada thread pada eksekutor tersebut. Cluster Dataproc mengaktifkan alokasi dinamis secara default, sehingga eksekutor ditambahkan dan dihapus sesuai kebutuhan.
Spark selalu meminta container pada YARN, tetapi tanpa alokasi dinamis, Spark hanya meminta container di awal tugas. Dengan alokasi dinamis, ini akan menghapus container, atau meminta container baru, jika diperlukan.
Spark dimulai dari sejumlah kecil eksekutor – 2 pada cluster penskalaan otomatis – dan terus menggandakan jumlah eksekutor saat ada tugas yang backlog.
Tindakan ini akan memperhalus memori yang tertunda (lebih sedikit lonjakan memori yang tertunda). Sebaiknya tetapkan scaleUpFactor
penskalaan otomatis ke angka yang 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 masih dapat menggunakan penskalaan otomatis untuk menaikkan dan menurunkan skala cluster saat tugas Spark terpisah berjalan.
Membuat tugas dengan data yang di-cache
Tetapkan spark.dynamicAllocation.cachedExecutorIdleTimeout
atau batalkan cache set data saat tidak diperlukan lagi. Secara default, Spark tidak menghapus eksekutor yang telah
meng-cache data, yang akan mencegah penskalaan cluster diturunkan.
Penskalaan Otomatis dan Streaming Spark
Karena Streaming Spark memiliki alokasi dinamis versinya 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 Streaming Spark. Sebagai gantinya, untuk menghapus pekerja secara aman dengan penskalaan otomatis, konfigurasi checkpointing untuk fault tolerance.
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 Streaming Terstruktur Spark karena Streaming Terstruktur Spark saat ini tidak mendukung alokasi dinamis (lihat SPARK-24815: Streaming Terstruktur harus mendukung alokasi dinamis).
Mengontrol penskalaan otomatis melalui partisi dan paralelisme
Meskipun paralelisme biasanya ditetapkan atau ditentukan oleh resource cluster (misalnya, jumlah kontrol blok HDFS menurut jumlah tugas), dengan penskalaan otomatis, kebalikannya akan diterapkan: penskalaan otomatis menetapkan jumlah pekerja sesuai dengan paralelisme tugas. Berikut adalah panduan untuk membantu Anda menetapkan paralelisme pekerjaan:
- Meskipun Dataproc menetapkan jumlah default pengurangan tugas MapReduce berdasarkan ukuran cluster awal cluster, Anda dapat menetapkan
mapreduce.job.reduces
untuk meningkatkan paralelisme fase pengurangan. - Paralelisme Spark SQL dan Dataframe ditentukan oleh
spark.sql.shuffle.partitions
, yang nilai defaultnya adalah 200. - Fungsi RDD Spark ditetapkan secara default ke
spark.default.parallelism
, yang ditetapkan ke jumlah core pada node pekerja saat tugas dimulai. Namun, semua fungsi RDD yang membuat acak memerlukan parameter untuk jumlah partisi, yang menggantikanspark.default.parallelism
.
Anda harus memastikan data telah dipartisi secara merata. Jika ada kecondongan kunci yang signifikan, satu atau beberapa tugas mungkin memerlukan waktu yang jauh lebih lama daripada tugas lain, 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 di-preempt. 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 tahapan:
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 Streaming Spark yang berjalan lama):
spark:spark.yarn.am.attemptFailuresValidityInterval=1h spark:spark.yarn.executor.failuresValidityInterval=1h
Default agar mekanisme alokasi dinamis Spark memulai lambat dimulai dari ukuran kecil:
spark:spark.executor.instances=2
Pertanyaan Umum (FAQ)
Dapatkah penskalaan otomatis diaktifkan pada 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 pengukuran sementara saat menyesuaikan kebijakan penskalaan otomatis. Namun, perubahan ini hanya akan memiliki efek sementara, dan Penskalaan Otomatis pada akhirnya akan menskalakan cluster kembali.
Daripada mengubah ukuran cluster penskalaan otomatis secara manual, pertimbangkan:
Mengupdate 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).
Melepaskan kebijakan dan menskalakan cluster secara manual ke ukuran yang diinginkan.
Mendapatkan dukungan Dataproc.
Apa perbedaan Dataproc dengan 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. Melakukannya memerlukan upaya manual untuk memverifikasi apakah status cluster aman untuk direset, 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 yang gagal. Cluster dalam
ERROR
tidak diskalakan secara otomatis atau tidak menjalankan tugas. Penyebab umumnya meliputi:
Error yang ditampilkan dari Compute Engine API, sering kali selama penghentian Compute Engine.
HDFS mengalami kerusakan karena bug dalam penghentian HDFS.
Error Dataproc Control API seperti "Task lease sudah berakhir"
Hapus dan buat ulang cluster yang statusnya ERROR
.
Kapan penskalaan otomatis membatalkan operasi scaledown?
Grafik berikut adalah ilustrasi yang menunjukkan kapan penskalaan otomatis akan membatalkan operasi scaledown (lihat juga Cara kerja penskalaan otomatis).
Catatan:
- Cluster memiliki penskalaan otomatis yang diaktifkan berdasarkan metrik memori YARN saja (default).
- T1-T9 mewakili interval periode tunggu 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 penghitung skala otomatis (garis hitam) didasarkan pada metrik memori YARN, jumlah pekerja aktif YARN, dan setelan kebijakan penskalaan otomatis (lihat Cara kerja penskalaan otomatis).
- Area latar belakang berwarna merah menunjukkan periode saat operasi scaledown berjalan.
- Area latar belakang berwarna kuning menunjukkan periode saat operasi scaledown dibatalkan.
- Area latar belakang berwarna hijau menunjukkan periode operasi scaleup.
Operasi berikut terjadi pada waktu-waktu berikut:
T1: Autoscaler memulai operasi penurunan skala secara halus untuk menurunkan skala sekitar setengah dari pekerja cluster saat ini.
T2: Autoscaler terus memantau metrik cluster. Tindakan ini tidak mengubah rekomendasi penskalaannya, dan operasi scaledown akan berlanjut. Beberapa pekerja telah dinonaktifkan, dan yang lainnya dinonaktifkan (Dataproc akan menghapus pekerja yang dinonaktifkan).
T3: Autoscaler menghitung jumlah pekerja yang dapat memperkecil skala lebih lanjut, mungkin karena tersedianya memori YARN tambahan. Namun, karena jumlah pekerja aktif ditambah perubahan yang direkomendasikan dalam jumlah pekerja tidak sama dengan atau lebih besar dari jumlah pekerja yang aktif ditambah yang menonaktifkan, kriteria untuk pembatalan penskalaan tidak terpenuhi, dan penskalaan otomatis tidak membatalkan operasi penskalaan.
T4: YARN melaporkan peningkatan memori tertunda. Namun, penskala otomatis tidak mengubah rekomendasi jumlah pekerjanya. Seperti di T3, kriteria pembatalan penurunan skala tetap belum terpenuhi, dan penghitung skala otomatis tidak membatalkan operasi penurunan skala.
T5: Memori tertunda YARN meningkat, dan perubahan jumlah pekerja yang direkomendasikan oleh penskala otomatis meningkat. Namun, karena jumlah pekerja aktif ditambah perubahan yang direkomendasikan dalam jumlah pekerja kurang dari jumlah pekerja aktif ditambah yang dinonaktifkan, kriteria pembatalan tetap tidak terpenuhi, dan operasi penskalaan tidak dibatalkan.
T6: Memori tertunda YARN meningkat lebih jauh. Jumlah pekerja aktif ditambah perubahan jumlah pekerja yang direkomendasikan oleh penskalaan otomatis kini lebih besar dari jumlah pekerja aktif ditambah yang dinonaktifkan. Kriteria pembatalan terpenuhi, dan penskalaan otomatis akan membatalkan operasi penurunan skala.
T7: Autoscaler menunggu hingga pembatalan operasi penskalaan selesai. Autoscaler tidak mengevaluasi dan merekomendasikan perubahan jumlah pekerja selama interval ini.
T8: Pembatalan operasi scaledown selesai. Pekerja yang menonaktifkan ditambahkan ke cluster dan menjadi aktif. Autoscaler mendeteksi penyelesaian pembatalan operasi scaledown dan menunggu periode evaluasi berikutnya (T9) untuk menghitung jumlah pekerja yang direkomendasikan.
T9: Tidak ada operasi yang aktif pada waktu T9. Berdasarkan kebijakan penskala otomatis dan metrik YARN, penskala otomatis merekomendasikan operasi peningkatan skala.