Membuat gambar kustom Dataproc

Cluster Dataproc dapat disediakan dengan image kustom yang berisi paket yang telah diinstal sebelumnya oleh pengguna. Langkah berikut menjelaskan cara membuat image kustom dan menginstalnya di cluster Dataproc.

Catatan:

  • Petunjuk dalam dokumen ini hanya berlaku untuk sistem operasi Linux. Sistem operasi lain mungkin didukung dalam rilis Dataproc mendatang.
  • Build image kustom memerlukan mulai dari image dasar Dataproc (image dasar Debian, Rocky Linux, dan Ubuntu didukung).
  • Menggunakan komponen opsional: Secara default, image kustom mewarisi semua komponen opsional Dataproc (paket dan konfigurasi OS) dari image dasarnya. Anda dapat menyesuaikan versi dan konfigurasi paket OS default, tetapi Anda harus menentukan nama komponen opsional saat membuat cluster (misalnya, dengan menjalankan perintah gcloud dataproc clusters create --optional-components=COMPONENT_NAME —lihat Menambahkan komponen opsional). Jika nama komponen tidak ditentukan saat Anda membuat cluster, komponen (termasuk paket dan konfigurasi OS kustom) akan dihapus.

Sebelum memulai

Menyiapkan project

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Enable the Dataproc API, Compute Engine API, and Cloud Storage APIs.

    Enable the APIs

  5. Menginstal Google Cloud CLI.
  6. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  7. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  8. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  9. Enable the Dataproc API, Compute Engine API, and Cloud Storage APIs.

    Enable the APIs

  10. Menginstal Google Cloud CLI.
  11. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  12. Menginstal Python 3.11+
  13. Siapkan skrip penyesuaian yang menginstal paket kustom dan/atau konfigurasi update, misalnya:
      #! /usr/bin/bash
      apt-get -y update
      apt-get install python-dev
      apt-get install python-pip
      pip install numpy
      

Membuat bucket Cloud Storage di project Anda

  1. Di Konsol Google Cloud, buka halaman Bucket Cloud Storage.

    Buka halaman Bucket

  2. Klik Buat bucket.
  3. Di halaman Buat bucket, masukkan informasi bucket Anda. Untuk melanjutkan ke langkah berikutnya, klik Lanjutkan.
    • Untuk Beri nama bucket, masukkan nama yang memenuhi persyaratan penamaan bucket.
    • Untuk Pilih tempat untuk menyimpan data, lakukan tindakan berikut:
      • Pilih opsi Jenis lokasi.
      • Pilih opsi Lokasi.
    • Untuk Memilih kelas penyimpanan default untuk data Anda, pilih kelas penyimpanan.
    • Untuk Memilih cara mengontrol akses ke objek, pilih opsi Kontrol akses.
    • Untuk Setelan lanjutan (opsional), tentukan metode enkripsi, kebijakan retensi, atau label bucket.
  4. Klik Buat.

Membuat gambar kustom

Anda akan menggunakan generate_custom_image.py, program Python untuk membuat image kustom Dataproc.

Cara kerjanya

Program generate_custom_image.py meluncurkan instance VM Compute Engine sementara dengan image dasar Dataproc yang ditentukan, lalu menjalankan skrip penyesuaian di dalam instance VM untuk menginstal paket kustom dan/atau memperbarui konfigurasi. Setelah selesai, skrip penyesuaian akan menonaktifkan instance VM dan membuat image kustom Dataproc dari disk instance VM. VM sementara akan dihapus setelah image kustom dibuat. Gambar kustom disimpan dan dapat digunakan untuk membuat cluster Dataproc.

Program generate_custom_image.py menggunakan gcloud CLI untuk menjalankan alur kerja multi-langkah di Compute Engine.

Menjalankan kode

Lakukan fork atau clone file di GitHub di image kustom Dataproc. Kemudian, jalankan program generate_custom_image.py agar Dataproc membuat dan menyimpan gambar kustom.

python3 generate_custom_image.py \
    --image-name=CUSTOM_IMAGE_NAME \
    [--family=CUSTOM_IMAGE_FAMILY_NAME] \
    --dataproc-version=IMAGE_VERSION \
    --customization-script=LOCAL_PATH \
    --zone=ZONE \
    --gcs-bucket=gs://BUCKET_NAME \
    [--no-smoke-test]

Tanda yang diperlukan

  • --image-name: nama output untuk gambar kustom Anda. Catatan: nama gambar harus cocok dengan ekspresi reguler [a-z](?:[-a-z0-9]{0,61}[a-z0-9]) — misalnya, tanpa garis bawah atau spasi, kurang dari 64 karakter.
  • --dataproc-version: versi image Dataproc untuk digunakan dalam image kustom Anda. Tentukan versi dalam format "x.y.z-os" atau "x.y.z-rc-os", misalnya, "2.0.69-debian10".
  • --customization-script: jalur lokal ke skrip yang akan dijalankan alat untuk menginstal paket kustom atau melakukan penyesuaian lainnya. Perlu diperhatikan bahwa skrip ini hanya dijalankan pada VM sementara yang digunakan untuk membuat image kustom. Anda dapat menentukan skrip inisialisasi yang berbeda untuk tindakan inisialisasi lain yang ingin dilakukan saat membuat cluster dengan image kustom.
  • --zone: zona Compute Engine tempat generate_custom_image.py akan membuat VM sementara yang akan digunakan untuk membuat image kustom.
  • --gcs-bucket: URI, dalam format gs://BUCKET_NAME, yang mengarah ke bucket Cloud Storage yang Anda buat di bagian Membuat bucket Cloud Storage di project Anda. generate_custom_image.py akan menulis file log ke bucket ini.

Tanda opsional

  • --family: kelompok gambar untuk gambar. Kelompok gambar digunakan untuk mengelompokkan gambar yang mirip, dan dapat digunakan saat membuat cluster sebagai pointer ke gambar terbaru dalam kelompok gambar tersebut. Misalnya, "custom-1-5-debian10".
  • --no-smoke-test: Ini adalah flag opsional yang menonaktifkan pengujian asap pada image kustom yang baru dibuat. Uji asap membuat cluster pengujian Dataproc dengan image yang baru di-build, menjalankan tugas kecil, lalu menghapus cluster tersebut di akhir pengujian. Pengujian asap berjalan secara default untuk memverifikasi bahwa image kustom yang baru di-build dapat membuat cluster Dataproc yang fungsional. Menonaktifkan langkah ini menggunakan tanda --no-smoke-test akan mempercepat proses build image kustom, tetapi penggunaannya tidak direkomendasikan.
  • --subnet: Subnetwork yang akan digunakan untuk membuat VM yang membangun image Dataproc kustom. Jika project Anda adalah bagian dari VPC bersama, Anda harus menentukan URL subnetwork lengkap dalam format berikut: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET.

Untuk listingan tanda opsional tambahan, lihat Argumen Opsional di GitHub.

Jika generate_custom_image.py berhasil, imageURI gambar kustom akan tercantum dalam output jendela terminal (imageUri lengkapnya ditampilkan dalam tebal di bawah):

...
managedCluster:
    clusterName: verify-image-20180614213641-8308a4cd
    config:
      gceClusterConfig:
        zoneUri: ZONE
      masterConfig:
        imageUri: https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
...

INFO:__main__:Successfully built Dataproc custom image: CUSTOM_IMAGE_NAME
INFO:__main__:

#####################################################################
  WARNING: DATAPROC CUSTOM IMAGE 'CUSTOM_IMAGE_NAME'
           WILL EXPIRE ON 2018-07-14 21:35:44.133000.
#####################################################################

Label versi gambar kustom untuk pengguna tingkat lanjut

Saat menggunakan alat gambar kustom standar Dataproc, alat tersebut secara otomatis menetapkan label goog-dataproc-version yang diperlukan pada gambar kustom yang dibuat. Label ini mencerminkan kemampuan fitur dan protokol yang digunakan oleh Dataproc untuk mengelola software pada image.

Pengguna tingkat lanjut yang menggunakan proses mereka sendiri untuk membuat gambar Dataproc kustom harus menambahkan label secara manual ke gambar kustom mereka, sebagai berikut:

  1. Ekstrak label goog-dataproc-version dari image Dataproc dasar yang digunakan untuk membuat image kustom.

    gcloud compute images describe ${BASE_DATAPROC_IMAGE} \
        --project cloud-dataproc \
        --format="value(labels.goog-dataproc-version)"
    

  2. Menetapkan label pada gambar kustom.

    gcloud compute images add-labels IMAGE_NAME --labels=[KEY=VALUE,...]
    

Menggunakan gambar kustom

Anda menetapkan gambar kustom saat membuat cluster Dataproc. Image kustom disimpan di Image Cloud Compute, dan berlaku untuk membuat cluster Dataproc selama 365 hari sejak tanggal pembuatannya (lihat Cara membuat cluster dengan image kustom yang sudah tidak berlaku untuk menggunakan image kustom setelah tanggal habis masa berlakunya 365 hari).

URI gambar kustom

Anda meneruskan imageUri gambar kustom ke operasi pembuatan cluster. URI ini dapat ditetapkan dengan salah satu dari tiga cara berikut:

  1. URI lengkap:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/`gs://`BUCKET_NAME`
  2. URI Sebagian: projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
  3. Nama pendek: CUSTOM_IMAGE_NAME

Gambar kustom juga dapat ditentukan berdasarkan URI jenisnya, yang selalu memilih gambar terbaru dalam kelompok gambar.

  1. URI lengkap:
    https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME/var>
  2. URI Sebagian: projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME

Cara menemukan URI gambar kustom

Perintah gcloud

Jalankan perintah gcloud berikut untuk menampilkan nama image kustom Anda:

gcloud compute images list

Teruskan nama image kustom Anda ke perintah gcloud berikut untuk menampilkan daftar URI (selfLink) gambar kustom Anda:

gcloud compute images describe custom-image-name
...
name: CUSTOM_IMAGE_NAME
selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
...

Konsol

  1. Buka halaman Compute Engine→Images di Konsol Google Cloud, lalu klik nama image. Anda dapat menyisipkan kueri di kotak teks gambar filter untuk membatasi jumlah gambar yang ditampilkan.
  2. Halaman detail Gambar akan terbuka. Klik Equivalent REST.
  3. Respons REST mencantumkan informasi tambahan tentang gambar, termasuk selfLink, yang merupakan URI gambar.
    {
      ...
      "name": "my-custom-image",
      "selfLink": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME",
      "sourceDisk": ...,
      ...
    }
    

Membuat cluster dengan gambar kustom

Anda dapat membuat cluster dengan node master dan worker yang menggunakan gambar kustom dengan alat command line gcloud, Dataproc API, atau konsol Google Cloud.

Perintah gcloud

Anda dapat membuat cluster Dataproc dengan gambar kustom menggunakan perintah create cluster dataproc dengan flag --image. Contoh:
gcloud dataproc clusters create CLUSTER-NAME \
    --image=CUSTOM_IMAGE_URI \
    --region=REGION \
    ... other flags ...

REST API

Anda dapat membuat cluster menggunakan gambar kustom dengan menentukan URI gambar kustom di kolom InstanceGroupConfig.imageUri di masterConfig, workerConfig, dan, jika berlaku, objek secondaryWorkerConfig yang disertakan dalam permintaan API cluster.create.

Contoh: Permintaan REST untuk membuat cluster Dataproc standar (satu master, dua worker node) dengan gambar kustom.

POST /v1/projects/PROJECT_ID/regions/REGION/clusters/
{
  "clusterName": "CLUSTER_NAME",
  "config": {
    "masterConfig": {
      "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME"
    },
    "workerConfig": {
      "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME"
    }
  }
}
  

Konsol

  1. Di konsol Google Cloud, buka halaman Create a cluster pada Dataproc. Panel Siapkan cluster dipilih.
  2. Di bagian Pembuatan Versi, klik UBAH. Pilih tab GAMBAR KUSTOM, pilih gambar kustom yang akan digunakan untuk cluster Dataproc Anda, lalu klik PILIH.

Saat Anda mengirimkan formulir Create a cluster, VM cluster Anda akan disediakan dengan image kustom yang dipilih.

Mengganti properti cluster Dataproc dengan gambar kustom

Anda dapat menggunakan image kustom untuk menimpa properti cluster yang ditetapkan selama pembuatan cluster. Jika pengguna membuat cluster dengan gambar kustom Anda, tetapi menetapkan properti cluster yang berbeda dari yang ditetapkan dengan gambar kustom, setelan properti cluster gambar kustom Anda akan lebih diutamakan.

Untuk menetapkan properti cluster dengan gambar kustom:

  1. Di skrip penyesuaian gambar kustom Anda, buat file dataproc.custom.properties di /etc/google-dataproc, lalu tetapkan nilai properti cluster dalam file tersebut.
    • Contoh konten file dataproc.custom.properties:
      dataproc.conscrypt.provider.enable=VALUE
      dataproc.logging.stackdriver.enable=VALUE
      

Contoh cuplikan pembuatan file skrip penyesuaian untuk mengganti dua properti cluster:

     cat <<EOF >/etc/google-dataproc/dataproc.custom.properties
     dataproc.conscrypt.provider.enable=true
     dataproc.logging.stackdriver.enable=false
     EOF

Cara membuat cluster dengan gambar kustom yang sudah tidak berlaku

Secara default, masa berlaku gambar kustom akan berakhir 365 hari sejak tanggal pembuatan gambar. Anda dapat membuat cluster yang menggunakan image kustom yang sudah tidak berlaku dengan menyelesaikan langkah-langkah berikut.

  1. Coba buat cluster Dataproc dengan gambar kustom yang masa berlakunya sudah habis atau gambar kustom yang akan habis masa berlakunya dalam waktu 10 hari.

    gcloud dataproc clusters create CLUSTER-NAME \
        --image=CUSTOM-IMAGE-NAME \
        --region=REGION \
        ... other flags ...
    

  2. Gcloud CLI akan mengeluarkan pesan error yang menyertakan nama properti dataproc:dataproc.custom.image.expiration.token cluster dan nilai token.

    dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE
    
    Salin string "nilai token" ke papan klip.

  3. Gunakan gcloud CLI untuk membuat cluster Dataproc lagi, dengan menambahkan "nilai token" yang disalin di atas sebagai properti cluster.

    gcloud dataproc clusters create CLUSTER-NAME \
        --image=CUSTOM-IMAGE-NAME \
        --properties=dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE \
        --region=REGION \
        ... other flags ...
    

Pembuatan cluster dengan gambar kustom akan berhasil.