Saat membuat cluster Dataproc, Anda dapat menentukan tindakan inisialisasi dalam file yang dapat dieksekusi atau skrip yang akan dijalankan Dataproc pada semua node dalam cluster Dataproc Anda segera setelah cluster disiapkan. Tindakan inisialisasi sering kali menyiapkan dependensi tugas, seperti menginstal paket Python, sehingga tugas dapat dikirim ke cluster tanpa harus menginstal dependensi saat tugas dijalankan.
Anda dapat menemukan contoh skrip tindakan inisialisasi di lokasi berikut: Catatan: Google tidak mendukung contoh ini.
- Repositori GitHub
- Cloud Storage—di bucket publik
gs://goog-dataproc-initialization-actions-REGION
regional
Pertimbangan dan panduan penting
Jangan buat cluster produksi yang merujuk tindakan inisialisasi yang berada di bucket publik
gs://goog-dataproc-initialization-actions-REGION
. Skrip ini disediakan sebagai implementasi referensi. Skrip ini disinkronkan dengan perubahan repositori GitHub yang sedang berlangsung, dan update pada skrip ini dapat menghentikan pembuatan cluster Anda. Sebagai gantinya, salin tindakan inisialisasi dari bucket publik ke folder bucket Cloud Storage berversi, seperti ditunjukkan dalam contoh berikut:REGION=COMPUTE_REGION
gsutil cp gs://goog-dataproc-initialization-actions-${REGION}/cloud-sql-proxy/cloud-sql-proxy.sh \ gs://my-bucket/cloud-sql-proxy/v1.0/cloud-sql-proxy.sh
gcloud dataproc clusters create CLUSTER_NAME \ --region=${REGION} \ --initialization-actions=gs://my-bucket/cloud-sql-proxy/v1.0/cloud-sql-proxy.sh \ ...other flags...
Tindakan inisialisasi dijalankan pada setiap node secara berurutan selama pembuatan cluster. Operasi ini juga dijalankan pada setiap node yang ditambahkan saat penskalaan atau penskalaan otomatis mengelompokkan cluster.
Saat memperbarui tindakan inisialisasi—misalnya, saat Anda menyinkronkan tindakan inisialisasi Cloud Storage terhadap perubahan yang dilakukan pada bucket publik atau tindakan inisialisasi repositori GitHub—buat folder baru (sebaiknya dengan nama versi) untuk menerima tindakan inisialisasi yang diperbarui. Sebaliknya, jika Anda memperbarui tindakan inisialisasi yang ada, node baru, seperti yang ditambahkan oleh penskalaan otomatis, akan menjalankan tindakan inisialisasi di tempat yang diperbarui, bukan tindakan inisialisasi versi sebelumnya yang berjalan pada node yang ada. Perbedaan tindakan inisialisasi tersebut dapat menyebabkan node cluster tidak konsisten atau rusak.
Tindakan inisialisasi dijalankan sebagai pengguna
root
. Anda tidak perlu menggunakansudo
.Gunakan jalur absolut dalam tindakan inisialisasi.
Gunakan baris Shebang dalam tindakan inisialisasi untuk menunjukkan cara skrip akan ditafsirkan (seperti
#!/bin/bash
atau#!/usr/bin/python
).Jika tindakan inisialisasi dihentikan dengan kode keluar bukan nol, operasi pembuatan cluster akan melaporkan status "ERROR". Untuk men-debug tindakan inisialisasi, gunakan SSH agar terhubung ke instance VM cluster, lalu periksa log. Setelah memperbaiki masalah tindakan inisialisasi, Anda dapat menghapusnya, lalu membuat ulang cluster.
Jika Anda membuat cluster Dataproc dengan hanya alamat IP internal, upaya untuk mengakses
github.com
melalui internet dalam tindakan inisialisasi akan gagal, kecuali jika Anda telah mengonfigurasi rute untuk mengarahkan traffic melalui Cloud NAT atau Cloud VPN. Tanpa akses ke internet, Anda dapat mengaktifkan Akses Google Pribadi dan menempatkan dependensi tugas di Cloud Storage; node cluster dapat mendownload dependensi dari Cloud Storage dari IP internal.Anda dapat menggunakan image kustom Dataproc, bukan tindakan inisialisasi untuk menyiapkan dependensi tugas.
Pemrosesan inisialisasi:
- Cluster gambar sebelum versi 2.0:
- Master: Untuk mengizinkan tindakan inisialisasi berjalan pada master untuk menulis file ke HDFS, tindakan inisialisasi node master tidak dimulai hingga HDFS dapat ditulis (hingga HDFS keluar dari mode aman dan setidaknya dua DataNode HDFS telah bergabung).
- Pekerja: Jika Anda menetapkan
properti cluster
dataproc:dataproc.worker.custom.init.actions.mode
keRUN_BEFORE_SERVICES
, setiap pekerja akan menjalankan tindakan inisialisasinya sebelum memulai datanode HDFS dan daemon nodemanager YARN-nya. Karena Dataproc tidak menjalankan tindakan inisialisasi master hingga HDFS dapat ditulis, yang memerlukan 2 daemon datanode HDFS untuk berjalan, menyetel properti ini dapat memperpanjang waktu pembuatan cluster.
2.0+ kelompok gambar:
- Master: Tindakan inisialisasi node master dapat berjalan sebelum
HDFS dapat ditulis. Jika Anda menjalankan tindakan inisialisasi yang melakukan tahap
file dalam HDFS atau bergantung pada ketersediaan layanan yang bergantung pada HDFS,
seperti Ranger, tetapkan
properti cluster
dataproc.master.custom.init.actions.mode
keRUN_AFTER_SERVICES
. Catatan: karena setelan properti ini dapat meningkatkan waktu pembuatan cluster—lihat penjelasan penundaan pembuatan cluster untuk pekerja cluster gambar sebelum versi 2.0—gunakan hanya jika diperlukan (sebagai praktik umum, andalkan setelanRUN_BEFORE_SERVICES
default untuk properti ini). - Pekerja: Properti cluster
dataproc:dataproc.worker.custom.init.actions.mode
ditetapkan keRUN_BEFORE_SERVICES
dan tidak dapat diteruskan ke cluster saat cluster dibuat (Anda tidak dapat mengubah setelan properti). Setiap pekerja menjalankan tindakan inisialisasinya sebelum memulai datanode HDFS dan daemon nodemanager YARN-nya. Karena Dataproc tidak menunggu HDFS dapat ditulisi sebelum menjalankan tindakan inisialisasi master, tindakan inisialisasi master dan pekerja akan berjalan secara paralel.
- Master: Tindakan inisialisasi node master dapat berjalan sebelum
HDFS dapat ditulis. Jika Anda menjalankan tindakan inisialisasi yang melakukan tahap
file dalam HDFS atau bergantung pada ketersediaan layanan yang bergantung pada HDFS,
seperti Ranger, tetapkan
properti cluster
Rekomendasi:
- Gunakan metadata untuk menentukan peran node dalam menjalankan tindakan inisialisasi pada node secara kondisional (lihat Menggunakan metadata cluster).
- Melakukan fork salinan tindakan inisialisasi ke bucket Cloud Storage untuk stabilitas (lihat Penggunaan tindakan inisialisasi).
- Menambahkan percobaan ulang saat Anda mendownload dari internet untuk membantu menstabilkan tindakan inisialisasi.
- Cluster gambar sebelum versi 2.0:
Menggunakan tindakan inisialisasi
Tindakan inisialisasi cluster dapat ditentukan terlepas dari cara Anda membuat cluster:
- Melalui Konsol Google Cloud
- Menggunakan gcloud CLI
- Secara terprogram dengan clusters.create API Dataproc (lihat NodeInitializationAction)
Perintah Gcloud
Saat membuat cluster dengan perintah gcloud dataproc cluster create, tentukan satu atau beberapa lokasi Cloud Storage (URI) yang dipisahkan koma dari file inisialisasi yang dapat dieksekusi atau skrip dengan flag --initialization-actions
. Catatan: Beberapa "/" yang berurutan dalam URI lokasi Cloud Storage setelah "gs://" awal, seperti "gs://bucket/my//object//name", tidak didukung. Menjalankan
gcloud dataproc clusters create --help
untuk informasi perintah.
gcloud dataproc clusters create cluster-name \ --region=${REGION} \ --initialization-actions=Cloud Storage URI(s) (gs://bucket/...) \ --initialization-action-timeout=timeout-value (default=10m) \ ... other flags ...Catatan:
- Gunakan flag
--initialization-action-timeout
untuk menentukan periode waktu tunggu tindakan inisialisasi. Nilai waktu tunggu default adalah 10 menit. Jika inisialisasi dapat dieksekusi atau skrip belum selesai pada akhir periode waktu tunggu, Dataproc akan membatalkan tindakan inisialisasi. -
Gunakan properti cluster
dataproc:dataproc.worker.custom.init.actions.mode
untuk menjalankan tindakan inisialisasi pada pekerja utama sebelum pengelola node dan daemon datanode dimulai.
REST API
Tentukan satu atau beberapa skrip atau file yang dapat dieksekusi di array ClusterConfig.initializationActions sebagai bagian dari permintaan API clusters.create.
Contoh
POST /v1/projects/my-project-id/regions/us-central1/clusters/ { "projectId": "my-project-id", "clusterName": "example-cluster", "config": { "configBucket": "", "gceClusterConfig": { "subnetworkUri": "default", "zoneUri": "us-central1-b" }, "masterConfig": { "numInstances": 1, "machineTypeUri": "n1-standard-4", "diskConfig": { "bootDiskSizeGb": 500, "numLocalSsds": 0 } }, "workerConfig": { "numInstances": 2, "machineTypeUri": "n1-standard-4", "diskConfig": { "bootDiskSizeGb": 500, "numLocalSsds": 0 } }, "initializationActions": [ { "executableFile": "gs://cloud-example-bucket/my-init-action.sh" } ] } }
Konsol
Meneruskan argumen ke tindakan inisialisasi
Dataproc menetapkan nilai metadata khusus untuk instance yang berjalan di cluster Anda. Anda dapat menetapkan metadata kustom sendiri sebagai cara untuk meneruskan argumen ke tindakan inisialisasi.
gcloud dataproc clusters create cluster-name \ --region=${REGION} \ --initialization-actions=Cloud Storage URI(s) (gs://bucket/...) \ --metadata=name1=value1,name2=value2... \ ... other flags ...
Nilai metadata dapat dibaca dalam tindakan inisialisasi sebagai berikut:
var1=$(/usr/share/google/get_metadata_value attributes/name1)
Pilihan node
Jika ingin membatasi tindakan inisialisasi ke node master, driver, atau pekerja, Anda dapat menambahkan logika pemilihan node sederhana ke file yang dapat dieksekusi atau skrip.
ROLE=$(/usr/share/google/get_metadata_value attributes/dataproc-role) if [[ "${ROLE}" == 'Master' ]]; then ... master specific actions ... else if [[ "${ROLE}" == 'Driver' ]]; then ... driver specific actions ... else ... worker specific actions ... fi
Biner staging
Skenario inisialisasi cluster yang umum adalah staging biner tugas pada cluster untuk meniadakan kebutuhan untuk menata biner setiap kali tugas dikirimkan. Misalnya, asumsikan skrip inisialisasi berikut disimpan di gs://my-bucket/download-job-jar.sh
, lokasi bucket Cloud Storage:
#!/bin/bash ROLE=$(/usr/share/google/get_metadata_value attributes/dataproc-role) if [[ "${ROLE}" == 'Master' ]]; then gsutil cp gs://my-bucket/jobs/sessionalize-logs-1.0.jar home/username fi
Lokasi skrip ini dapat diteruskan ke
perintah gcloud dataproc clusters create
:
gcloud dataproc clusters create my-dataproc-cluster \ --region=${REGION} \ --initialization-actions=gs://my-bucket/download-job-jar.sh
Dataproc akan menjalankan skrip ini pada semua node, dan sebagai konsekuensi dari logika pemilihan node skrip, akan mendownload jar ke node master. Tugas yang sudah dikirim selanjutnya dapat menggunakan jar pra-tahap:
gcloud dataproc jobs submit hadoop \ --cluster=my-dataproc-cluster \ --region=${REGION} \ --jar=file:///home/username/sessionalize-logs-1.0.jar
Contoh tindakan inisialisasi
Contoh skrip tindakan inisialisasi yang sering digunakan dan contoh skrip lainnya terletak di
gs://goog-dataproc-initialization-actions-<REGION>
, bucket Cloud Storage publik regional, dan di
repositori GitHub.
Untuk berkontribusi pada skrip, tinjau
dokumen CONTRIBUTING.md
, lalu ajukan permintaan pull.
Logging
Output dari eksekusi setiap tindakan inisialisasi dicatat untuk setiap instance di /var/log/dataproc-initialization-script-X.log
, dengan X
adalah indeks berbasis nol dari setiap skrip tindakan inisialisasi berturut-turut. Misalnya, jika cluster Anda memiliki dua tindakan inisialisasi, output-nya akan dicatat dalam /var/log/dataproc-initialization-script-0.log
dan /var/log/dataproc-initialization-script-1.log
.
Langkah Berikutnya
Pelajari tindakan inisialisasi GitHub.