Menjalankan tugas Spark di Dataproc di Google Kubernetes Engine

Sebelum memulai

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

Buat cluster virtual Dataproc di 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 worker Dataproc 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.

  • Buat beberapa cluster virtual. Anda dapat membuat dan menjalankan beberapa cluster virtual di cluster GKE untuk mendapatkan pemanfaatan resource yang lebih baik dengan membagikan node pool di seluruh cluster virtual.

    • Setiap cluster virtual:
      • dibuat dengan properti terpisah, termasuk versi mesin Spark dan workload identity
      • 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 Set up cluster:

    1. Di kolom Nama Cluster, 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 Configure Node pools, lalu di panel Node pools, klik Add a pool.

    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 Selesai.
    2. Untuk membuat node pool Dataproc on GKE baru:
      1. Klik Buat node pool baru.
      2. Masukkan nilai kumpulan node berikut:
    3. Klik Tambahkan pool untuk menambahkan lebih banyak node pool. 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 dalam melihat histori tugas Spark, di cluster Dataproc on GKE yang aktif dan dihapus, klik Sesuaikan cluster. Kemudian, di kolom History server cluster, telusuri 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 Anda akan muncul dalam daftar di halaman Clusters. Statusnya adalah Provisioning hingga cluster siap digunakan, dan kemudian 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: Tetapkan 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 di GKE yang aktif dan dihapus. 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 penyiapan.
    • --pools: Flag ini digunakan untuk menentukan kumpulan node baru atau yang sudah ada yang akan dibuat atau digunakan Dataproc untuk menjalankan beban kerja. Daftar setelan node pool Dataproc on GKE, dipisahkan dengan koma, misalnya:
      --pools=name=dp-default,roles=default,machineType=e2-standard-4,min=0,max=10
      
      Anda harus menentukan name dan role node pool. Setelan kumpulan node lainnya bersifat opsional. Anda dapat menggunakan beberapa tanda --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 pengikatan Workload Identity. Binding ini memungkinkan akun layanan Kubernetes (KSA) bertindak sebagai Akun Layanan VM Dataproc (identitas Data Plane) default cluster virtual.

REST

Lengkapi 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 Persistent History Server (PHS)
  • BUCKET: (Opsional) Nama bucket penyiapan. 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"
      }
    }
  }

Mengirimkan tugas Spark

Setelah cluster virtual Dataproc di GKE berjalan, kirimkan tugas Spark menggunakan konsol Google Cloud , Google Cloud gcloud CLI, atau API Dataproc jobs.submit (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