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
Sebuah Kluster ACK yang dikelola atau Kluster ACK Serverless versi 1.24 atau lebih baru telah dibuat. Untuk informasi selengkapnya, lihat Buat Kluster ACK yang dikelola, Buat Kluster ACK Serverless, dan Tingkatkan kluster secara manual.
Klien kubectl telah terhubung ke kluster ACK. Untuk informasi selengkapnya, lihat Dapatkan kubeconfig kluster dan hubungkan ke kluster menggunakan kubectl.
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.
Terapkan Spark Operator: Instal komponen ack-spark-operator di kluster ACK Anda untuk mengaktifkan orkestrasi pekerjaan Spark.
Buat aplikasi Spark: Definisikan dan kirimkan konfigurasi pekerjaan Spark untuk menjalankan beban kerja pemrosesan data Anda.
Pantau eksekusi: Lacak progres pekerjaan, periksa status Pod, serta tinjau log eksekusi dan metrik secara detail.
Akses antarmuka web: Gunakan UI web Spark untuk pemantauan interaktif dan visualisasi performa.
Ubah konfigurasi: Sesuaikan parameter pekerjaan dan perbarui konfigurasi secara dinamis tanpa mengganggu operasi.
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
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, pilih .
Navigasi ke halaman App Marketplace dan pilih tab App Catalog. Cari dan pilih ack-spark-operator.
Di halaman ack-spark-operator, klik One-Click Deploy.
Di panel Create, pilih kluster dan namespace target Anda, lalu klik Next.
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.replicasJumlah replika controller untuk ketersediaan tinggi.
1 (default)
webhook.replicasJumlah replika webhook untuk kontrol admission.
1 (default)
spark.jobNamespacesDaftar 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.nameUntuk setiap namespace dalam
spark.jobNamespaces, ServiceAccount bernamaspark-operator-sparkdan 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.
Buat file manifes SparkApplication bernama
spark-pi.yamldengan 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: NeverTerapkan aplikasi Spark menggunakan kubectl:
kubectl apply -f spark-pi.yamlOutput 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.
Periksa status aplikasi:
kubectl get sparkapplication spark-piOutput yang diharapkan:
NAME STATUS ATTEMPTS START FINISH AGE spark-pi SUBMITTED 1 2024-06-04T03:17:11Z <no value> 15sLihat status Pod menggunakan label aplikasi:
kubectl get pod -l sparkoperator.k8s.io/app-name=spark-piContoh 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 49sCatatanPod executor secara otomatis dibersihkan ketika pekerjaan selesai.
Dapatkan informasi aplikasi secara detail:
kubectl describe sparkapplication spark-piTinjau log driver terbaru:
kubectl logs --tail=20 spark-pi-driverLog 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.
Penerusan port hanya ditujukan untuk lingkungan pengembangan dan pengujian. Penerapan produksi harus menggunakan mekanisme ingress yang aman karena pertimbangan keamanan.
Buat penerusan port menggunakan Service atau Pod:
Teruskan port Service:
kubectl port-forward services/spark-pi-ui-svc 4040Teruskan port Pod:
kubectl port-forward pods/spark-pi-driver 4040Output penerusan yang berhasil:
Forwarding from 127.0.0.1:4040 -> 4040 Forwarding from [::1]:4040 -> 4040
Buka browser Anda dan arahkan ke
http://127.0.0.1:4040untuk mengakses UI web Spark.
(Opsional) Langkah 5: Ubah Konfigurasi
Perbarui aplikasi Spark Anda dengan mengubah parameter pada file manifes.
Edit manifes
spark-pi.yaml. Misalnya, tingkatkan presisi dengan mengubahargumentsmenjadi10000dan tingkatkan kapasitas komputasi dengan mengatur jumlah instanceexecutormenjadi2: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: NeverTerapkan konfigurasi yang diperbarui:
kubectl apply -f spark-pi.yamlVerifikasi status aplikasi:
kubectl get sparkapplication spark-piAplikasi 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.yamlAtau hapus langsung berdasarkan nama:
kubectl delete sparkapplication spark-piSumber daya tambahan
Pelajari cara menggunakan Spark History Server untuk pemantauan dan analisis pekerjaan: Gunakan Spark History Server untuk melihat informasi pekerjaan Spark
Konfigurasikan pengumpulan log terpusat dengan Simple Log Service: Gunakan Simple Log Service untuk mengumpulkan log pekerjaan Spark
Aktifkan integrasi Object Storage Service (OSS) untuk pemrosesan data: Konfigurasikan pekerjaan Spark untuk membaca dan menulis data dari dan ke OSS
Optimalkan biaya dengan sumber daya komputasi elastis: Gunakan sumber daya elastis ECI untuk menjalankan pekerjaan Spark
Tingkatkan performa shuffle dengan Celeborn Remote Shuffle Service: Gunakan Celeborn sebagai RSS dalam pekerjaan Spark