All Products
Search
Document Center

Container Service for Kubernetes:Lihat pekerjaan Spark dengan Spark History Server

Last Updated:Jun 18, 2026

Pertahankan log pekerjaan Spark dan lihat detail pekerjaan yang telah selesai—seperti stages, tasks, dan penggunaan resource—melalui Spark History Server.

Prasyarat

Langkah 1: Deploy add-on ack-spark-history-server

  1. Masuk ke ACK console. Di panel navigasi kiri, klik Marketplace > Marketplace.

  2. Pada halaman Marketplace, klik tab App Catalog, lalu cari dan pilih ack-spark-history-server.

  3. Pada halaman ack-spark-history-server, klik Deploy.

  4. Pada panel Create, pilih kluster dan namespace, lalu klik Next.

  5. Pada halaman Parameters, atur parameter dan klik OK.

    Parameter berikut mengonfigurasi penyimpanan log, variabel lingkungan, dan Service. Untuk semua opsi, lihat tab ConfigMaps pada halaman ack-spark-history-server.

    Catatan

    Saat mendeploy ack-spark-history-server, tentukan penyimpanan backend untuk log, seperti Object Storage Service (OSS), persistent volume claim (PVC), atau HDFS.

    • (Wajib) Konfigurasikan penyimpanan backend untuk log

      Pilih OSS, PVC, atau HDFS sebagai penyimpanan backend.

      OSS

      Atur parameter berikut.

      Penting

      Log pekerjaan Spark hanya diunggah setelah pekerjaan selesai. Anda tidak dapat melihat log dari pekerjaan yang sedang berjalan secara real time.

      Parameter

      Deskripsi

      Contoh

      spark.history.fs.logDirectory

      URL direktori log. Buat direktori tersebut, misalnya spark/spark-events, sebelum mendeploy add-on. Lihat Mengelola Direktori.

      oss://<Bucket name>/spark/spark-events

      storage.oss.enable

      Mengaktifkan OSS atau OSS-HDFS sebagai penyimpanan backend untuk log.

      true

      storage.oss.endpoint

      Titik akhir OSS.

      oss-cn-beijing-internal.aliyuncs.com

      storage.oss.existingSecret

      (Direkomendasikan) Nama Secret yang sudah ada berisi kredensial akses OSS. Lihat Contoh file YAML AccessKey Secret.

      spark-oss-secret

      storage.oss.createSecret

      Jika tidak ada Secret yang ditentukan, Secret baru akan dibuat secara otomatis untuk menyimpan kredensial akses OSS.

      Tidak berlaku

      storage.oss.createSecret.accessKeyId

      ID AccessKey Akun Alibaba Cloud Anda.

      yourAccessKeyID

      storage.oss.createSecret.accessKeySecret

      Secret AccessKey Akun Alibaba Cloud Anda.

      yourAccessKeySecret

      Contoh file YAML AccessKey Secret

      Secret harus berisi bidang OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.

      1. Buat file bernama spark-oss-secret.yaml:

        apiVersion: v1
        kind: Secret
        metadata:
          name: spark-oss-secret
          namespace: spark-operator
        stringData:
          OSS_ACCESS_KEY_ID: ""       # ID AccessKey Akun Alibaba Cloud Anda.
          OSS_ACCESS_KEY_SECRET: ""   # Secret AccessKey Akun Alibaba Cloud Anda.
      2. Buat AccessKey Secret:

        kubectl apply -f spark-oss-secret.yaml

      PVC

      Atur parameter berikut.

      Parameter

      Deskripsi

      Contoh

      spark.history.fs.logDirectory

      URL direktori log.

      file:///mnt/spark/spark-events

      storage.pvc.enable

      Mengaktifkan PVC sebagai penyimpanan backend untuk log.

      true

      storage.pvc.name

      Nama PVC yang sudah ada. Pastikan PV dan PVC telah dibuat dan terikat di namespace ack-spark-history-server. Lihat Storage-CSI.

      "<PVC name>"

      storage.pvc.mountPath

      Jalur mount PVC di dalam kontainer.

      "/mnt"

      HDFS

      Atur parameter berikut.

      Parameter

      Deskripsi

      Contoh

      spark.history.fs.logDirectory

      URL direktori log.

      hdfs://namenode:port/spark/spark-events

    • (Opsional) Jenis dan port Service

      Service mengekspos UI web History Server secara default. Konfigurasikan jenis dan port dengan service.type dan service.port.

      Parameter

      Deskripsi

      Default

      service.type

      Jenis Service. Nilai yang valid:

      • ClusterIP

      • NodePort

      • LoadBalancer

      ClusterIP

      service.port

      Port untuk mengakses UI web.

      18080

    • (Opsional) Variabel lingkungan

      Tambahkan variabel lingkungan di env untuk mengonfigurasi History Server.

      Variabel lingkungan

      Deskripsi

      Default

      SPARK_DAEMON_MEMORY

      Memori yang dialokasikan untuk Spark History Server.

      1g

      SPARK_DAEMON_JAVA_OPTS

      Opsi JVM untuk Spark History Server.

      ""

      SPARK_DAEMON_CLASSPATH

      Classpath untuk Spark History Server.

      ""

      SPARK_PUBLIC_DNS

      Alamat publik Spark History Server. Jika tidak diatur, riwayat aplikasi menggunakan alamat internal, yang dapat menyebabkan tautan rusak.

      ""

      SPARK_HISTORY_OPTS

      Sekumpulan properti konfigurasi spark.history.*.

      ""

      Tambahkan konfigurasi ke sparkConf untuk menyesuaikan History Server. Konfigurasi umum:

      Properti

      Deskripsi

      Default

      spark.history.fs.update.interval

      Interval untuk memeriksa pembaruan log.

      10s

      spark.history.fs.retainedApplications

      Jumlah maksimum UI aplikasi yang disimpan dalam cache.

      50

      spark.history.ui.port

      Port Spark History Server.

      18080

      spark.history.fs.cleaner.enabled

      Menentukan apakah log event akan dibersihkan secara berkala.

      false

      spark.history.fs.cleaner.interval

      Interval pembersihan log event ketika spark.history.fs.cleaner.enabled=true.

      1d

      spark.history.fs.cleaner.maxAge

      Usia maksimum log event sebelum dihapus ketika spark.history.fs.cleaner.enabled=true.

      7d

      spark.history.fs.cleaner.maxNum

      Jumlah maksimum file log yang disimpan ketika spark.history.fs.cleaner.enabled=true. File berlebih akan dihapus saat pembersihan.

      Int.MaxValue

      spark.history.fs.driverlog.cleaner.enabled

      Menentukan apakah log event driver akan dibersihkan secara berkala.

      spark.history.fs.cleaner.enabled

      spark.history.fs.driverlog.cleaner.interval

      Interval pembersihan log event driver ketika spark.history.fs.driverlog.cleaner.enabled=true.

      spark.history.fs.cleaner.interval

      spark.history.fs.driverlog.cleaner.maxAge

      Usia maksimum log event driver sebelum dihapus ketika spark.history.fs.driverlog.cleaner.enabled=true.

      spark.history.fs.cleaner.maxAge

      spark.history.fs.numReplayThreads

      Jumlah thread untuk memproses file log.

      25% dari jumlah core CPU yang tersedia.

      spark.history.store.maxDiskUsage

      Ruang disk maksimum untuk cache riwayat aplikasi.

      10g

Langkah 2: Akses UI web

Secara default, jenis Service adalah ClusterIP. Teruskan port lokal untuk mengakses UI web. Untuk menggunakan Instance SLB yang sudah ada, lihat Mengekspos aplikasi menggunakan Service yang dikaitkan dengan Instance SLB yang sudah ada.

Penting

kubectl port-forward hanya untuk verifikasi pengujian dan tidak cocok untuk produksi karena risiko keamanan.

  1. Konfigurasikan penerusan port lokal:

    RELEASE_NAME=spark-history-server
    RELEASE_NAMESPACE=spark-operator
    
    SERVICE_NAME=${RELEASE_NAME}-service
    SERVICE_PORT=$(kubectl get service ${SERVICE_NAME} --namespace ${RELEASE_NAMESPACE} -o jsonpath="{.spec.ports[0].port}")
    
    echo "Sekarang Anda dapat membuka http://127.0.0.1:18080 untuk mengunjungi spark history server."
    kubectl port-forward --namespace ${RELEASE_NAMESPACE} services/${SERVICE_NAME} 18080:${SERVICE_PORT}

    Output yang diharapkan:

    Sekarang Anda dapat membuka http://127.0.0.1:18080 untuk mengunjungi spark history server.
    Forwarding from 127.0.0.1:18080 -> 18080
    Forwarding from [::1]:18080 -> 18080
  2. Buka http://127.0.0.1:18080 untuk melihat UI web Spark History Server.

    image

Langkah 3: Aktifkan pencatatan event

Aktifkan pencatatan event di pekerjaan Spark Anda dengan mengonfigurasi parameter berikut.

Parameter

Deskripsi

Contoh

spark.eventLog.enabled

Mengaktifkan pencatatan event. Nilai yang valid:

  • true

  • false

true

spark.eventLog.dir

Jalur penyimpanan untuk log event. Contoh:

  • oss://<Bucket name>/spark/spark-events (jalur OSS)

  • hdfs://namenode:port/spark/spark-events (jalur HDFS)

  • file:///tmp/spark/spark-events (jalur lokal)

oss://<Bucket name>/spark/spark-events

Contoh: Konfigurasikan OSS untuk pencatatan event

Contoh berikut mengonfigurasi OSS sebagai penyimpanan backend untuk pencatatan event.

  1. Buat gambar kontainer Spark

    Gambar Spark komunitas tidak memiliki paket JAR OSS. Buat gambar kustom dengan JAR SDK Hadoop OSS seperti di bawah ini, lalu dorong ke repositori Anda. Lihat Membuat gambar menggunakan instans Edisi Perusahaan. Gunakan JAR dependensi yang sesuai dengan versi Hadoop dari versi Spark Anda.

    ARG SPARK_IMAGE=registry-cn-hangzhou.ack.aliyuncs.com/dev/spark:3.5.2
    
    FROM ${SPARK_IMAGE}
    
    # Tambahkan dependensi untuk dukungan Hadoop Aliyun OSS
    ADD --chmod=644 https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aliyun/3.3.4/hadoop-aliyun-3.3.4.jar ${SPARK_HOME}/jars
    ADD --chmod=644 https://repo1.maven.org/maven2/com/aliyun/oss/aliyun-sdk-oss/3.17.4/aliyun-sdk-oss-3.17.4.jar ${SPARK_HOME}/jars
    ADD --chmod=644 https://repo1.maven.org/maven2/org/jdom/jdom2/2.0.6.1/jdom2-2.0.6.1.jar ${SPARK_HOME}/jars
  2. Create Secret

    Buat Secret di namespace pekerjaan Spark Anda untuk menyimpan kredensial akses OSS.

    1. Buat file manifes berikut spark-oss-secret.yaml:

      apiVersion: v1
      kind: Secret
      metadata:
        name: spark-oss-secret
        namespace: default
      stringData:
        # ID AccessKey Akun Alibaba Cloud Anda.
        OSS_ACCESS_KEY_ID: ""
        # Secret AccessKey Akun Alibaba Cloud Anda.
        OSS_ACCESS_KEY_SECRET: ""
    2. Buat Secret:

      kubectl apply -f spark-oss-secret.yaml

      Output yang diharapkan:

      secret/spark-oss-secret created
  3. Kirim pekerjaan Spark

    Ubah parameter berikut dalam manifes SparkApplication sesuai dengan lingkungan Anda:

    Parameter

    Deskripsi

    Contoh

    image

    Alamat gambar kontainer Spark kustom.

    registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/spark:3.5.2-oss

    fs.oss.endpoint

    Titik akhir OSS.

    oss-cn-beijing-internal.aliyuncs.com

    spark.eventLog.dir

    Jalur penyimpanan log. Jalur tersebut harus sudah ada; jika tidak, pekerjaan akan gagal saat runtime.

    oss://<Bucket name>/spark/spark-events

    1. Buat manifes SparkApplication berikut dan simpan sebagai spark-pi.yaml.

      apiVersion: sparkoperator.k8s.io/v1beta2
      kind: SparkApplication
      metadata:
        name: spark-pi-oss
        namespace: default
      spec:
        type: Scala
        mode: cluster
        image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/spark:3.5.2-oss
        mainApplicationFile: local:///opt/spark/examples/jars/spark-examples_2.12-3.5.2.jar
        mainClass: org.apache.spark.examples.SparkPi
        sparkVersion: 3.5.2
        hadoopConf:
          fs.AbstractFileSystem.oss.impl: org.apache.hadoop.fs.aliyun.oss.OSS
          fs.oss.impl: org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem
          # Titik akhir OSS.
          fs.oss.endpoint: oss-cn-beijing-internal.aliyuncs.com
          fs.oss.credentials.provider: com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider
        sparkConf:
          spark.eventLog.enabled: "true"
          # Jalur tempat log disimpan.
          spark.eventLog.dir: oss://<Bucket name>/spark/spark-events
        driver:
          cores: 1
          coreLimit: 1200m
          memory: 512m
          serviceAccount: spark-operator-spark
          envFrom:
          - secretRef:
              name: spark-oss-secret
        executor:
          instances: 1
          cores: 1
          coreLimit: 1200m
          memory: 512m
          envFrom:
          - secretRef:
              name: spark-oss-secret
        restartPolicy:
          type: Never
    2. Kirim pekerjaan Spark. Setelah pekerjaan selesai, lihat riwayatnya di http://127.0.0.1:18080.

      kubectl apply -f spark-pi.yaml

      Output yang diharapkan:

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