全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan Spark History Server untuk melihat informasi pekerjaan Spark

更新时间:Dec 27, 2025

Aplikasi Spark yang sedang berjalan menyediakan antarmuka web (web UI) untuk memvisualisasikan informasi pekerjaan, seperti detail stage, detail task, dan penggunaan memori. Untuk melihat detail eksekusi pekerjaan setelah selesai, Anda harus menyimpan log pekerjaan Spark secara persisten ke sistem penyimpanan backend. Anda kemudian dapat menggunakan komponen ack-spark-history-server untuk mengurai log tersebut dan menampilkannya di web UI. Topik ini menjelaskan cara menggunakan Spark History Server untuk melihat status pekerjaan Spark di kluster ACK.

Prasyarat

Langkah 1: Deploy komponen ack-spark-history-server

  1. Pada halaman App Marketplace, klik tab App Catalog. Cari dan pilih ack-spark-history-server.

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

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

  4. Pada halaman Parameter Settings, atur parameter dan klik OK.

    Bagian berikut menjelaskan parameter untuk penyimpanan log, variabel lingkungan, dan konfigurasi Service. Anda dapat menyesuaikan pengaturan parameter sesuai kebutuhan. Deskripsi semua item konfigurasi dapat dilihat pada tab Parameters di halaman ack-spark-history-server.

    Catatan

    Saat mendeploy komponen ack-spark-history-server, Anda harus menentukan sistem penyimpanan log backend, seperti OSS, persistent volume claim (PVC), atau HDFS.

    • (Wajib) Konfigurasikan sistem penyimpanan log backend

      Saat mengonfigurasi sistem penyimpanan log backend, Anda dapat memilih OSS, PVC, atau HDFS. Bagian berikut menjelaskan konfigurasi untuk masing-masing backend penyimpanan.

      Gunakan OSS sebagai backend penyimpanan

      Jika Anda menggunakan OSS sebagai backend penyimpanan log, atur parameter berikut.

      Penting

      Pekerjaan Spark hanya menulis dan mengunggah log setelah pekerjaan selesai. Oleh karena itu, Anda tidak dapat melihat log pekerjaan yang sedang berjalan secara real time. Anda hanya dapat melihat log pekerjaan yang telah selesai.

      Parameter

      Deskripsi

      Contoh

      spark.history.fs.logDirectory

      URL direktori log. Pastikan direktori log, seperti spark/spark-events, telah dibuat sebelum Anda mendeploy komponen. Untuk informasi selengkapnya tentang cara membuat direktori, lihat Kelola direktori.

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

      storage.oss.enable

      Mengaktifkan OSS dan OSS-HDFS sebagai backend penyimpanan log.

      true

      storage.oss.endpoint

      Endpoint OSS.

      oss-cn-beijing-internal.aliyuncs.com

      storage.oss.existingSecret

      (Disarankan) Nama Secret yang sudah ada yang berisi kredensial untuk membaca dari OSS. Untuk informasi selengkapnya tentang cara membuat file YAML Secret untuk kredensial akses OSS, lihat Contoh YAML Secret untuk kredensial akses OSS.

      spark-oss-secret

      storage.oss.createSecret

      Jika Anda tidak menentukan Secret yang sudah ada, sebuah Secret akan dibuat secara otomatis untuk menyimpan kredensial akses OSS.

      Tidak berlaku.

      storage.oss.createSecret.accessKeyId

      ID AccessKey Anda.

      yourAccessKeyID

      storage.oss.createSecret.accessKeySecret

      Rahasia AccessKey Anda.

      yourAccessKeySecret

      Contoh YAML Secret untuk kredensial akses OSS

      Pastikan Secret berisi bidang OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.

      1. Buat file bernama spark-oss-secret.yaml dengan konten berikut.

        apiVersion: v1
        kind: Secret
        metadata:
          name: spark-oss-secret
          namespace: spark-operator
        stringData:
          OSS_ACCESS_KEY_ID: ""       # ID AccessKey Anda.
          OSS_ACCESS_KEY_SECRET: ""   # Rahasia AccessKey Anda.
      2. Jalankan perintah berikut untuk membuat Secret untuk kredensial akses OSS.

        kubectl apply -f spark-oss-secret.yaml

      Gunakan PVC sebagai backend penyimpanan

      Jika Anda menggunakan PVC sebagai backend penyimpanan log, atur parameter berikut.

      Parameter

      Deskripsi

      Contoh

      spark.history.fs.logDirectory

      URL direktori log.

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

      storage.pvc.enable

      Mengaktifkan PVC sebagai backend penyimpanan log.

      true

      storage.pvc.name

      Nama PVC yang sudah ada. Pastikan volume persisten (PV) dan PVC telah dibuat di namespace yang dibutuhkan oleh ack-spark-history-server dan berhasil di-bind. Untuk informasi selengkapnya tentang cara membuat dan mengikat PVC, lihat Storage - CSI.

      "<PVC name>"

      storage.pvc.mountPath

      Jalur mount PVC di dalam kontainer.

      "/mnt"

      Gunakan HDFS sebagai backend penyimpanan

      Jika Anda menggunakan HDFS sebagai backend penyimpanan log, atur parameter berikut.

      Parameter

      Deskripsi

      Contoh

      spark.history.fs.logDirectory

      URL direktori log.

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

    • (Opsional) Konfigurasikan tipe dan port Service

      Secara default, resource Service dibuat untuk mengekspos web UI History Server. Anda dapat mengonfigurasi tipe Service dan nomor port menggunakan parameter service.type dan service.port.

      Parameter

      Deskripsi

      Nilai default

      service.type

      Tipe Service. Nilai yang valid:

      • ClusterIP

      • NodePort

      • LoadBalancer

      ClusterIP

      service.port

      Port untuk mengakses web UI.

      18080

    • (Opsional) Konfigurasikan variabel lingkungan

      Anda dapat menambahkan variabel lingkungan pada parameter env untuk mengonfigurasi History Server.

      Variabel lingkungan

      Deskripsi

      Nilai default

      SPARK_DAEMON_MEMORY

      Jumlah memori yang dialokasikan untuk History Server.

      1g

      SPARK_DAEMON_JAVA_OPTS

      Item konfigurasi JVM untuk History Server.

      ""

      SPARK_DAEMON_CLASSPATH

      Jalur kelas (class path) History Server.

      ""

      SPARK_PUBLIC_DNS

      Alamat publik History Server. Jika alamat publik History Server tidak diatur, riwayat aplikasi akan menggunakan alamat internal secara default, yang dapat menyebabkan tautan gagal.

      ""

      SPARK_HISTORY_OPTS

      Sekumpulan item konfigurasi spark.history.*.

      ""

      Anda juga dapat menambahkan konfigurasi pada parameter sparkConf untuk mengatur History Server. Tabel berikut menjelaskan item konfigurasi umum.

      Nama properti

      Deskripsi

      Nilai default

      spark.history.fs.update.interval

      Interval pemeriksaan pembaruan log.

      10s

      spark.history.fs.retainedApplications

      Jumlah maksimum aplikasi yang datanya di-cache di UI.

      50

      spark.history.ui.port

      Nomor port History Server.

      18080

      spark.history.fs.cleaner.enabled

      Menentukan apakah log event akan dibersihkan secara berkala.

      false

      spark.history.fs.cleaner.interval

      Jika spark.history.fs.cleaner.enabled=true, parameter ini menentukan interval pembersihan log event.

      1d

      spark.history.fs.cleaner.maxAge

      Jika spark.history.fs.cleaner.enabled=true, log yang masa hidup datanya (TTL) melebihi ambang batas ini akan dihapus saat pembersihan.

      7d

      spark.history.fs.cleaner.maxNum

      Jika spark.history.fs.cleaner.enabled=true, parameter ini menetapkan jumlah maksimum file log yang disimpan. File log yang melebihi ambang batas ini akan dihapus saat pembersihan dipicu.

      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

      Jika spark.history.fs.driverlog.cleaner.enabled=true, parameter ini menentukan interval pembersihan log event driver.

      spark.history.fs.cleaner.interval

      spark.history.fs.driverlog.cleaner.maxAge

      Jika spark.history.fs.driverlog.cleaner.enabled=true, log event driver yang masa hidup datanya (TTL) melebihi ambang batas ini akan dihapus saat pembersihan.

      spark.history.fs.cleaner.maxAge

      spark.history.fs.numReplayThreads

      Jumlah thread yang dibuat untuk memproses file log.

      25% dari jumlah core CPU yang tersedia.

      spark.history.store.maxDiskUsage

      Ukuran disk maksimum yang dapat digunakan untuk caching riwayat aplikasi.

      10g

Langkah 2: Akses web UI Spark History Server

Secara default, tipe Service adalah ClusterIP. Untuk mengakses web UI Spark History Server, Anda dapat meneruskan (forward) Service-nya ke port lokal 18080. Ikuti langkah-langkah berikut untuk mengonfigurasi penerusan port. Untuk menggunakan instans SLB yang sudah ada untuk akses, lihat Ekspos aplikasi menggunakan Service yang dikaitkan dengan instans SLB yang sudah ada.

Penting

Penerusan port yang dibuat menggunakan perintah kubectl port-forward hanya cocok untuk verifikasi cepat di lingkungan staging dan tidak disarankan untuk lingkungan produksi karena risiko keamanan.

  1. Jalankan perintah berikut untuk mengonfigurasi 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 "Now you can go to http://127.0.0.1:18080 to visit spark history server."
    kubectl port-forward --namespace ${RELEASE_NAMESPACE} services/${SERVICE_NAME} 18080:${SERVICE_PORT}

    Output yang diharapkan:

    Now you can go to http://127.0.0.1:18080 to visit spark history server.
    Forwarding from 127.0.0.1:18080 -> 18080
    Forwarding from [::1]:18080 -> 18080
  2. Buka http://127.0.0.1:18080 di browser untuk melihat web UI Spark History Server.

    image

Langkah 3: Aktifkan logging di pekerjaan Spark

Setelah Anda mendeploy komponen ack-spark-history-server, Anda harus mengaktifkan logging event di pekerjaan Spark Anda. Anda dapat mengonfigurasi dua parameter berikut untuk mengaktifkan dan menyimpan log event untuk pekerjaan Spark.

Parameter

Deskripsi

Nilai contoh

spark.eventLog.enabled

Mengaktifkan logging event. Nilai yang valid:

  • true

  • false

true

spark.eventLog.dir

Jalur tempat log event disimpan. Nilai yang valid:

  • 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 skenario: Konfigurasikan logging OSS di pekerjaan Spark

Langkah-langkah berikut menjelaskan cara mengonfigurasi logging dengan OSS sebagai backend penyimpanan.

  1. Buat gambar kontainer Spark

    Gambar kontainer Spark dari komunitas tidak menyertakan paket JAR yang diperlukan untuk mengakses OSS. Anda harus membuat gambar kontainer Spark sendiri dan menambahkan paket JAR dari Hadoop OSS SDK ke dalam gambar tersebut. Kode berikut menyediakan contoh Dockerfile. Untuk informasi selengkapnya tentang cara membuat gambar menggunakan Container Registry, lihat Gunakan instans Edisi Perusahaan untuk membuat gambar. Buat gambar berdasarkan Dockerfile dan dorong ke repository image Anda. Pastikan Anda menyesuaikan paket JAR dependensi agar sesuai dengan versi Hadoop dari Spark.

    ARG SPARK_IMAGE=registry-cn-hangzhou.ack.aliyuncs.com/dev/spark:3.5.2
    
    FROM ${SPARK_IMAGE}
    
    # Add dependency for Hadoop Aliyun OSS support
    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. Buat Secret

    Di namespace pekerjaan Spark, buat Secret untuk menyimpan kredensial akses OSS.

    1. Buat file manifest Secret bernama spark-oss-secret.yaml untuk menyimpan kredensial akses OSS.

      apiVersion: v1
      kind: Secret
      metadata:
        name: spark-oss-secret
        namespace: default
      stringData:
        # ID AccessKey Anda
        OSS_ACCESS_KEY_ID: ""
        # Rahasia AccessKey Anda
        OSS_ACCESS_KEY_SECRET: ""
    2. Jalankan perintah berikut untuk membuat resource Secret.

      kubectl apply -f spark-oss-secret.yaml

      Output yang diharapkan:

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

    Kode berikut menyediakan contoh SparkApplication dengan logging event diaktifkan. Sesuaikan parameter berikut sesuai kebutuhan:

    Parameter

    Deskripsi

    Contoh

    image

    Alamat registri gambar kontainer Spark yang telah dibuat.

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

    fs.oss.endpoint

    Endpoint Alibaba Cloud OSS.

    oss-cn-beijing-internal.aliyuncs.com

    spark.eventLog.dir

    Jalur tempat log disimpan. Pastikan jalur log yang ditentukan telah dibuat sebelumnya. Jika tidak, akan terjadi error saat pekerjaan dijalankan.

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

    1. Buat file manifest 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
          # Endpoint 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 penyimpanan log
          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. Jalankan perintah berikut untuk mengirim pekerjaan Spark. Setelah gambar dibuat dan Secret dibuat, Anda dapat membuka http://127.0.0.1:18080 di browser untuk melihat status pekerjaan Spark.

      kubectl apply -f spark-pi.yaml

      Output yang diharapkan:

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