Celeborn mengelola shuffle data dan spill data intermediate sebagai remote shuffle service (RSS). Deploy di kluster Container Service for Kubernetes (ACK) untuk menggunakan RSS pada Spark job.
Manfaat
Untuk framework data besar seperti MapReduce, Spark, dan Flink, Celeborn sebagai RSS menyediakan:
-
Penulisan shuffle berbasis push: Node mapper melewati penyimpanan disk lokal, ideal untuk arsitektur cloud-native dengan
storage and compute separation. -
Pembacaan shuffle berbasis merge: Data digabungkan di node
workeralih-alih reducer, sehingga menghindari overhead I/O file kecil acak dan jaringan akibat transfer kecil. -
high availability: NodemasterCeleborn menggunakan protokol Raft untukhigh availabilitydan stabilitas. -
fault tolerance:dual replicassecara signifikan mengurangi probabilitas kegagalan pengambilan data.
Prasyarat
-
Komponen ack-spark-operator telah dideploy.
Klien kubectl telah terhubung ke kluster ACK. Untuk informasi selengkapnya, lihat Connect to an ACK cluster using kubectl.
-
Bucket OSS telah dibuat. Untuk informasi selengkapnya, lihat 创建存储空间.
ossutil telah diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat Install ossutil dan Configure ossutil.
Untuk informasi lebih lanjut tentang perintah ossutil, lihat 命令行工具ossutil快速入门.
-
node pooltelah dibuat dan dikonfigurasi sesuai lingkungan kluster di bawah ini. Lihat Create and manage a node pool.
Lingkungan kluster
Contoh ini menggunakan konfigurasi kluster ACK berikut:
-
Proses
masterdideploy kenode poolceleborn-master dengan konfigurasi berikut:-
Nama
node pool: celeborn-master -
Jumlah node: 3
-
ECS instance type: g8i.2xlarge -
label: celeborn.apache.org/role=master -
taint: celeborn.apache.org/role=master:NoSchedule -
Penyimpanan data per node: /mnt/celeborn_ratis (1.024 GB)
-
-
Proses
workerdideploy kenode poolceleborn-worker dengan konfigurasi berikut:-
Nama
node pool: celeborn-worker -
Jumlah node: 5
-
ECS instance type: g8i.4xlarge -
label: celeborn.apache.org/role=worker -
taint: celeborn.apache.org/role=worker:NoSchedule -
Penyimpanan data per node:
-
/mnt/disk1 (1.024 GB)
-
/mnt/disk2 (1.024 GB)
-
/mnt/disk3 (1.024 GB)
-
/mnt/disk4 (1.024 GB)
-
-
Tinjauan prosedur
Lakukan langkah-langkah berikut untuk mendeploy Celeborn di kluster ACK dan menjalankan job Spark contoh.
-
Buat
container imageCelebornUnduh
releaseCeleborn, buatcontainer image, lalu dorong keimage repositoryAnda untuk mendeploy komponen ack-celeborn. -
Deploy komponen ack-celeborn
Gunakan
Helm chartack-celeborn dariMarketplaceACKuntuk mendeploy kluster Celeborn menggunakancontainer imageyang telah Anda buat. -
Bangun
Sparkgambar kontainerBuat
container imageSparkdengan dependensi Celeborn danOSS, lalu dorong keimage repositoryAnda. -
Siapkan dan unggah data uji ke
OSSHasilkan set data uji untuk job PageRank dan unggah ke
OSS. -
Jalankan job
SparkcontohJalankan job PageRank contoh dan konfigurasikan agar menggunakan Celeborn sebagai RSS.
-
(Opsional) Bersihkan resource
Setelah tutorial selesai, bersihkan job
Sparkdan resource lain yang tidak diperlukan untuk menghindari biaya.
Langkah 1: Buat container image Celeborn
Unduh release yang diperlukan (misalnya, versi 0.5.2) dari situs web resmi Celeborn. Ganti <IMAGE-REGISTRY> dan <IMAGE-REPOSITORY> dengan registri dan nama image Anda. Anda dapat memodifikasi PLATFORMS untuk menetapkan arsitektur target. Lihat Deploy Celeborn on Kubernetes. Perintah docker buildx memerlukan Docker 19.03 atau yang lebih baru. Lihat Install and use Docker and Docker Compose.
CELEBORN_VERSION=0.5.2 # Versi Celeborn.
IMAGE_REGISTRY=<IMAGE-REGISTRY> # Registri image, misalnya docker.io.
IMAGE_REPOSITORY=<IMAGE-REPOSITORY> # Nama image, misalnya apache/celeborn.
IMAGE_TAG=${CELEBORN_VERSION} # Tag image. Contoh ini menggunakan versi Celeborn sebagai tag.
PLATFORMS=linux/amd64 # Arsitektur platform image. Untuk mendukung beberapa platform, pisahkan dengan koma, misalnya linux/amd64,linux/arm64.
# Unduh paket release.
wget https://downloads.apache.org/celeborn/celeborn-${CELEBORN_VERSION}/apache-celeborn-${CELEBORN_VERSION}-bin.tgz
# Ekstrak paket.
tar -zxvf apache-celeborn-${CELEBORN_VERSION}-bin.tgz
# Masuk ke direktori kerja.
cd apache-celeborn-${CELEBORN_VERSION}-bin
# Gunakan Docker Buildx untuk membuat image dan mendorongnya ke repositori image.
docker buildx build \
--output=type=registry \
--push \
--platform=${PLATFORMS} \
--tag=${IMAGE_REGISTRY}/${IMAGE_REPOSITORY}:${IMAGE_TAG} \
-f docker/Dockerfile \
.
Langkah 2: Deploy komponen ack-celeborn
Masuk ke ACK console. Di panel navigasi kiri, klik .
-
Di halaman Marketplace, klik tab App Catalog, pilih ack-celeborn, lalu di halaman ack-celeborn, klik Deploy.
-
Di panel Create, pilih kluster dan namespace, lalu klik Next.
-
Di halaman Parameters, konfigurasikan parameter, lalu klik OK.
image: # Ganti ini dengan alamat image Celeborn yang Anda buat di Langkah 1. registry: docker.io # Registri image. repository: apache/celeborn # Nama image. tag: 0.5.2 # Tag image. celeborn: celeborn.client.push.stageEnd.timeout: 120s celeborn.master.ha.enabled: true celeborn.master.ha.ratis.raft.server.storage.dir: /mnt/celeborn_ratis celeborn.master.heartbeat.application.timeout: 300s celeborn.master.heartbeat.worker.timeout: 120s celeborn.master.http.port: 9098 celeborn.metrics.enabled: true celeborn.metrics.prometheus.path: /metrics/prometheus celeborn.rpc.dispatcher.numThreads: 4 celeborn.rpc.io.clientThreads: 64 celeborn.rpc.io.numConnectionsPerPeer: 2 celeborn.rpc.io.serverThreads: 64 celeborn.shuffle.chunk.size: 8m celeborn.worker.fetch.io.threads: 32 celeborn.worker.flusher.buffer.size: 256K celeborn.worker.http.port: 9096 celeborn.worker.monitor.disk.enabled: false celeborn.worker.push.io.threads: 32 celeborn.worker.storage.dirs: /mnt/disk1:disktype=SSD:capacity=1024Gi,/mnt/disk2:disktype=SSD:capacity=1024Gi,/mnt/disk3:disktype=SSD:capacity=1024Gi,/mnt/disk4:disktype=SSD:capacity=1024Gi master: replicas: 3 env: - name: CELEBORN_MASTER_MEMORY value: 28g - name: CELEBORN_MASTER_JAVA_OPTS value: -XX:-PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:gc-master.out -Dio.netty.leakDetectionLevel=advanced - name: CELEBORN_NO_DAEMONIZE value: "1" - name: TZ value: Asia/Shanghai volumeMounts: - name: celeborn-ratis mountPath: /mnt/celeborn_ratis resources: requests: cpu: 7 memory: 28Gi limits: cpu: 7 memory: 28Gi volumes: - name: celeborn-ratis hostPath: path: /mnt/celeborn_ratis type: DirectoryOrCreate nodeSelector: celeborn.apache.org/role: master tolerations: - key: celeborn.apache.org/role operator: Equal value: master effect: NoSchedule worker: replicas: 5 env: - name: CELEBORN_WORKER_MEMORY value: 28g - name: CELEBORN_WORKER_OFFHEAP_MEMORY value: 28g - name: CELEBORN_WORKER_JAVA_OPTS value: -XX:-PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:gc-worker.out -Dio.netty.leakDetectionLevel=advanced - name: CELEBORN_NO_DAEMONIZE value: "1" - name: TZ value: Asia/Shanghai volumeMounts: - name: disk1 mountPath: /mnt/disk1 - name: disk2 mountPath: /mnt/disk2 - name: disk3 mountPath: /mnt/disk3 - name: disk4 mountPath: /mnt/disk4 resources: requests: cpu: 14 memory: 56Gi limits: cpu: 14 memory: 56Gi volumes: - name: disk1 hostPath: path: /mnt/disk1 type: DirectoryOrCreate - name: disk2 hostPath: path: /mnt/disk2 type: DirectoryOrCreate - name: disk3 hostPath: path: /mnt/disk3 type: DirectoryOrCreate - name: disk4 hostPath: path: /mnt/disk4 type: DirectoryOrCreate nodeSelector: celeborn.apache.org/role: worker tolerations: - key: celeborn.apache.org/role operator: Equal value: worker effect: NoScheduleTabel berikut menjelaskan parameter utama. Untuk daftar lengkap, lihat bagian ConfigMaps di halaman ack-celeborn.
-
Tunggu hingga deployment Celeborn selesai. Jika Anda mengalami masalah pod, lihat Pod troubleshooting.
kubectl get -n celeborn statefulsetOutput yang diharapkan:
NAME READY AGE celeborn-master 3/3 68s celeborn-worker 5/5 68s
Langkah 3: Buat container image Spark
Contoh ini menggunakan Spark 3.5.3. Buat Dockerfile dengan konten berikut untuk membuat container image dan dorong ke image repository Anda.
ARG SPARK_IMAGE=<SPARK_IMAGE> # Ganti <SPARK_IMAGE> dengan image dasar Spark Anda.
FROM ${SPARK_IMAGE}
# Tambahkan dependensi untuk dukungan Hadoop Aliyun OSS
ADD --chown=spark:spark --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 --chown=spark:spark --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 --chown=spark:spark --chmod=644 https://repo1.maven.org/maven2/org/jdom/jdom2/2.0.6.1/jdom2-2.0.6.1.jar ${SPARK_HOME}/jars
# Tambahkan dependensi untuk Celeborn
ADD --chown=spark:spark --chmod=644 https://repo1.maven.org/maven2/org/apache/celeborn/celeborn-client-spark-3-shaded_2.12/0.5.1/celeborn-client-spark-3-shaded_2.12-0.5.1.jar ${SPARK_HOME}/jars
Langkah 4: Unggah data uji ke OSS
Untuk menyiapkan data uji dan mengunggahnya ke OSS, lihat Step 1: Prepare test data and upload it to OSS.
Langkah 5: Buat Secret OSS
Untuk membuat Secret untuk access credentials OSS, lihat Step 3: Create a Secret to store OSS access credentials.
Langkah 6: Submit job Spark contoh
Buat file manifest SparkApplication bernama spark-pagerank.yaml dengan konten berikut. Ganti <SPARK_IMAGE> dengan image Anda dari Langkah 3: Build a Spark container image, dan ganti <OSS_BUCKET> dan <OSS_ENDPOINT> dengan bucket OSS dan endpoint Anda. Untuk konfigurasi Spark, lihat dokumentasi Celeborn.
apiVersion: sparkoperator.k8s.io/v1beta2
kind: SparkApplication
metadata:
name: spark-pagerank
namespace: default
spec:
type: Scala
mode: cluster
image: <SPARK_IMAGE> # Image Spark. Ganti <SPARK_IMAGE> dengan nama image Spark Anda.
mainApplicationFile: local:///opt/spark/examples/jars/spark-examples_2.12-3.5.3.jar
mainClass: org.apache.spark.examples.SparkPageRank
arguments:
- oss://<OSS_BUCKET>/data/pagerank_dataset.txt # Set data uji input. Ganti <OSS_BUCKET> dengan nama bucket OSS Anda.
- "10" # Jumlah iterasi.
sparkVersion: 3.5.3
hadoopConf:
fs.AbstractFileSystem.oss.impl: org.apache.hadoop.fs.aliyun.oss.OSS
fs.oss.impl: org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem
fs.oss.endpoint: <OSS_ENDPOINT> # Endpoint OSS. Misalnya, endpoint internal untuk OSS di wilayah China (Beijing) adalah oss-cn-beijing-internal.aliyuncs.com.
fs.oss.credentials.provider: com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider
sparkConf:
spark.shuffle.manager: org.apache.spark.shuffle.celeborn.SparkShuffleManager
spark.serializer: org.apache.spark.serializer.KryoSerializer
spark.celeborn.master.endpoints: celeborn-master-0.celeborn-master-svc.celeborn.svc.cluster.local,celeborn-master-1.celeborn-master-svc.celeborn.svc.cluster.local,celeborn-master-2.celeborn-master-svc.celeborn.svc.cluster.local
spark.celeborn.client.spark.shuffle.writer: hash
spark.celeborn.client.push.replicate.enabled: "false"
spark.sql.adaptive.localShuffleReader.enabled: "false"
spark.sql.adaptive.enabled: "true"
spark.sql.adaptive.skewJoin.enabled: "true"
spark.shuffle.sort.io.plugin.class: org.apache.spark.shuffle.celeborn.CelebornShuffleDataIO
spark.dynamicAllocation.shuffleTracking.enabled: "false"
spark.executor.userClassPathFirst: "false"
driver:
cores: 1
coreLimit: 1200m
memory: 512m
serviceAccount: spark-operator-spark
envFrom:
- secretRef:
name: spark-oss-secret
executor:
instances: 2
cores: 1
coreLimit: "2"
memory: 8g
envFrom:
- secretRef:
name: spark-oss-secret
restartPolicy:
type: Never
(Opsional) Langkah 7: Bersihkan resource
Setelah menyelesaikan tutorial ini, hapus resource berikut untuk menghindari biaya.
Hapus job Spark:
kubectl delete sparkapplication spark-pagerank
Hapus resource Secret:
kubectl delete secret spark-oss-secret
Referensi
-
Untuk submit job
Sparkdengan Spark Operator, lihat Use Spark Operator to run Spark jobs. -
Untuk melihat riwayat job
Spark, lihat Use Spark History Server to view information about Spark jobs. -
Lihat dokumentasi Apache Celeborn.