全部产品
Search
文档中心

Container Service for Kubernetes:Jalankan pekerjaan Spark menggunakan Spark Operator

更新时间:Feb 26, 2026

Apache Spark adalah mesin komputasi andal untuk pemrosesan data skala besar yang banyak digunakan dalam skenario analitik data dan pembelajaran mesin. Spark Operator mengotomatiskan penerapan pekerjaan Spark serta manajemen siklus hidupnya di kluster Kubernetes. Panduan ini menjelaskan cara menggunakan Spark Operator untuk menjalankan dan mengelola beban kerja pemrosesan data skala besar secara efisien di kluster ACK.

Prasyarat

Apa itu Spark Operator?

Spark Operator adalah solusi native Kubernetes yang dirancang untuk mengorkestrasi beban kerja Apache Spark di lingkungan terkontainerisasi. Solusi ini menyederhanakan penerapan dan manajemen aplikasi Spark dengan memanfaatkan CustomResourceDefinitions (CRDs) Kubernetes seperti SparkApplication dan ScheduledSparkApplication. Berdasarkan proyek komunitas kubeflow/spark-operator, ACK menyediakan komponen yang ditingkatkan, yaitu ack-spark-operator, untuk manajemen beban kerja Spark tingkat enterprise. Pelajari selengkapnya di Spark Operator | Kubeflow.

Manfaat utama

  • Operasi yang disederhanakan: Konfigurasi pekerjaan deklaratif mengotomatiskan penerapan Spark dan manajemen siklus hidupnya di Kubernetes.

  • Arsitektur multi-penyewa: Manfaatkan namespace Kubernetes dan kuota sumber daya untuk isolasi sumber daya yang aman. Gunakan node selector untuk mengalokasikan sumber daya komputasi khusus bagi beban kerja Spark.

  • Penskalaan dinamis: Integrasikan dengan infrastruktur elastis seperti Elastic Container Instance (ECI) atau pool node elastis untuk secara otomatis menskalakan sumber daya saat permintaan puncak, sehingga mengoptimalkan biaya dan performa.

Kasus penggunaan umum

  • Analistik data: Memungkinkan ilmuwan data melakukan analisis interaktif dan pra-pemrosesan data menggunakan kemampuan komputasi terdistribusi Spark.

  • Pemrosesan batch: Jalankan pipeline ETL terjadwal dan transformasi data skala besar melalui pekerjaan batch otomatis.

  • Pemrosesan aliran: Proses aliran data kontinu secara waktu nyata menggunakan Spark Streaming untuk mendapatkan wawasan hampir instan dan alur kerja berbasis event.

Ikhtisar alur kerja

Panduan ini memandu Anda melalui seluruh alur kerja penerapan dan pengelolaan aplikasi Spark menggunakan Spark Operator di kluster ACK.

  1. Terapkan Spark Operator: Instal komponen ack-spark-operator di kluster ACK Anda untuk mengaktifkan orkestrasi pekerjaan Spark.

  2. Buat aplikasi Spark: Definisikan dan kirimkan konfigurasi pekerjaan Spark untuk menjalankan beban kerja pemrosesan data Anda.

  3. Pantau eksekusi: Lacak progres pekerjaan, periksa status Pod, serta tinjau log eksekusi dan metrik secara detail.

  4. Akses antarmuka web: Gunakan UI web Spark untuk pemantauan interaktif dan visualisasi performa.

  5. Ubah konfigurasi: Sesuaikan parameter pekerjaan dan perbarui konfigurasi secara dinamis tanpa mengganggu operasi.

  6. Bersihkan sumber daya: Hapus pekerjaan Spark yang telah selesai atau tidak relevan untuk mengoptimalkan pemanfaatan sumber daya kluster dan mengendalikan biaya.

Langkah 1: Terapkan Spark Operator

  1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, pilih Marketplace > Marketplace.

  2. Navigasi ke halaman App Marketplace dan pilih tab App Catalog. Cari dan pilih ack-spark-operator.

  3. Di halaman ack-spark-operator, klik One-Click Deploy.

  4. Di panel Create, pilih kluster dan namespace target Anda, lalu klik Next.

  5. Di halaman Parameter Settings, konfigurasikan parameter penerapan dan klik OK.

    Tabel berikut menjelaskan parameter konfigurasi utama. Untuk dokumentasi lengkap semua parameter, lihat bagian Configuration Items di halaman ack-spark-operator.

    Parameter

    Description

    Example

    controller.replicas

    Jumlah replika controller untuk ketersediaan tinggi.

    1 (default)

    webhook.replicas

    Jumlah replika webhook untuk kontrol admission.

    1 (default)

    spark.jobNamespaces

    Daftar namespace yang diizinkan untuk menjalankan pekerjaan Spark. String kosong ("") mengizinkan semua namespace. Pisahkan beberapa namespace dengan koma (,).

    • ["default"] (default)

    • [""] (semua namespace)

    • ["ns1","ns2","ns3"] (beberapa namespace)

    spark.serviceAccount.name

    Untuk setiap namespace dalam spark.jobNamespaces, ServiceAccount bernama spark-operator-spark dan sumber daya RBAC terkait akan diprovisikan secara otomatis. Anda dapat menentukan nama ServiceAccount kustom, yang harus dirujuk saat mengirimkan pekerjaan Spark.

    spark-operator-spark (default)

Langkah 2: Buat Aplikasi Spark

Definisikan manifes SparkApplication untuk menerapkan beban kerja pemrosesan data Anda.

  1. Buat file manifes SparkApplication bernama spark-pi.yaml dengan konfigurasi berikut:

    apiVersion: sparkoperator.k8s.io/v1beta2
    kind: SparkApplication
    metadata:
      name: spark-pi
      namespace: default     # Pastikan namespace tercantum dalam spark.jobNamespaces
    spec:
      type: Scala
      mode: cluster
      image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/spark:3.5.4
      imagePullPolicy: IfNotPresent
      mainClass: org.apache.spark.examples.SparkPi
      mainApplicationFile: local:///opt/spark/examples/jars/spark-examples_2.12-3.5.4.jar
      arguments:
      - "1000"
      sparkVersion: 3.5.4
      driver:
        cores: 1
        coreLimit: 1200m
        memory: 512m
        serviceAccount: spark-operator-spark   # Gunakan nama kustom jika dikonfigurasi
      executor:
        instances: 1
        cores: 1
        coreLimit: 1200m
        memory: 512m
      restartPolicy:
        type: Never
  2. Terapkan aplikasi Spark menggunakan kubectl:

    kubectl apply -f spark-pi.yaml

    Output yang diharapkan:

    sparkapplication.sparkoperator.k8s.io/spark-pi created

Langkah 3: Pantau eksekusi

Gunakan perintah-perintah berikut untuk memantau status aplikasi Spark, detail Pod, dan log eksekusi.

  1. Periksa status aplikasi:

    kubectl get sparkapplication spark-pi

    Output yang diharapkan:

    NAME       STATUS      ATTEMPTS   START                  FINISH       AGE
    spark-pi   SUBMITTED   1          2024-06-04T03:17:11Z   <no value>   15s
  2. Lihat status Pod menggunakan label aplikasi:

    kubectl get pod -l sparkoperator.k8s.io/app-name=spark-pi

    Contoh output:

    NAME                               READY   STATUS    RESTARTS   AGE
    spark-pi-7272428fc8f5f392-exec-1   1/1     Running   0          13s
    spark-pi-7272428fc8f5f392-exec-2   1/1     Running   0          13s
    spark-pi-driver                    1/1     Running   0          49s
    Catatan

    Pod executor secara otomatis dibersihkan ketika pekerjaan selesai.

  3. Dapatkan informasi aplikasi secara detail:

    kubectl describe sparkapplication spark-pi

    Detail contoh output

    Output bervariasi tergantung pada status eksekusi pekerjaan. Bagian utama meliputi:

    • Metadata: Waktu pembuatan, versi resource, dan pengidentifikasi unik

    • Spec: Konfigurasi pekerjaan termasuk image, sumber daya, dan parameter eksekusi

    • Status: Status saat ini, informasi driver, status executor, dan detail waktu

    • Events: Event siklus hidup dari pengiriman hingga penyelesaian

    Lihat bagian yang dapat diperluas di dokumentasi asli untuk contoh output lengkap.

  4. Tinjau log driver terbaru:

    kubectl logs --tail=20 spark-pi-driver

    Log biasanya menampilkan:

    • Progres penjadwalan dan eksekusi tugas

    • Statistik dan hasil penyelesaian pekerjaan

    • Prosedur pembersihan dan shutdown sumber daya

    • Operasi pembersihan direktori sementara

    Lihat dokumentasi asli untuk contoh log lengkap.

Langkah 4: Akses antarmuka web

Aplikasi Spark menyediakan UI web untuk pemantauan waktu nyata. Gunakan kubectl port-forward untuk mengakses UI secara lokal. UI web hanya tersedia selama Pod driver sedang berjalan dan menjadi tidak dapat diakses setelah pekerjaan selesai.

Secara default, penerapan ack-spark-operator mengaktifkan controller.uiService.enable=true, yang secara otomatis membuat Service untuk akses UI. Jika dinonaktifkan saat penerapan, Anda dapat mengakses UI dengan meneruskan port Pod driver secara langsung.

Penting

Penerusan port hanya ditujukan untuk lingkungan pengembangan dan pengujian. Penerapan produksi harus menggunakan mekanisme ingress yang aman karena pertimbangan keamanan.

  1. Buat penerusan port menggunakan Service atau Pod:

    • Teruskan port Service:

      kubectl port-forward services/spark-pi-ui-svc 4040
    • Teruskan port Pod:

      kubectl port-forward pods/spark-pi-driver 4040

      Output penerusan yang berhasil:

      Forwarding from 127.0.0.1:4040 -> 4040
      Forwarding from [::1]:4040 -> 4040
  2. Buka browser Anda dan arahkan ke http://127.0.0.1:4040 untuk mengakses UI web Spark.

(Opsional) Langkah 5: Ubah Konfigurasi

Perbarui aplikasi Spark Anda dengan mengubah parameter pada file manifes.

  1. Edit manifes spark-pi.yaml. Misalnya, tingkatkan presisi dengan mengubah arguments menjadi 10000 dan tingkatkan kapasitas komputasi dengan mengatur jumlah instance executor menjadi 2:

    apiVersion: sparkoperator.k8s.io/v1beta2
    kind: SparkApplication
    metadata:
      name: spark-pi
    spec:
      type: Scala
      mode: cluster
      image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/spark:3.5.4
      imagePullPolicy: IfNotPresent
      mainClass: org.apache.spark.examples.SparkPi
      mainApplicationFile: local:///opt/spark/examples/jars/spark-examples_2.12-3.5.4.jar
      arguments:
      - "10000"
      sparkVersion: 3.5.4
      driver:
        cores: 1
        coreLimit: 1200m
        memory: 512m
        serviceAccount: spark
      executor:
        instances: 2
        cores: 1
        coreLimit: 1200m
        memory: 512m
      restartPolicy:
        type: Never
  2. Terapkan konfigurasi yang diperbarui:

    kubectl apply -f spark-pi.yaml
  3. Verifikasi status aplikasi:

    kubectl get sparkapplication spark-pi

    Aplikasi akan dimulai ulang dengan parameter baru:

    NAME       STATUS    ATTEMPTS   START                  FINISH       AGE
    spark-pi   RUNNING   1          2024-06-04T03:37:34Z   <no value>   20m

(Opsional) Langkah 6: Bersihkan sumber daya

Hapus aplikasi Spark dan sumber daya terkaitnya jika sudah tidak diperlukan.

Hapus menggunakan file manifes:

kubectl delete -f spark-pi.yaml

Atau hapus langsung berdasarkan nama:

kubectl delete sparkapplication spark-pi

Sumber daya tambahan