Kontainer Dataproc untuk Spark

Google Distributed Cloud (GDC) dengan air gap menyediakan Dataproc Container untuk Spark. Ini adalah lingkungan Apache Spark untuk pemrosesan data. Untuk mengetahui informasi selengkapnya tentang Apache Spark, lihat https://spark.apache.org/. Gunakan container Dataproc Container for Spark untuk menjalankan aplikasi Spark baru atau yang sudah ada dalam cluster Kubernetes Distributed Cloud dengan perubahan minimal. Jika Anda sudah terbiasa dengan alat Spark, Anda dapat terus menggunakannya.

Tentukan aplikasi Spark Anda dalam file YAML, dan Distributed Cloud akan mengalokasikan resource untuk Anda. Container Dataproc Container for Spark dimulai dalam hitungan detik. Eksekutor Spark akan di-scale up atau dimatikan sesuai kebutuhan Anda.

Konfigurasi container dari Dataproc Container for Spark di Distributed Cloud untuk menggunakan hardware khusus, seperti node hardware khusus atau GPU.

Men-deploy layanan Dataproc Container for Spark

Administrator Platform (PA) harus menginstal layanan Marketplace untuk Anda sebelum Anda dapat menggunakan layanan tersebut. Hubungi PA Anda jika Anda memerlukan Dataproc Container for Spark. Lihat Menginstal paket software GDC Marketplace untuk mengetahui informasi selengkapnya.

Prasyarat untuk menjalankan aplikasi Spark

Anda harus memiliki akun layanan di cluster pengguna untuk menggunakan layanan Dataproc Container for Spark. Dataproc Container for Spark membuat pod driver Spark untuk menjalankan aplikasi Spark. Pod driver Spark memerlukan akun layanan Kubernetes di namespace pod dengan izin untuk melakukan tindakan berikut:

  • Membuat, mendapatkan, mencantumkan, dan menghapus pod eksekutor.
  • Buat layanan headless Kubernetes untuk driver.

Sebelum menjalankan aplikasi Spark, selesaikan langkah-langkah berikut untuk memastikan Anda memiliki akun layanan dengan izin sebelumnya di namespace foo:

  1. Buat akun layanan untuk pod driver Spark yang akan digunakan di namespace foo:

    kubectl create serviceaccount spark --kubeconfig AO_USER_KUBECONFIG --namespace=foo
    
  2. Buat peran untuk memberikan izin guna membuat, mendapatkan, mencantumkan, dan menghapus pod eksekutor, serta buat layanan headless Kubernetes untuk driver di namespace foo:

    kubectl create role spark-driver --kubeconfig AO_USER_KUBECONFIG --verb=* \
    --resource=pods,services,configmaps,persistentvolumeclaims \
    --namespace=foo
    
  3. Buat binding peran untuk memberikan akses peran akun layanan di namespace foo:

    kubectl create --kubeconfig AO_USER_KUBECONFIG \
    rolebinding spark-spark-driver \
    --role=spark-driver --serviceaccount=foo:spark \
    --namespace=foo
    

Menjalankan aplikasi Spark 3 contoh

Membuat aplikasi Spark dalam container menyederhanakan jalannya aplikasi big data di infrastruktur Anda menggunakan Distributed Cloud. Sebagai Operator Aplikasi (AO), jalankan aplikasi Spark yang ditentukan dalam objek GKE dari jenis resource kustom SparkApplication.

Untuk menjalankan dan menggunakan aplikasi Apache Spark 3 di Distributed Cloud, selesaikan langkah-langkah berikut:

  1. Periksa image spark-operator di project Anda untuk menemukan $DATAPROC_IMAGE yang akan dirujuk di aplikasi Spark Anda:

    export DATAPROC_IMAGE=$(kubectl get pod --kubeconfig AO_USER_KUBECONFIG \
    --selector app.kubernetes.io/name=spark-operator -n foo \
    -o=jsonpath='{.items[*].spec.containers[0].image}' \
    | sed 's/spark-operator/dataproc/')
    

    Contoh:

    export DATAPROC_IMAGE=10.200.8.2:10443/dataproc-service/private-cloud-devel/dataproc:3.1-dataproc-17
    
  2. Tulis spesifikasi SparkApplication dan simpan dalam file YAML. Untuk mengetahui informasi selengkapnya, lihat bagian Menulis spesifikasi aplikasi Spark.

  3. Kirimkan, jalankan, dan pantau aplikasi Spark Anda seperti yang dikonfigurasi dalam spesifikasi SparkApplication di cluster GKE dengan perintah kubectl. Untuk mengetahui informasi selengkapnya, lihat bagian Contoh aplikasi.

  4. Tinjau status permohonan.

  5. Opsional: Tinjau log aplikasi. Untuk mengetahui informasi selengkapnya, lihat bagian Melihat log aplikasi Spark 3.

  6. Gunakan aplikasi Spark untuk mengumpulkan dan menampilkan status driver dan eksekutor kepada pengguna.

Menulis spesifikasi aplikasi Spark

Spesifikasi SparkApplication mencakup komponen berikut:

  • Kolom apiVersion.
  • Kolom kind.
  • Kolom metadata.
  • Bagian spec.

Untuk mengetahui informasi selengkapnya, lihat Menulis Spesifikasi SparkApplication di GitHub: https://github.com/kubeflow/spark-operator/blob/gh-pages/docs/user-guide.md#writing-a-sparkapplication-spec

Contoh aplikasi

Bagian ini menyertakan contoh berikut dengan spesifikasi SparkApplication yang sesuai untuk menjalankan aplikasi Spark:

Spark Pi

Bagian ini berisi contoh untuk menjalankan aplikasi Spark Pi yang membutuhkan komputasi intensif yang memperkirakan 𝛑 (pi) dengan melempar anak panah ke dalam lingkaran.

Ikuti langkah-langkah berikut untuk menjalankan Spark Pi:

  1. Terapkan contoh spesifikasi SparkApplication berikut di cluster pengguna:

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: spark-pi
      namespace: foo
    spec:
      type: Python
      pythonVersion: "3"
      mode: cluster
      image: "${DATAPROC_IMAGE?}"
      imagePullPolicy: IfNotPresent
      mainApplicationFile: "local:///usr/lib/spark/examples/src/main/python/pi.py"
      sparkVersion: "3.1.3"
      restartPolicy:
        type: Never
      driver:
        cores: 1
        coreLimit: "1000m"
        memory: "512m"
        serviceAccount: spark
      executor:
        cores: 1
        instances: 1
        memory: "512m"
    
  2. Pastikan contoh spesifikasi SparkApplication berjalan dan selesai dalam 1-2 menit menggunakan perintah berikut:

    kubectl --kubeconfig AO_USER_KUBECONFIG get SparkApplication spark-pi -n foo
    
  3. Lihat Log Driver untuk melihat hasilnya:

    kubectl --kubeconfig AO_USER_KUBECONFIG logs spark-pi-driver -n foo | grep "Pi is roughly"
    

    Outputnya mirip dengan berikut ini:

    Pi is roughly 3.1407357036785184
    

Untuk informasi selengkapnya, lihat referensi berikut:

  • Untuk kode aplikasi, lihat artikel Estimasi Pi dari dokumentasi Apache Spark: https://spark.apache.org/examples.html.
  • Untuk contoh file YAML Spark Pi, lihat Menulis spesifikasi aplikasi Spark.

Spark SQL

Lakukan langkah-langkah berikut untuk menjalankan Spark SQL:

  1. Untuk menjalankan aplikasi Spark SQL yang memilih nilai 1, gunakan kueri berikut:

    select 1;
    
  2. Terapkan contoh spesifikasi SparkApplication berikut di cluster pengguna:

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: pyspark-sql-arrow
      namespace: foo
    spec:
      type: Python
      mode: cluster
      image: "${DATAPROC_IMAGE?}"
      imagePullPolicy: IfNotPresent
      mainApplicationFile: "local:///usr/lib/spark/examples/src/main/python/sql/arrow.py"
      sparkVersion: "3.1.3"
      restartPolicy:
        type: Never
      driver:
        cores: 1
        coreLimit: "1000m"
        memory: "512m"
        serviceAccount: spark
      executor:
        cores: 1
        instances: 1
        memory: "512m"
    
  3. Verifikasi bahwa contoh spesifikasi SparkApplication berjalan dan selesai dalam waktu kurang dari satu menit menggunakan perintah berikut:

    kubectl --kubeconfig AO_USER_KUBECONFIG get SparkApplication pyspark-sql-arrow -n foo
    

Spark MLlib

Ikuti langkah-langkah berikut untuk menjalankan Spark MLlib:

  1. Gunakan contoh Scala berikut untuk menjalankan instance Spark MLlib yang melakukan analisis statistik dan mencetak hasil ke konsol:

    import org.apache.spark.ml.linalg.{Matrix, Vectors}
    import org.apache.spark.ml.stat.Correlation
    import org.apache.spark.sql.Row
    
    val data = Seq(
      Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))),
      Vectors.dense(4.0, 5.0, 0.0, 3.0),
      Vectors.dense(6.0, 7.0, 0.0, 8.0),
      Vectors.sparse(4, Seq((0, 9.0), (3, 1.0)))
    )
    
    val df = data.map(Tuple1.apply).toDF("features")
    val Row(coeff1: Matrix) = Correlation.corr(df, "features").head
    println(s"Pearson correlation matrix:\n $coeff1")
    
    val Row(coeff2: Matrix) = Correlation.corr(df, "features", "spearman").head
    println(s"Spearman correlation matrix:\n $coeff2")
    
  2. Terapkan contoh spesifikasi SparkApplication berikut di cluster pengguna:

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: spark-ml
      namespace: foo
    spec:
      type: Scala
      mode: cluster
      image: "${DATAPROC_IMAGE?}"
      imagePullPolicy: IfNotPresent
      mainClass: org.apache.spark.examples.ml.SummarizerExample
      mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples_2.12-3.1.3.jar"
      sparkVersion: "3.1.3"
      restartPolicy:
        type: Never
      driver:
        cores: 1
        coreLimit: "1000m"
        memory: "512m"
        serviceAccount: spark
      executor:
        cores: 1
        instances: 1
        memory: "512m"
    
  3. Verifikasi bahwa contoh spesifikasi SparkApplication berjalan dan selesai dalam waktu kurang dari satu menit menggunakan perintah berikut:

    kubectl --kubeconfig AO_USER_KUBECONFIG get SparkApplication spark-ml -n foo
    

SparkR

Lakukan langkah-langkah berikut untuk menjalankan SparkR:

  1. Gunakan contoh kode berikut untuk menjalankan instance SparkR yang memuat set data yang dibundel dan mencetak baris pertama:

    library(SparkR)
    sparkR.session()
    df <- as.DataFrame(faithful)
    head(df)
    
  2. Terapkan contoh spesifikasi SparkApplication berikut di cluster pengguna:

    apiVersion: "sparkoperator.k8s.io/v1beta2"
    kind: SparkApplication
    metadata:
      name: spark-r-dataframe
      namespace: foo
    spec:
      type: R
      mode: cluster
      image: "${DATAPROC_IMAGE?}"
      imagePullPolicy: Always
      mainApplicationFile: "local:///usr/lib/spark/examples/src/main/r/dataframe.R"
      sparkVersion: "3.1.3"
      restartPolicy:
        type: Never
      driver:
        cores: 1
        coreLimit: "1000m"
        memory: "512m"
        serviceAccount: spark
      executor:
        cores: 1
        instances: 1
        memory: "512m"
    
  3. Verifikasi bahwa contoh spesifikasi SparkApplication berjalan dan selesai dalam waktu kurang dari satu menit menggunakan perintah berikut:

    kubectl --kubeconfig AO_USER_KUBECONFIG get SparkApplication spark-r-dataframe -n foo
    

Melihat log aplikasi Spark 3

Spark memiliki dua jenis log berikut yang dapat Anda visualisasikan:

Gunakan terminal untuk menjalankan perintah.

Log pengemudi

Lakukan langkah-langkah berikut untuk melihat log driver aplikasi Spark Anda:

  1. Menemukan pod driver Spark:

    kubectl -n spark get pods
    
  2. Buka log dari pod driver Spark:

    kubectl -n spark logs DRIVER_POD
    

    Ganti DRIVER_POD dengan nama pod driver Spark yang Anda temukan di langkah sebelumnya.

Log aktivitas

Anda dapat menemukan log peristiwa di jalur yang ditentukan dalam file YAML spesifikasi SparkApplication.

Ikuti langkah-langkah berikut untuk melihat log peristiwa aplikasi Spark Anda:

  1. Buka file YAML spesifikasi SparkApplication.
  2. Cari kolom spec dalam file.
  3. Temukan kolom sparkConf yang berada di dalam kolom spec.
  4. Temukan nilai kolom spark.eventLog.dir yang berada di bagian sparkConf.
  5. Buka jalur untuk melihat log peristiwa.

Untuk contoh file YAML spesifikasi SparkApplication, lihat Menulis spesifikasi aplikasi Spark.

Hubungi Account Manager Anda untuk mendapatkan informasi selengkapnya.