Menjalankan tugas Spark di Dataproc di Google Kubernetes Engine

Sebelum memulai

  1. Anda harus telah 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

Cluster virtual Dataproc di GKE dibuat sebagai platform deployment untuk komponen Dataproc. Ini adalah resource virtual, dan tidak seperti cluster Dataproc di Compute Engine, tidak menyertakan VM master dan pekerja Dataproc yang terpisah.

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

  • Tugas Dataproc di GKE dijalankan sebagai pod di node pool ini. Node pool dan penjadwalan pod di node pool dikelola oleh GKE.

  • Membuat beberapa cluster virtual. Anda dapat membuat dan menjalankan beberapa cluster virtual di cluster GKE untuk mendapatkan penggunaan resource yang lebih baik dengan berbagi node pool di seluruh cluster virtual.

    • Setiap cluster virtual:
      • dibuat dengan properti terpisah, termasuk versi mesin Spark dan identitas beban kerja
      • diisolasi dalam namespace GKE terpisah di cluster GKE

Konsol

  1. Di konsol Google Cloud, buka halaman Cluster 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.
    2. Dalam daftar Region, pilih region untuk cluster virtual Dataproc di GKE. Region ini harus sama dengan region tempat cluster GKE yang ada berada (yang Anda pilih di item berikutnya).
    3. Di kolom Kubernetes Cluster, 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 ada. Dataproc di GKE akan menyiapkan artefak di bucket. Abaikan kolom ini agar Dataproc di GKE membuat bucket staging.
  5. Di panel kiri, klik Konfigurasi Node pool, lalu di panel Node pool, klik Tambahkan kumpulan.

    1. Untuk menggunakan kembali node pool Dataproc di GKE yang ada:
      1. Klik Gunakan kembali node pool yang ada.
      2. Masukkan nama kumpulan node yang ada dan pilih Peran-nya. Setidaknya satu node pool harus memiliki peran DEFAULT.
      3. Klik Done.
    2. Untuk membuat node pool Dataproc on GKE baru:
      1. Klik Buat node pool baru.
      2. Masukkan nilai kumpulan node berikut:
    3. Klik Tambahkan kumpulan untuk menambahkan kumpulan node lainnya. Semua kumpulan node harus memiliki lokasi. Anda dapat menambahkan total empat node pool.
  6. (Opsional) Jika Anda telah menyiapkan Dataproc Persistent History Server (PHS) untuk digunakan guna melihat histori tugas Spark, di cluster Dataproc aktif dan dihapus di GKE, klik Sesuaikan cluster. Kemudian, di kolom History server cluster, jelajahi dan pilih cluster PHS Anda. Cluster PHS harus berada di region yang sama dengan cluster virtual Dataproc di GKE.

  7. Klik Create untuk membuat cluster Dataproc. Cluster Dataproc di GKE akan muncul dalam daftar di halaman Clusters. Statusnya adalah Provisioning hingga 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 cluster Dataproc di 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. Nama ini 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 menyiapkan artefak. Jika Anda tidak menentukan bucket, Dataproc di GKE akan membuat bucket staging.
    • DP_POOLNAME: Nama node pool yang akan dibuat di cluster GKE.
    • PHS_CLUSTER: (Opsional) Server PHS Dataproc yang akan digunakan untuk melihat histori tugas Spark di cluster Dataproc aktif dan dihapus di 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 image Spark yang digunakan di cluster Dataproc. Anda dapat menggunakan ID, seperti 3, 3.1, atau latest, atau Anda dapat menentukan versi subminor lengkap, seperti 3.1-dataproc-5.
    • --staging-bucket: Hapus tanda 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 setelan node pool Dataproc di GKE, yang dipisahkan koma, misalnya:
      --pools=name=dp-default,roles=default,machineType=e2-standard-4,min=0,max=10
      
      Anda harus menentukan node pool name dan role. Setelan kumpulan node lainnya bersifat opsional. Anda dapat menggunakan beberapa flag --pools untuk menentukan beberapa node pool. Setidaknya satu kumpulan node harus memiliki peran default. Semua kumpulan node harus memiliki lokasi yang sama.
    • --setup-workload-identity: Flag ini mengaktifkan binding Workload Identity. Dengan binding ini, akun layanan Kubernetes (KSA) dapat bertindak sebagai Akun Layanan VM Dataproc (Identitas Data Plane) default dari 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 node pool
  • PHS_CLUSTER: Nama cluster Server Histori Permanen (PHS)
  • BUCKET: (Opsional) Nama bucket staging. Biarkan kolom ini 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 cluster virtual Dataproc di GKE berjalan, kirim tugas Spark menggunakan konsol Google Cloud, gcloud CLI, atau Dataproc jobs.submit API (dengan menggunakan permintaan HTTP langsung atau Cloud Client Libraries).

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