Membuat image kustom Managed Service for Apache Spark

Anda dapat membuat cluster Managed Service untuk Apache Spark dengan image kustom yang menyertakan paket yang telah diinstal sebelumnya. Halaman ini menunjukkan cara membuat image kustom dan menginstalnya di cluster Managed Service untuk Apache Spark.

Pertimbangan dan batasan penggunaan

  • Masa aktif image kustom: Untuk memastikan cluster menerima update layanan dan perbaikan bug terbaru, pembuatan cluster dengan image kustom dibatasi hingga 365 hari sejak tanggal pembuatan image kustom. Perhatikan bahwa cluster yang ada yang dibuat dengan image kustom dapat berjalan tanpa batas waktu.

    Anda mungkin perlu menggunakan otomatisasi jika ingin membuat cluster dengan image kustom tertentu untuk jangka waktu lebih dari 365 hari. Untuk mengetahui informasi selengkapnya, lihat Membuat cluster dengan image kustom yang sudah tidak berlaku.

  • Khusus Linux: Petunjuk dalam dokumen ini hanya berlaku untuk sistem operasi Linux. Sistem operasi lain mungkin didukung dalam rilis Managed Service untuk Apache Spark mendatang.

  • Image dasar yang didukung: Build image kustom harus dimulai dari image dasar Managed Service untuk Apache Spark. Image dasar berikut didukung: Debian, Rocky Linux, dan Ubuntu.

* Menggunakan komponen opsional:

  • Image dasar 2.2 dan yang lebih lama: Secara default, semua komponen opsional Managed Service untuk Apache Spark (paket dan konfigurasi OS) diinstal pada image kustom. Anda dapat menyesuaikan versi dan konfigurasi paket OS.

  • Image dasar 2.3 dan yang lebih baru: Hanya komponen opsional yang dipilih yang diinstal pada image kustom (lihat flag generate_custom_image.py --optional-components).

    Terlepas dari image dasar yang digunakan untuk image kustom, saat membuat cluster, Anda harus mencantumkan atau memilih komponen opsional.

    Contoh: Perintah pembuatan cluster Google Cloud CLI:

    gcloud dataproc clusters create CLUSTER_NAME
        --image=CUSTOM_IMAGE_URI  \
        --optional-components=COMPONENT_NAME \
        ... other flags
    

    Jika nama komponen tidak ditentukan saat Anda membuat cluster, komponen opsional, termasuk paket dan konfigurasi OS kustom, akan dihapus.

  • Menggunakan image kustom yang dihosting: Jika Anda menggunakan image kustom yang dihosting di project lain, akun layanan Agen Layanan Managed Service untuk Apache Spark di project Anda harus memiliki izin compute.images.get pada image di project host. Anda dapat memberikan izin ini dengan memberikan peran roles/compute.imageUser pada image yang dihosting ke akun layanan agen layanan Managed Service untuk Apache Spark project Anda (lihat Berbagi image kustom dalam organisasi).

  • Menggunakan rahasia MOK (Machine Owner Key) booting aman: Untuk mengaktifkan booting aman dengan image kustom Managed Service untuk Apache Spark, lakukan hal berikut:

    1. Aktifkan Secret Manager API (secretmanager.googleapis.com. Managed Service untuk Apache Spark membuat dan mengelola pasangan kunci menggunakan layanan Secret Manager.

    2. Tambahkan flag --service-account="SERVICE_ACCOUNT" ke perintah generate_custom_image.py saat Anda membuat image kustom. Catatan: Anda harus memberikan peran Secret Manager Viewer (roles/secretmanager.viewer) ke akun layanan pada project dan peran Secret Manager Accessor (roles/secretmanager.secretAccessor) pada secret publik dan pribadi.

      Untuk mengetahui informasi selengkapnya beserta contoh, lihat README.md dan file lainnya dalam direktori examples/secure-boot dari repositori GoogleCloudDataproc/custom-images di GitHub.

      Untuk menonaktifkan Booting Aman: Secara default, skrip image kustom Managed Service untuk Apache Spark membuat dan mengelola pasangan kunci menggunakan Secret Manager saat dijalankan dari cluster Managed Service untuk Apache Spark. Jika Anda tidak ingin menggunakan booting aman dengan image kustom, sertakan --trusted-cert="" (nilai flag kosong) ke perintah generate_custom_image.py saat Anda membuat image kustom.

Sebelum memulai

Pastikan untuk menyiapkan project Anda sebelum membuat image kustom.

Menyiapkan project

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the Dataproc API, Compute Engine API, and Cloud Storage APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  4. Install the Google Cloud CLI.

  5. Configure the gcloud CLI to use your federated identity.

    For more information, see Sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. Menginstal Python 3.11+
  8. Siapkan skrip penyesuaian yang menginstal paket kustom dan/atau mengupdate konfigurasi, 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 Buckets Cloud Storage.

    Buka Buckets

  2. Klik Create.
  3. Di halaman Buat bucket, masukkan informasi bucket Anda. Untuk melanjutkan ke langkah berikutnya, klik Lanjutkan.
    1. Di bagian Get started, lakukan tindakan berikut:
      • Masukkan nama yang unik secara global yang memenuhi persyaratan penamaan bucket.
      • Untuk menambahkan label bucket, luaskan bagian Labels (), klik Add label, lalu tentukan key dan value untuk label Anda.
    2. Di bagian Choose where to store your data, lakukan tindakan berikut:
      1. Pilih Location type.
      2. Pilih lokasi tempat data bucket Anda disimpan secara permanen dari menu drop-down Location type.
        • Jika memilih jenis lokasi dual-region, Anda juga dapat memilih untuk mengaktifkan replikasi turbo menggunakan kotak centang yang relevan.
      3. Untuk menyiapkan replikasi lintas bucket, pilih Add cross-bucket replication via Storage Transfer Service dan ikuti langkah-langkah berikut:

        Menyiapkan replikasi lintas bucket

        1. Di menu Bucket, pilih bucket.
        2. Di bagian Replication settings, klik Configure guna mengonfigurasi setelan untuk tugas replikasi.

          Panel Configure cross-bucket replication akan muncul.

          • Untuk memfilter objek yang akan direplikasi berdasarkan awalan nama objek, masukkan awalan yang ingin Anda sertakan atau kecualikan objek, lalu klik Tambahkan awalan.
          • Untuk menetapkan kelas penyimpanan bagi objek yang direplikasi, pilih kelas penyimpanan dari menu Storage class. Jika Anda melewati langkah ini, objek yang direplikasi akan menggunakan kelas penyimpanan bucket tujuan secara default.
          • Klik Done.
    3. Di bagian Choose how to store your data, lakukan tindakan berikut:
      1. Pilih kelas penyimpanan default untuk bucket atau Autoclass untuk pengelolaan kelas penyimpanan otomatis untuk data bucket Anda.
      2. Untuk mengaktifkan namespace hierarkis, di bagian Optimalkan penyimpanan untuk workload yang memerlukan banyak data, pilih Aktifkan namespace hierarkis di bucket ini.
    4. Di bagian Choose how to control access to objects, pilih apakah bucket Anda menerapkan pencegahan akses publik atau tidak, lalu pilih metode kontrol akses untuk objek bucket Anda.
    5. Di bagian Choose how to protect object data, lakukan hal berikut:
      • Pilih salah satu opsi di bagian Perlindungan data yang ingin Anda tetapkan untuk bucket.
        • Untuk mengaktifkan penghapusan sementara, centang kotak Kebijakan penghapusan sementara (Untuk pemulihan data), dan tentukan jumlah hari yang Anda inginkan untuk mempertahankan objek setelah penghapusan.
        • Untuk menetapkan Pembuatan Versi Objek, klik kotak centang Pembuatan versi objek (Untuk kontrol versi), lalu tentukan jumlah maksimum versi per objek dan jumlah hari setelah versi lama tidak berlaku.
        • Untuk mengaktifkan kebijakan retensi pada objek dan bucket, klik kotak centang Retention (For compliance), lalu lakukan hal berikut:
          • Untuk mengaktifkan Kunci Retensi Objek, centang kotak Aktifkan retensi objek.
          • Untuk mengaktifkan Bucket Lock, centang kotak Set bucket retention policy, lalu pilih satuan waktu dan lama untuk periode retensi data.
      • Untuk memilih cara data objek Anda akan dienkripsi, luaskan bagian Data encryption (), lalu pilih metode Data encryption.
  4. Klik Create.

Membuat gambar kustom

Anda menggunakan generate_custom_image.py, program Python, untuk membuat image kustom Managed Service untuk Apache Spark.

Cara kerjanya

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

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 Managed Service untuk Apache Spark.

Kemudian, jalankan skrip generate_custom_image.py agar Managed Service untuk Apache Spark membuat dan menyimpan image kustom Anda.

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]

Flag yang diperlukan

  • --image-name: nama output untuk image kustom Anda.

  • --dataproc-version: versi image Managed Service untuk Apache Spark yang akan 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 Anda yang akan dijalankan alat untuk menginstal paket kustom atau melakukan penyesuaian lainnya. Skrip ini dijalankan sebagai skrip startup Linux hanya pada VM sementara yang digunakan untuk membuat image kustom. Anda dapat menentukan skrip inisialisasi yang berbeda untuk tindakan inisialisasi lain yang ingin Anda lakukan saat membuat cluster dengan image kustom.

    Image lintas project: Jika image kustom Anda digunakan untuk membuat cluster di project yang berbeda, error dapat terjadi karena cache perintah gcloud atau gsutil yang disimpan dalam image. Anda dapat menghindari masalah ini dengan menyertakan perintah berikut dalam skrip penyesuaian untuk menghapus kredensial yang di-cache.

    rm -r /root/.gsutil /root/.config/gcloud
    
  • --zone: zona Compute Engine tempat generate_custom_image.py akan membuat VM sementara yang akan digunakan untuk membuat image kustom Anda.

  • --gcs-bucket: URI, dalam format gs://BUCKET_NAME, yang mengarah ke bucket Cloud Storage Anda. generate_custom_image.py menulis file log ke bucket ini.

Flag opsional

  • --family: kelompok image untuk image kustom. Kelompok image digunakan untuk mengelompokkan image yang serupa, dan dapat digunakan saat membuat cluster sebagai pointer ke image terbaru dalam kelompok tersebut. Contoh, custom-2-2-debian12.
  • --no-smoke-test: Ini adalah flag opsional yang menonaktifkan smoke test pada image kustom yang baru dibuat. Pengujian smoke membuat cluster pengujian Managed Service untuk Apache Spark dengan image yang baru dibuat, menjalankan tugas kecil, lalu menghapus cluster di akhir pengujian. Smoke test berjalan secara default untuk memverifikasi bahwa image kustom yang baru dibuat dapat membuat cluster Managed Service untuk Apache Spark yang berfungsi. Menonaktifkan langkah ini menggunakan flag --no-smoke-test akan mempercepat proses build image kustom, tetapi penggunaannya tidak direkomendasikan.
  • --subnet: Subnetwork yang akan digunakan untuk membuat VM yang membangun image Managed Service untuk Apache Spark 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.
  • --optional-components: Flag ini hanya tersedia saat menggunakan image dasar versi 2.3 dan yang lebih baru. Daftar komponen opsional, seperti SOLR, RANGER, TRINO, DOCKER, FLINK, HIVE_WEBHCAT, ZEPPELIN, HUDI, ICEBERG, dan PIG (PIG tersedia sebagai komponen opsional dalam versi image 2.3 dan yang lebih baru), untuk diinstal dalam image.

    Contoh: Perintah pembuatan cluster Google Cloud CLI:

    gcloud dataproc clusters create CLUSTER_NAME
        --image=CUSTOM_IMAGE_URI  \
        --optional-components=COMPONENT_NAME \
        ... other flags
    

Untuk mengetahui daftar flag opsional yang tersedia, lihat Argumen Opsional di GitHub.

Jika generate_custom_image.py berhasil, imageURI image kustom akan ditampilkan di output jendela terminal (imageUri lengkap ditampilkan dalam bold 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 image kustom (penggunaan lanjutan)

Saat menggunakan alat image kustom standar Managed Service untuk Apache Spark, alat ini menetapkan label goog-dataproc-version pada image kustom yang dibuat. Label ini mencerminkan kemampuan fitur dan protokol yang digunakan oleh Managed Service untuk Apache Spark guna mengelola software pada image.

Penggunaan lanjutan: Jika Anda menggunakan proses sendiri untuk membuat image Managed Service untuk Apache Spark kustom, Anda harus menambahkan label goog-dataproc-version secara manual ke image kustom, sebagai berikut:

  1. Ekstrak label goog-dataproc-version dari image Managed Service untuk Apache Spark dasar yang digunakan untuk membuat image kustom.

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

  2. Tetapkan label pada image kustom.

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

Menggunakan image kustom

Anda menentukan image kustom saat membuat cluster Managed Service untuk Apache Spark. Image kustom disimpan di Cloud Compute Images, dan valid untuk membuat cluster Managed Service untuk Apache Spark selama 365 hari sejak tanggal pembuatannya (lihat Membuat cluster dengan image kustom yang sudah tidak berlaku untuk menggunakan image kustom setelah tanggal habis masa berlakunya yang mencapai 365 hari).

URI image kustom

Anda meneruskan imageUri image kustom ke operasi pembuatan cluster. URI ini dapat ditentukan 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 Parsial: projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
  3. Nama pendek: CUSTOM_IMAGE_NAME

Image kustom juga dapat ditentukan berdasarkan URI kelompoknya, yang selalu memilih image terbaru dalam kelompok image.

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

Menemukan URI image kustom

Google Cloud CLI

Jalankan perintah berikut untuk menampilkan daftar nama image kustom Anda.

gcloud compute images list

Teruskan nama image kustom Anda ke perintah berikut untuk mencantumkan URI (selfLink) image kustom Anda.

gcloud compute images describe custom-image-name

Cuplikan output:

...
name: CUSTOM_IMAGE_NAME
selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
...

KonsolGoogle Cloud

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

Membuat cluster dengan image kustom

membuat cluster menggunakan gcloud CLI, Dataproc API, atau konsolGoogle Cloud .

KonsolGoogle Cloud

  1. Buka halaman Create cluster.
  2. Di bagian Define your cluster, klik Image type and version, pilih Custom image, lalu konfirmasi atau ubah project dan pilih image kustom yang tersedia.

gcloud CLI

Buat cluster Managed Service untuk Apache Spark dengan image kustom menggunakan perintah dataproc clusters create dengan flag --image.

Contoh:
gcloud dataproc clusters create CLUSTER-NAME \
    --image=CUSTOM_IMAGE_URI \
    --region=REGION \
    ... other flags

REST API

Buat cluster dengan image kustom dengan menentukan URI image kustom di kolom InstanceGroupConfig.imageUri dalam objek masterConfig, workerConfig, dan, jika berlaku, secondaryWorkerConfig yang disertakan dalam permintaan API cluster.create.

Contoh: Permintaan REST untuk membuat cluster Managed Service untuk Apache Spark standar (satu master, dua worker node) dengan image 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"
    }
  }
}
  

Mengganti properti cluster Managed Service untuk Apache Spark dengan image kustom

Anda dapat menggunakan image kustom untuk menimpa properti cluster yang ditetapkan selama pembuatan cluster. Jika Anda membuat cluster dengan image kustom, dan operasi pembuatan cluster menetapkan properti dengan nilai yang berbeda dari yang ditetapkan oleh image kustom Anda, nilai properti yang ditetapkan oleh image kustom Anda akan lebih diutamakan.

Untuk menetapkan properti cluster dengan image kustom Anda:

  1. Dalam skrip penyesuaian image kustom, buat file dataproc.custom.properties di /etc/google-dataproc, lalu tetapkan nilai properti cluster dalam file tersebut.

    • Contoh 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-managed-spark/dataproc.custom.properties
    dataproc.conscrypt.provider.enable=true
    dataproc.logging.stackdriver.enable=false
    EOF
    

Membuat cluster dengan image kustom yang sudah tidak berlaku

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

  1. Mencoba membuat cluster Managed Service untuk Apache Spark dengan image kustom yang sudah tidak berlaku atau image 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 menampilkan 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 TOKEN_VALUE ke papan klip.

  1. Gunakan gcloud CLI untuk membuat cluster Managed Service untuk Apache Spark lagi, dengan menambahkan TOKEN_VALUE yang disalin 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 image kustom akan berhasil.