Pertahankan log pekerjaan Spark dan lihat detail pekerjaan yang telah selesai—seperti stages, tasks, dan penggunaan resource—melalui Spark History Server.
Prasyarat
-
Add-on ack-spark-operator telah dideploy.
Klien kubectl terhubung ke kluster ACK. Untuk informasi selengkapnya, lihat Menghubungkan ke kluster ACK menggunakan kubectl.
Langkah 1: Deploy add-on ack-spark-history-server
Masuk ke ACK console. Di panel navigasi kiri, klik .
-
Pada halaman Marketplace, klik tab App Catalog, lalu cari dan pilih ack-spark-history-server.
-
Pada halaman ack-spark-history-server, klik Deploy.
-
Pada panel Create, pilih kluster dan namespace, lalu klik Next.
-
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.
CatatanSaat 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.
PentingLog 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.logDirectoryURL direktori log. Buat direktori tersebut, misalnya
spark/spark-events, sebelum mendeploy add-on. Lihat Mengelola Direktori.oss://<Bucket name>/spark/spark-eventsstorage.oss.enableMengaktifkan OSS atau OSS-HDFS sebagai penyimpanan backend untuk log.
truestorage.oss.endpointTitik akhir OSS.
oss-cn-beijing-internal.aliyuncs.comstorage.oss.existingSecret(Direkomendasikan) Nama Secret yang sudah ada berisi kredensial akses OSS. Lihat Contoh file YAML AccessKey Secret.
spark-oss-secretstorage.oss.createSecretJika tidak ada Secret yang ditentukan, Secret baru akan dibuat secara otomatis untuk menyimpan kredensial akses OSS.
Tidak berlaku
storage.oss.createSecret.accessKeyIdID AccessKey Akun Alibaba Cloud Anda.
yourAccessKeyID
storage.oss.createSecret.accessKeySecretSecret AccessKey Akun Alibaba Cloud Anda.
yourAccessKeySecret
PVC
Atur parameter berikut.
Parameter
Deskripsi
Contoh
spark.history.fs.logDirectoryURL direktori log.
file:///mnt/spark/spark-eventsstorage.pvc.enableMengaktifkan PVC sebagai penyimpanan backend untuk log.
truestorage.pvc.nameNama 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.mountPathJalur mount PVC di dalam kontainer.
"/mnt"HDFS
Atur parameter berikut.
Parameter
Deskripsi
Contoh
spark.history.fs.logDirectoryURL 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.typedanservice.port.Parameter
Deskripsi
Default
service.typeJenis Service. Nilai yang valid:
-
ClusterIP -
NodePort -
LoadBalancer
ClusterIPservice.portPort untuk mengakses UI web.
18080 -
-
(Opsional) Variabel lingkungan
Tambahkan variabel lingkungan di
envuntuk mengonfigurasi History Server.Variabel lingkungan
Deskripsi
Default
SPARK_DAEMON_MEMORYMemori yang dialokasikan untuk Spark History Server.
1gSPARK_DAEMON_JAVA_OPTSOpsi JVM untuk Spark History Server.
""SPARK_DAEMON_CLASSPATHClasspath untuk Spark History Server.
""SPARK_PUBLIC_DNSAlamat publik Spark History Server. Jika tidak diatur, riwayat aplikasi menggunakan alamat internal, yang dapat menyebabkan tautan rusak.
""SPARK_HISTORY_OPTSSekumpulan properti konfigurasi
spark.history.*.""Tambahkan konfigurasi ke
sparkConfuntuk menyesuaikan History Server. Konfigurasi umum:Properti
Deskripsi
Default
spark.history.fs.update.intervalInterval untuk memeriksa pembaruan log.
10sspark.history.fs.retainedApplicationsJumlah maksimum UI aplikasi yang disimpan dalam cache.
50spark.history.ui.portPort Spark History Server.
18080spark.history.fs.cleaner.enabledMenentukan apakah log event akan dibersihkan secara berkala.
falsespark.history.fs.cleaner.intervalInterval pembersihan log event ketika
spark.history.fs.cleaner.enabled=true.1dspark.history.fs.cleaner.maxAgeUsia maksimum log event sebelum dihapus ketika
spark.history.fs.cleaner.enabled=true.7dspark.history.fs.cleaner.maxNumJumlah maksimum file log yang disimpan ketika
spark.history.fs.cleaner.enabled=true. File berlebih akan dihapus saat pembersihan.Int.MaxValuespark.history.fs.driverlog.cleaner.enabledMenentukan apakah log event driver akan dibersihkan secara berkala.
spark.history.fs.cleaner.enabledspark.history.fs.driverlog.cleaner.intervalInterval pembersihan log event driver ketika
spark.history.fs.driverlog.cleaner.enabled=true.spark.history.fs.cleaner.intervalspark.history.fs.driverlog.cleaner.maxAgeUsia maksimum log event driver sebelum dihapus ketika
spark.history.fs.driverlog.cleaner.enabled=true.spark.history.fs.cleaner.maxAgespark.history.fs.numReplayThreadsJumlah thread untuk memproses file log.
25% dari jumlah core CPU yang tersedia.
spark.history.store.maxDiskUsageRuang 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.
kubectl port-forward hanya untuk verifikasi pengujian dan tidak cocok untuk produksi karena risiko keamanan.
-
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 -
Buka http://127.0.0.1:18080 untuk melihat UI web Spark History Server.

Langkah 3: Aktifkan pencatatan event
Aktifkan pencatatan event di pekerjaan Spark Anda dengan mengonfigurasi parameter berikut.
|
Parameter |
Deskripsi |
Contoh |
|
|
Mengaktifkan pencatatan event. Nilai yang valid:
|
|
|
|
Jalur penyimpanan untuk log event. Contoh:
|
|
Contoh: Konfigurasikan OSS untuk pencatatan event
Contoh berikut mengonfigurasi OSS sebagai penyimpanan backend untuk pencatatan event.
-
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 -
Create Secret
Buat Secret di namespace pekerjaan Spark Anda untuk menyimpan kredensial akses OSS.
-
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: "" -
Buat Secret:
kubectl apply -f spark-oss-secret.yamlOutput yang diharapkan:
secret/spark-oss-secret created
-
-
Kirim pekerjaan Spark
Ubah parameter berikut dalam manifes SparkApplication sesuai dengan lingkungan Anda:
Parameter
Deskripsi
Contoh
imageAlamat gambar kontainer Spark kustom.
registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/spark:3.5.2-ossfs.oss.endpointTitik akhir OSS.
oss-cn-beijing-internal.aliyuncs.comspark.eventLog.dirJalur penyimpanan log. Jalur tersebut harus sudah ada; jika tidak, pekerjaan akan gagal saat runtime.
oss://<Bucket name>/spark/spark-events-
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 -
Kirim pekerjaan Spark. Setelah pekerjaan selesai, lihat riwayatnya di http://127.0.0.1:18080.
kubectl apply -f spark-pi.yamlOutput yang diharapkan:
sparkapplication.sparkoperator.k8s.io/spark-pi created
-