Apache Celeborn adalah Remote Shuffle Service (RSS) yang mengelola data perantara, seperti data shuffle dan spill, untuk mesin komputasi data besar. Topik ini menjelaskan cara men-deploy Celeborn di kluster Alibaba Cloud Container Service for Kubernetes (ACK) serta menggunakannya sebagai RSS untuk pekerjaan Spark.
Manfaat
Celeborn memberikan manfaat berikut untuk beban kerja data besar berbasis MapReduce, Spark, dan Flink:
Push-based shuffle: Mapper tidak perlu menyimpan data di disk lokal. Pendekatan ini sangat cocok untuk arsitektur cloud-native yang memisahkan penyimpanan dari komputasi.
Merge-based shuffle: Data digabungkan di worker, bukan di reducer, sehingga menghilangkan overhead jaringan akibat I/O file kecil acak dan transfer data kecil.
Ketersediaan tinggi: Master menggunakan protokol konsensus Raft untuk mencapai ketersediaan tinggi.
Toleransi kesalahan: Replika ganda secara signifikan mengurangi kemungkinan kegagalan fetch.
Prasyarat
Sebelum memulai, pastikan Anda telah menyelesaikan tugas-tugas berikut:
Menginstal komponen ack-spark-operator. Untuk informasi selengkapnya, lihat Langkah 1: Instal komponen ack-spark-operator.
Menghubungkan klien kubectl ke kluster ACK. Untuk informasi selengkapnya, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.
Membuat bucket Object Storage Service (OSS). Untuk informasi selengkapnya, lihat Buat bucket.
Menginstal dan mengonfigurasi ossutil. Untuk informasi selengkapnya, lihat Instal ossutil, Konfigurasi ossutil, dan Referensi perintah ossutil.
Membuat kelompok node sesuai spesifikasi pada bagian Lingkungan kluster. Untuk informasi selengkapnya, lihat Buat kelompok node.
Lingkungan kluster
Buat dua kelompok node dengan konfigurasi berikut.
kelompok node celeborn-master
Parameter | Nilai |
Nama kelompok node | celeborn-master |
Jumlah node | 3 |
Tipe instans Elastic Compute Service (ECS) | g8i.2xlarge |
Label |
|
Taints |
|
Penyimpanan data per master |
|
kelompok node celeborn-worker
Parameter | Nilai |
Nama kelompok node | celeborn-worker |
Jumlah node | 5 |
Tipe instans ECS | g8i.4xlarge |
Label |
|
Taints |
|
Penyimpanan data per worker |
|
Ikhtisar prosedur
Langkah | Ringkasan |
Unduh rilis Celeborn dan bangun gambar kontainer. Dorong gambar tersebut ke repositori Container Registry Anda. | |
Instal Helm chart ack-celeborn dari Marketplace Konsol ACK untuk men-deploy kluster Celeborn. | |
Bangun gambar Spark yang mencakup JAR klien Celeborn dan dependensi OSS. Dorong gambar tersebut ke repositori Container Registry Anda. | |
Buat set data uji PageRank dan unggah ke OSS. | |
Buat Kubernetes Secret yang menyimpan kredensial untuk mengakses OSS. | |
Jalankan pekerjaan PageRank yang menggunakan Celeborn sebagai layanan shuffle-nya. | |
Hapus pekerjaan Spark dan lepas sumber daya. |
Langkah 1: Bangun gambar kontainer Celeborn
Unduh paket rilis Celeborn dari situs web resmi Celeborn, bangun gambar kontainer, lalu dorong ke repositori Container Registry Anda. Untuk informasi lebih lanjut tentang men-deploy Celeborn di Kubernetes, lihat Deploy Celeborn di Kubernetes.
Perintah docker buildx memerlukan Docker 19.03 atau versi yang lebih baru. Untuk informasi selengkapnya, lihat Instal Docker.Ganti <IMAGE-REGISTRY> dan <IMAGE-REPOSITORY> dengan alamat Container Registry dan nama gambar Anda. Ubah variabel PLATFORMS untuk menentukan arsitektur target.
CELEBORN_VERSION=0.5.2 # Versi Celeborn.
IMAGE_REGISTRY=<IMAGE-REGISTRY> # Alamat Container Registry, misalnya docker.io.
IMAGE_REPOSITORY=<IMAGE-REPOSITORY> # Nama gambar, misalnya apache/celeborn.
IMAGE_TAG=${CELEBORN_VERSION} # Tag gambar. Secara default menggunakan versi Celeborn.
# Unduh paket distribusi.
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
# Bangun dan dorong gambar ke Container Registry.
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 Container Service Management Console atau . Di panel navigasi sebelah kiri, klik .
Pada halaman Marketplace, klik tab App Catalog. Temukan dan klik ack-celeborn. Pada halaman ack-celeborn, klik Deploy.
Pada panel Deploy, pilih kluster dan namespace, pertahankan nama rilis default, lalu klik Next.
Pada langkah Parameters, konfigurasikan parameter dan klik OK. YAML berikut menunjukkan contoh konfigurasi. Ganti alamat gambar dengan gambar yang Anda bangun di Langkah 1. Tabel berikut menjelaskan parameter utama. Untuk daftar lengkap, lihat bagian Parameters di halaman ack-celeborn.
image: # Ganti dengan gambar Celeborn dari Langkah 1. registry: docker.io # Alamat Container Registry. repository: apache/celeborn # Nama gambar. tag: 0.5.2 # Tag gambar. 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: NoScheduleVerifikasi bahwa kluster Celeborn sedang berjalan. Jika pod gagal dimulai, lihat troubleshooting Pod. Output yang diharapkan:
kubectl get -n celeborn statefulsetNAME READY AGE celeborn-master 3/3 68s celeborn-worker 5/5 68s
Langkah 3: Bangun gambar kontainer Spark
Bangun gambar Spark yang mencakup JAR klien Celeborn dan JAR yang diperlukan untuk mengakses OSS. Lalu dorong gambar tersebut ke repositori Container Registry Anda.
Contoh ini menggunakan Spark 3.5.3. Buat Dockerfile dengan konten berikut dan ganti <SPARK_IMAGE> dengan gambar dasar Spark Anda.
ARG SPARK_IMAGE=<SPARK_IMAGE> # Ganti <SPARK_IMAGE> dengan gambar 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 klien 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}/jarsVersi JAR klien Celeborn (0.5.1) berbeda dari versi server Celeborn (0.5.2) yang di-deploy di Langkah 2. Klien versi 0.5.1 kompatibel dengan server versi 0.5.2. Gunakan versi JAR klien yang ditentukan di atas.
Langkah 4: Siapkan dan unggah data uji ke OSS
Buat set data uji PageRank dan unggah ke bucket OSS Anda. Untuk instruksi detail, lihat Siapkan dan unggah data uji ke bucket OSS.
Langkah 5: Buat Secret untuk menyimpan kredensial akses OSS
Buat Kubernetes Secret untuk menyimpan kredensial akses OSS. Untuk instruksi detail, lihat Buat Secret untuk menyimpan kredensial akses OSS.
Langkah 6: Kirim pekerjaan Spark contoh
Buat file bernama spark-pagerank.yaml dengan konten berikut.
Ganti placeholder berikut:
Placeholder | Deskripsi | Contoh |
| Alamat gambar Spark dari Langkah 3. |
|
| Nama bucket OSS Anda. |
|
| Titik akhir bucket OSS Anda. |
|
Untuk informasi lebih lanjut tentang konfigurasi Spark Celeborn, lihat dokumentasi Celeborn.
apiVersion: sparkoperator.k8s.io/v1beta2
kind: SparkApplication
metadata:
name: spark-pagerank
namespace: default
spec:
type: Scala
mode: cluster
image: <SPARK_IMAGE> # Gambar Spark.
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.
- "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> # Titik akhir OSS.
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 lingkungan
Setelah menyelesaikan semua langkah, hapus pekerjaan Spark dan sumber daya terkait jika tidak lagi diperlukan.
Hapus pekerjaan Spark:
kubectl delete sparkapplication spark-pagerankHapus Secret:
kubectl delete secret spark-oss-secret