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
Komponen ack-spark-operator telah dideploy. Untuk informasi selengkapnya, lihat Deploy komponen ack-spark-operator.
Klien kubectl telah terhubung ke kluster ACK. Untuk informasi selengkapnya, lihat Dapatkan kubeconfig kluster dan hubungkan ke kluster menggunakan kubectl.
Langkah 1: Deploy komponen ack-spark-history-server
Pada halaman App Marketplace, klik tab App Catalog. 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 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.
CatatanSaat 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.
PentingPekerjaan 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.logDirectoryURL 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-eventsstorage.oss.enableMengaktifkan OSS dan OSS-HDFS sebagai backend penyimpanan log.
truestorage.oss.endpointEndpoint OSS.
oss-cn-beijing-internal.aliyuncs.comstorage.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-secretstorage.oss.createSecretJika Anda tidak menentukan Secret yang sudah ada, sebuah Secret akan dibuat secara otomatis untuk menyimpan kredensial akses OSS.
Tidak berlaku.
storage.oss.createSecret.accessKeyIdID AccessKey Anda.
yourAccessKeyID
storage.oss.createSecret.accessKeySecretRahasia AccessKey Anda.
yourAccessKeySecret
Gunakan PVC sebagai backend penyimpanan
Jika Anda menggunakan PVC sebagai backend penyimpanan log, atur parameter berikut.
Parameter
Deskripsi
Contoh
spark.history.fs.logDirectoryURL direktori log.
file:///mnt/spark/spark-eventsstorage.pvc.enableMengaktifkan PVC sebagai backend penyimpanan log.
truestorage.pvc.nameNama PVC yang sudah ada. Pastikan volume persisten (PV) dan PVC telah dibuat di namespace yang dibutuhkan oleh
ack-spark-history-serverdan berhasil di-bind. Untuk informasi selengkapnya tentang cara membuat dan mengikat PVC, lihat Storage - CSI."<PVC name>"storage.pvc.mountPathJalur 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.logDirectoryURL 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.typedanservice.port.Parameter
Deskripsi
Nilai default
service.typeTipe Service. Nilai yang valid:
ClusterIPNodePortLoadBalancer
ClusterIPservice.portPort untuk mengakses web UI.
18080(Opsional) Konfigurasikan variabel lingkungan
Anda dapat menambahkan variabel lingkungan pada parameter
envuntuk mengonfigurasi History Server.Variabel lingkungan
Deskripsi
Nilai default
SPARK_DAEMON_MEMORYJumlah memori yang dialokasikan untuk History Server.
1gSPARK_DAEMON_JAVA_OPTSItem konfigurasi JVM untuk History Server.
""SPARK_DAEMON_CLASSPATHJalur kelas (class path) History Server.
""SPARK_PUBLIC_DNSAlamat 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_OPTSSekumpulan item konfigurasi
spark.history.*.""Anda juga dapat menambahkan konfigurasi pada parameter
sparkConfuntuk mengatur History Server. Tabel berikut menjelaskan item konfigurasi umum.Nama properti
Deskripsi
Nilai default
spark.history.fs.update.intervalInterval pemeriksaan pembaruan log.
10sspark.history.fs.retainedApplicationsJumlah maksimum aplikasi yang datanya di-cache di UI.
50spark.history.ui.portNomor port History Server.
18080spark.history.fs.cleaner.enabledMenentukan apakah log event akan dibersihkan secara berkala.
falsespark.history.fs.cleaner.intervalJika
spark.history.fs.cleaner.enabled=true, parameter ini menentukan interval pembersihan log event.1dspark.history.fs.cleaner.maxAgeJika
spark.history.fs.cleaner.enabled=true, log yang masa hidup datanya (TTL) melebihi ambang batas ini akan dihapus saat pembersihan.7dspark.history.fs.cleaner.maxNumJika
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.MaxValuespark.history.fs.driverlog.cleaner.enabledMenentukan apakah log event driver akan dibersihkan secara berkala.
spark.history.fs.cleaner.enabledspark.history.fs.driverlog.cleaner.intervalJika
spark.history.fs.driverlog.cleaner.enabled=true, parameter ini menentukan interval pembersihan log event driver.spark.history.fs.cleaner.intervalspark.history.fs.driverlog.cleaner.maxAgeJika
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.maxAgespark.history.fs.numReplayThreadsJumlah thread yang dibuat untuk memproses file log.
25% dari jumlah core CPU yang tersedia.
spark.history.store.maxDiskUsageUkuran 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.
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.
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 -> 18080Buka http://127.0.0.1:18080 di browser untuk melihat web UI Spark History Server.

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 |
| Mengaktifkan logging event. Nilai yang valid:
|
|
| Jalur tempat log event disimpan. Nilai yang valid:
|
|
Contoh skenario: Konfigurasikan logging OSS di pekerjaan Spark
Langkah-langkah berikut menjelaskan cara mengonfigurasi logging dengan OSS sebagai backend penyimpanan.
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}/jarsBuat Secret
Di namespace pekerjaan Spark, buat Secret untuk menyimpan kredensial akses OSS.
Buat file manifest Secret bernama
spark-oss-secret.yamluntuk 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: ""Jalankan perintah berikut untuk membuat resource Secret.
kubectl apply -f spark-oss-secret.yamlOutput yang diharapkan:
secret/spark-oss-secret created
Kirim pekerjaan Spark
Kode berikut menyediakan contoh SparkApplication dengan logging event diaktifkan. Sesuaikan parameter berikut sesuai kebutuhan:
Parameter
Deskripsi
Contoh
imageAlamat registri gambar kontainer Spark yang telah dibuat.
registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/spark:3.5.2-ossfs.oss.endpointEndpoint Alibaba Cloud OSS.
oss-cn-beijing-internal.aliyuncs.comspark.eventLog.dirJalur tempat log disimpan. Pastikan jalur log yang ditentukan telah dibuat sebelumnya. Jika tidak, akan terjadi error saat pekerjaan dijalankan.
oss://<Bucket name>/spark/spark-eventsBuat 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: NeverJalankan 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.yamlOutput yang diharapkan:
sparkapplication.sparkoperator.k8s.io/spark-pi created