
随着企业数据规模的快速增长,传统物理机或虚拟机部署Apache DolphinScheduler面临着环境配置复杂、资源利用率低、扩展性差等痛点。特别是在需要运行Spark等大数据计算任务时,手动维护多套环境、处理依赖冲突、应对突发流量等问题更是让运维团队疲于奔命。
Kubernetes云原生部署为这些问题提供了优雅的解决方案——通过容器化实现环境一致性,利用共享存储解决Spark等二进制文件的分发难题,配合自动扩缩容实现资源的弹性利用。
为此,本文将深入探讨在Kubernetes环境中部署Apache DolphinScheduler并集成Spark作业的完整实践,帮助你从零构建一个高可用、易扩展的云原生调度平台。

helm repo add dolphinscheduler https://dolphinscheduler.apache.org/helm helm repo update
kubectl create namespace dolphinscheduler
创建自定义的
values.yaml文件,关键配置如下:
# 共享存储配置 - 关键配置,用于存储Spark等二进制文件 common: sharedStoragePersistence: enabled: true # 必须启用以支持Spark mountPath: "/opt/soft" accessModes: - "ReadWriteMany" storageClassName: "your-storage-class" # 替换为实际的存储类 storage: "20Gi" configmap: # Spark环境变量配置 SPARK_HOME: "/opt/soft/spark" HADOOP_HOME: "/opt/soft/hadoop" HADOOP_CONF_DIR: "/opt/soft/hadoop/etc/hadoop" JAVA_HOME: "/opt/java/openjdk" # 数据库配置(使用外部数据库) externalDatabase: enabled: true host: "your-mysql-host" port: "3306" database: "dolphinscheduler" username: "root" password: "your-password" type: "mysql" # Worker配置 worker: replicas: 2 env: WORKER_EXEC_THREADS: "10"
helm install dolphinscheduler dolphinscheduler/dolphinscheduler \ --namespace dolphinscheduler \ --values values.yaml \ --version 3.2.0 # 使用具体版本号
# 查看Pod状态 kubectl get pods -n dolphinscheduler # 查看服务 kubectl get svc -n dolphinscheduler # 查看PVC状态 kubectl get pvc -n dolphinscheduler
# 下载Spark 3.2.1为例 wget https://archive.apache.org/dist/spark/spark-3.2.1/spark-3.2.1-bin-hadoop2.7.tgz
由于共享存储已挂载到
/opt/soft,只需复制到一个Worker Pod即可:
# 复制Spark二进制包到容器 kubectl cp spark-3.2.1-bin-hadoop2.7.tgz dolphinscheduler-worker-0:/opt/soft -n dolphinscheduler # 进入容器解压 kubectl exec -it dolphinscheduler-worker-0 -n dolphinscheduler bash cd /opt/soft tar zxf spark-3.2.1-bin-hadoop2.7.tgz rm -f spark-3.2.1-bin-hadoop2.7.tgz ln -s spark-3.2.1-bin-hadoop2.7 spark # 验证Spark安装 $SPARK_HOME/bin/spark-submit --version
如果需要使用Spark on YARN模式,还需要配置Hadoop:
# 下载Hadoop二进制包 wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz # 复制到容器 kubectl cp hadoop-3.3.1.tar.gz dolphinscheduler-worker-0:/opt/soft -n dolphinscheduler # 解压配置 kubectl exec -it dolphinscheduler-worker-0 -n dolphinscheduler bash cd /opt/soft tar zxf hadoop-3.3.1.tar.gz rm -f hadoop-3.3.1.tar.gz ln -s hadoop-3.3.1 hadoop # 配置Hadoop环境变量(已在values.yaml中配置) export HADOOP_HOME=/opt/soft/hadoop export HADOOP_CONF_DIR=/opt/soft/hadoop/etc/hadoop
首先通过Shell任务验证Spark环境:
在DolphinScheduler Web UI中创建Shell任务:
$SPARK_HOME/bin/spark-submit --class org.apache.spark.examples.SparkPi \ $SPARK_HOME/examples/jars/spark-examples_2.12-3.2.1.jar
检查任务日志是否包含输出
Pi is roughly 3.14...。
spark-examples_2.12-3.2.1.jarorg.apache.spark.examples.SparkPispark-examples_2.12-3.2.1.jarlocallocal[*]创建Spark SQL任务:
-- 创建测试表 CREATE TABLE IF NOT EXISTS test_table ( id INT, name STRING ) USING parquet; -- 插入测试数据 INSERT INTO test_table VALUES (1, 'test'), (2, 'dolphinscheduler'); -- 查询数据 SELECT * FROM test_table;
配置参数:
locallocal[*]根据DolphinScheduler文档,当前Kubernetes部署中对不同Spark模式的支持情况:
| 模式 | 支持状态 | 说明 |
|---|---|---|
| Spark-Local(client) | 间接支持 | 需要配置共享存储和Spark二进制 |
| Spark-YARN(cluster) | 间接支持 | 需要额外配置Hadoop环境 |
| Spark-Standalone(cluster) | 尚不支持 | - |
| Spark-Kubernetes(cluster) | 尚不支持 | 原生K8s模式暂未实现 |
如果需要预装Spark,可以构建自定义Worker镜像:
FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-worker:3.2.0 # 安装Spark RUN wget https://archive.apache.org/dist/spark/spark-3.2.1/spark-3.2.1-bin-hadoop2.7.tgz && \ tar zxf spark-3.2.1-bin-hadoop2.7.tgz -C /opt/soft && \ rm -f spark-3.2.1-bin-hadoop2.7.tgz && \ ln -s /opt/soft/spark-3.2.1-bin-hadoop2.7 /opt/soft/spark # 设置环境变量 ENV SPARK_HOME=/opt/soft/spark
构建并推送镜像:
docker build -t your-registry/dolphinscheduler-worker:spark . docker push your-registry/dolphinscheduler-worker:spark
修改
values.yaml:
worker: image: repository: your-registry/dolphinscheduler-worker tag: spark
为Worker配置资源限制:
worker: resources: limits: memory: "8Gi" cpu: "4" requests: memory: "4Gi" cpu: "2"
DolphinScheduler支持基于KEDA的Worker自动扩缩容:
# 安装KEDA kubectl create namespace keda helm install keda kedacore/keda --namespace keda --version v2.0.0 # 启用Worker自动扩缩容 helm upgrade dolphinscheduler dolphinscheduler/dolphinscheduler \ --namespace dolphinscheduler \ --set worker.keda.enabled=true \ --set worker.keda.minReplicaCount=1 \ --set worker.keda.maxReplicaCount=10
# 查看Worker日志 kubectl logs dolphinscheduler-worker-0 -n dolphinscheduler -f # 查看特定任务日志 kubectl logs dolphinscheduler-worker-0 -n dolphinscheduler | grep "task"
# 检查PVC状态 kubectl get pvc -n dolphinscheduler # 进入容器验证挂载 kubectl exec -it dolphinscheduler-worker-0 -n dolphinscheduler bash df -h | grep opt/soft ls -la /opt/soft
kubectl exec -it dolphinscheduler-worker-0 -n dolphinscheduler bash echo $SPARK_HOME echo $HADOOP_HOME $SPARK_HOME/bin/spark-submit --version
问题1:Spark命令找不到
SPARK_HOME环境变量是否正确配置/opt/soft问题2:共享存储无法挂载
问题3:Spark on YARN失败
HADOOP_CONF_DIR指向正确的配置目录本文基于Apache DolphinScheduler 3.2.0版本编写,不同版本可能存在配置差异。Spark-Kubernetes(cluster)原生模式在当前版本中尚不支持,如需此功能需等待后续版本更新。实际部署时请根据具体环境调整配置参数,特别是存储类、数据库连接等环境相关配置。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70014275/viewspace-3176453/ ,如需转载,请注明出处,否则将追究法律责任。