Menjalankan tugas Spark pada Dataproc di Google Kubernetes Engine

Sebelum memulai

  1. Anda harus sudah membuat cluster zonal atau regional Google Kubernetes Engine (GKE) standar (bukan autopilot) yang telah mengaktifkan Workload Identity di cluster.

Membuat Dataproc di cluster virtual GKE

Dataproc pada cluster virtual GKE dibuat sebagai platform deployment untuk komponen Dataproc. Ini adalah resource virtual, dan tidak seperti cluster Dataproc di Compute Engine, VM ini tidak mencakup VM worker dan master Dataproc yang terpisah.

  • Dataproc di GKE membuat node pool di dalam cluster GKE saat Anda membuat Dataproc di cluster virtual GKE.

  • Dataproc di tugas GKE dijalankan sebagai pod pada kumpulan node ini. Kumpulan node dan penjadwalan pod di node pool dikelola oleh GKE.

  • Buat beberapa cluster virtual. Anda dapat membuat dan menjalankan beberapa cluster virtual pada cluster GKE untuk memperoleh peningkatan pemanfaatan resource dengan membagikan kumpulan node di seluruh cluster virtual.

    • Setiap cluster virtual:
      • dibuat dengan properti terpisah, termasuk versi mesin Spark dan workload identity
      • diisolasi dalam namespace GKE yang terpisah di cluster GKE

Konsol

  1. Di konsol Google Cloud, buka halaman Clusters Dataproc.

    Buka Cluster

  2. Klik Buat kluster.

  3. Pada dialog Create Dataproc cluster, klik Create di baris Cluster on GKE.

  4. Di panel Siapkan cluster:

    1. Di kolom Cluster Name, masukkan nama untuk cluster tersebut.
    2. Dalam daftar Region, pilih region untuk Dataproc di cluster virtual GKE. Region ini harus merupakan region yang sama dengan tempat cluster GKE yang ada berada (yang Anda pilih di item berikutnya).
    3. Di kolom Cluster Kubernetes, klik Browse untuk memilih region tempat cluster GKE yang ada berada.
    4. Opsional: Di kolom Cloud Storage staging bucket, Anda dapat mengklik Browse untuk memilih bucket Cloud Storage yang sudah ada. Dataproc di GKE akan menempatkan artefak di dalam bucket. Abaikan kolom ini agar Dataproc di GKE membuat bucket staging.
  5. Di panel kiri, klik Configure Node pool, lalu di panel Node pool, klik Add a pool.

    1. Untuk menggunakan kembali Dataproc yang ada pada kumpulan node GKE:
      1. Klik Gunakan kembali kumpulan node yang ada.
      2. Masukkan nama kumpulan node yang ada, lalu pilih Role. Setidaknya satu kumpulan node harus memiliki peran DEFAULT.
      3. Klik Done.
    2. Untuk membuat Dataproc baru di kumpulan node GKE:
      1. Klik Create a new node pool.
      2. Masukkan nilai kumpulan node berikut:
        • Nama node pool
        • Peran: Setidaknya satu kumpulan node harus memiliki peran DEFAULT.
        • Lokasi: Tentukan zona dalam region cluster Dataproc di GKE.
        • Kumpulan node jenis mesin
        • Platform CPU
        • Preemptibility
        • Min: Jumlah node minimum.
        • Maksimum: Jumlah node maksimum. Jumlah node maksimum harus lebih besar dari 0.
    3. Klik Add a pool untuk menambahkan kumpulan node lainnya. Semua kumpulan node harus memiliki lokasi. Anda dapat menambahkan total empat kumpulan node.
  6. (Opsional) Jika Anda telah menyiapkan Dataproc Persistent History Server (PHS) yang akan digunakan untuk melihat histori tugas Spark, pada Dataproc yang aktif dan telah dihapus di cluster GKE, klik Customize cluster. Kemudian, di kolom Cluster server histori, cari dan pilih cluster PHS Anda. Cluster PHS harus berada di region yang sama dengan Dataproc di cluster virtual GKE.

  7. Klik Create untuk membuat cluster Dataproc. Dataproc Anda di cluster GKE akan muncul dalam daftar di halaman Clusters. Statusnya adalah Provisioning sampai cluster siap digunakan, lalu statusnya berubah menjadi Running.

gcloud

Tetapkan variabel lingkungan, lalu jalankan perintah gcloud dataproc clusters gke create secara lokal atau di Cloud Shell untuk membuat Dataproc di cluster GKE.

  1. Menetapkan variabel lingkungan:

    DP_CLUSTER=Dataproc on GKE  cluster-name \
      REGION=region \
      GKE_CLUSTER=GKE cluster-name \
      BUCKET=Cloud Storage bucket-name \
      DP_POOLNAME=node pool-name
      PHS_CLUSTER=Dataproc PHS server name
    
    Catatan:

    • DP_CLUSTER: Menetapkan nama cluster virtual Dataproc, yang harus dimulai dengan huruf kecil, diikuti dengan maksimal 54 huruf kecil, angka, atau tanda hubung. Kolom ini dan tidak boleh diakhiri dengan tanda hubung.
    • REGION: region harus sama dengan region tempat cluster GKE berada.
    • GKE_CLUSTER: Nama cluster GKE yang ada.
    • BUCKET: (Opsional) Anda dapat menentukan nama bucket Cloud Storage, yang akan digunakan Dataproc untuk menata artefak. Jika Anda tidak menentukan bucket, Dataproc di GKE akan membuat bucket staging.
    • DP_POOLNAME: Nama kumpulan node yang akan dibuat di cluster GKE.
    • PHS_CLUSTER: (Opsional) Dataproc PHS Server yang akan digunakan untuk melihat histori tugas Spark di Dataproc yang aktif dan dihapus di cluster GKE. Cluster PHS harus berada di region yang sama dengan cluster virtual Dataproc di GKE.
  2. Jalankan perintah:

    gcloud dataproc clusters gke create ${DP_CLUSTER} \
        --region=${REGION} \
        --gke-cluster=${GKE_CLUSTER} \
        --spark-engine-version=latest \
        --staging-bucket=${BUCKET} \
        --pools="name=${DP_POOLNAME},roles=default" \
        --setup-workload-identity \
        --history-server-cluster=${PHS_CLUSTER}
    
    Catatan:

    • --spark-engine-version: Versi gambar Spark yang digunakan pada cluster Dataproc. Anda dapat menggunakan ID, seperti 3, 3.1, atau latest, atau menentukan versi subminor lengkap, seperti 3.1-dataproc-5.
    • --staging-bucket: Hapus flag ini agar Dataproc di GKE membuat bucket staging.
    • --pools: Flag ini digunakan untuk menentukan kumpulan node baru atau yang sudah ada yang akan dibuat atau digunakan Dataproc untuk menjalankan beban kerja. Cantumkan Dataproc on GKE node pool settings yang dipisahkan dengan koma, misalnya:
      --pools=name=dp-default,roles=default,machineType=e2-standard-4,min=0,max=10
      
      Anda harus menentukan kumpulan node name dan role. Pengaturan kumpulan node lainnya bersifat opsional. Anda dapat menggunakan beberapa flag --pools untuk menentukan beberapa kumpulan node. Setidaknya satu kumpulan node harus memiliki peran default. Semua node pool harus memiliki lokasi yang sama.
    • --setup-workload-identity: Tanda ini mengaktifkan binding Workload Identity. Binding ini memungkinkan akun layanan Kubernetes (KSA) untuk bertindak sebagai Akun Layanan VM Dataproc (identitas Paket Data) default untuk cluster virtual.

REST

Selesaikan virtualClusterConfig sebagai bagian dari permintaan cluster.create Dataproc API.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT: Project ID Google Cloud
  • REGION: Region cluster virtual Dataproc (region yang sama dengan region cluster GKE yang ada)
  • DP_CLUSTER: Nama cluster Dataproc
  • GKE_CLUSTER: Nama cluster GKE
  • NODE_POOL: Nama kumpulan node
  • PHS_CLUSTER: Nama cluster Server Histori Persisten (PHS)
  • BUCKET: (Opsional) Nama bucket staging. Biarkan kosong agar Dataproc di GKE membuat bucket staging.

Metode HTTP dan URL:

POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

Meminta isi JSON:

{
  "clusterName":"DP_CLUSTER",
  "projectId":"PROJECT",
  "virtualClusterConfig":{
    "auxiliaryServicesConfig":{
      "sparkHistoryServerConfig":{
        "dataprocCluster":"projects/PROJECT/regions/REGION/clusters/PHS_CLUSTER"
      }
    },
    "kubernetesClusterConfig":{
      "gkeClusterConfig":{
        "gkeClusterTarget":"projects/PROJECT/locations/REGION/clusters/GKE_CLUSTER",
        "nodePoolTarget":[
          {
"nodePool":"projects/PROJECT/locations/REGION/clusters/GKE_CLUSTER/nodePools/NODE_POOL",
            "roles":[
              "DEFAULT"
            ]
          }
        ]
      },
      "kubernetesSoftwareConfig":{
        "componentVersion":{
          "SPARK":"latest"
        }
      }
    },
    "stagingBucket":"BUCKET"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

{
  "projectId":"PROJECT",
  "clusterName":"DP_CLUSTER",
  "status":{
    "state":"RUNNING",
    "stateStartTime":"2022-04-01T19:16:39.865716Z"
  },
  "clusterUuid":"98060b77-...",
  "statusHistory":[
    {
      "state":"CREATING",
      "stateStartTime":"2022-04-01T19:14:27.340544Z"
    }
  ],
  "labels":{
    "goog-dataproc-cluster-name":"DP_CLUSTER",
    "goog-dataproc-cluster-uuid":"98060b77-...",
    "goog-dataproc-location":"REGION",
    "goog-dataproc-environment":"prod"
  },
  "virtualClusterConfig":{
    "stagingBucket":"BUCKET",
    "kubernetesClusterConfig":{
      "kubernetesNamespace":"dp-cluster",
      "gkeClusterConfig":{
"gkeClusterTarget":"projects/PROJECT/locations/REGION/clusters/GKE_CLUSTER",
        "nodePoolTarget":[
          {
"nodePool":"projects/PROJECT/locations/REGION/clusters/GKE_CLUSTER/nodePools/NODE_POOL",
            "roles":[
              "DEFAULT"
            ]
          }
        ]
      },
      "kubernetesSoftwareConfig":{
        "componentVersion":{
          "SPARK":"3.1-..."
        },
        "properties":{
          "dpgke:dpgke.unstable.outputOnly.endpoints.sparkHistoryServer":"https://...",
          "spark:spark.eventLog.dir":"gs://BUCKET/.../spark-job-history",
          "spark:spark.eventLog.enabled":"true"
        }
      }
    },
    "auxiliaryServicesConfig":{
      "sparkHistoryServerConfig":{
        "dataprocCluster":"projects/PROJECT/regions/REGION/clusters/PHS_CLUSTER"
      }
    }
  }

Mengirim tugas Spark

Setelah Dataproc di cluster virtual GKE berjalan, kirimkan tugas Spark menggunakan Konsol Google Cloud, gcloud CLI, atau jobs.submit API Dataproc (dengan menggunakan permintaan HTTP langsung atau Library Klien Cloud).

Contoh tugas Spark gcloud CLI:

gcloud dataproc jobs submit spark \
    --region=${REGION} \
    --cluster=${DP_CLUSTER} \
    --class=org.apache.spark.examples.SparkPi \
    --jars=local:///usr/lib/spark/examples/jars/spark-examples.jar \
    -- 1000

Contoh tugas PySpark gcloud CLI:

gcloud dataproc jobs submit pyspark \
    --region=${REGION} \
    --cluster=${DP_CLUSTER} \
    local:///usr/lib/spark/examples/src/main/python/pi.py \
    -- 10

Contoh tugas SparkR gcloud CLI:

gcloud dataproc jobs submit spark-r \
    --region=${REGION} \
    --cluster=${DP_CLUSTER} \
    local:///usr/lib/spark/examples/src/main/r/dataframe.R

Pembersihan