Menskalakan otomatis cluster Dataproc

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:

    1. Pemakaian HDFS bukan sinyal untuk penskalaan otomatis.
    2. Data HDFS hanya dihosting di pekerja utama. Jumlah pekerja utama harus cukup untuk menampung semua data HDFS.
    3. 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:

  1. Buat kebijakan penskalaan otomatis.

  2. Baik:

    1. Buat cluster penskalaan otomatis, atau
    2. Aktifkan penskalaan otomatis di cluster yang ada.

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.

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.

  1. 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. Nilai 0 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 \]

  2. Dengan perkiraan perubahan yang diperlukan untuk jumlah pekerja, penskalaan otomatis menggunakan scaleUpFactor atau scaleDownFactor 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).

  3. Setelah perubahan jumlah pekerja dihitung, scaleUpMinWorkerFraction dan scaleDownMinWorkerFraction 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
    
    ATAU
    IF (abs(Δworkers) >  scaleDownMinWorkerFraction * current_worker_count),
    THEN scale down.
    

  4. Jika jumlah pekerja yang akan diskalakan cukup besar untuk memicu penskalaan, penskalaan otomatis menggunakan batas minInstances maxInstances dari workerConfig dan secondaryWorkerConfig serta weight (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.

  5. Permintaan penskalaan otomatis akan dibatalkan pada cluster yang dibuat dengan versi gambar yang lebih lama dari 2.0.57 dan 2.1.5 jika:

    1. penurunan skala sedang berlangsung dengan nilai waktu tunggu penghentian tuntas yang bukan nol, dan
    2. jumlah pekerja YARN AKTIF ("pekerja aktif") ditambah perubahan jumlah total pekerja yang direkomendasikan oleh penskalaan otomatis (Δworkers) sama dengan atau lebih besar dari DECOMMISSIONING 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:

  1. Tetapkan --num-workers=10 agar cocok dengan ukuran grup pekerja utama kebijakan penskalaan otomatis.
  2. Tetapkan --secondary-worker-type=non-preemptible untuk mengonfigurasi pekerja sekunder menjadi tidak dapat dihentikan. (Kecuali jika preemptible VM diinginkan).
  3. 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 penskalaan otomatis-stackdriver1 penskalaan otomatis-stackdriver2 penskalaan otomatis-stackdriver3

Cloud Logging

Gunakan Cloud Logging untuk melihat log dari Cloud Dataproc Autoscaler.

1) Temukan log untuk cluster Anda.

autoscaling-logs-for-cluster

2) Pilih dataproc.googleapis.com/autoscaler.

file log penskalaan otomatis

3) Luaskan pesan log untuk melihat kolom status. Log ini memiliki format JSON, yaitu format yang dapat dibaca mesin.

penskalaan otomatis-tiga-log autoscaling-update-operation

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

penskalaan otomatis-rekomendasi-pesan

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:

  1. 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.

  2. 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.

  3. 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

  1. 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 menetapkan spark.dynamicAllocation.enabled=false.

  2. 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:

  1. Nonaktifkan alokasi dinamis Spark Core (spark.dynamicAllocation.enabled=false), dan
  2. 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 menggantikan spark.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:

  1. Error yang ditampilkan dari Compute Engine API, sering kali selama penghentian Compute Engine.

  2. HDFS mengalami kerusakan karena bug dalam penghentian HDFS.

  3. 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).

dataproc-autoscaling-cancellation-example

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.