DolphinScheduler 之Docker 部署
Posted Maynor学长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DolphinScheduler 之Docker 部署相关的知识,希望对你有一定的参考价值。
文章目录
- 快速试用 Docker 部署
- 先决条件
- 如何使用 Docker 镜像
- 环境变量
- 支持矩阵
- FAQ
- 如何通过 docker-compose 管理 DolphinScheduler?
- 如何查看一个容器的日志?
- 如何通过 docker-compose 扩缩容 master 和 worker?
- 如何在 Docker Swarm 上部署 DolphinScheduler?
- 如何在 Docker Swarm 上扩缩容 master 和 worker?
- 如何构建一个 Docker 镜像?
- 如何为 Docker 添加一个环境变量?
- 如何用 MySQL 替代 PostgreSQL 作为 DolphinScheduler 的数据库?
- 如何在数据源中心支持 MySQL 数据源?
- 如何在数据源中心支持 Oracle 数据源?
- 如何支持 Python 2 pip 以及自定义 requirements.txt?
- 如何支持 Python 3?
- 如何支持 Hadoop, Spark, Flink, Hive 或 DataX?
- 如何支持 Spark 3?
- 如何在 Master、Worker 和 Api 服务之间支持共享存储?
- 如何支持本地文件存储而非 HDFS 和 S3?
- 如何支持 S3 资源存储,例如 MinIO?
- 如何配置 SkyWalking?
- 附录-环境变量
快速试用 Docker 部署
先决条件
- Docker 1.13.1+
- Docker Compose 1.11.0+
如何使用 Docker 镜像
有 3 种方式可以快速试用 DolphinScheduler
一、以 docker-compose 的方式启动 DolphinScheduler (推荐)
这种方式需要先安装 docker-compose, docker-compose 的安装网上已经有非常多的资料,请自行安装即可
对于 Windows 7-10,你可以安装 Docker Toolbox。对于 Windows 10 64-bit,你可以安装 Docker Desktop,并且注意系统要求
0、请配置内存不少于 4GB
对于 Mac 用户,点击 Docker Desktop -> Preferences -> Resources -> Memory
对于 Windows Docker Toolbox 用户,有两项需要配置:
- 内存:打开 Oracle VirtualBox Manager,如果你双击 Docker Quickstart Terminal 并成功运行 Docker Toolbox,你将会看到一个名为
default
的虚拟机. 点击设置 -> 系统 -> 主板 -> 内存大小
- 端口转发:点击
设置 -> 网络 -> 高级 -> 端口转发 -> 添加
.名称
,主机端口
和子系统端口
都填写12345
,不填主机IP
和子系统IP
对于 Windows Docker Desktop 用户
- Hyper-V 模式:点击
Docker Desktop -> Settings -> Resources -> Memory
- WSL 2 模式:参考 WSL 2 utility VM
1、下载源码包
请下载源码包 apache-dolphinscheduler-1.3.9-src.tar.gz,下载地址: 下载
2、拉取镜像并启动服务
对于 Mac 和 Linux 用户,打开 Terminal 对于 Windows Docker Toolbox 用户,打开 Docker Quickstart Terminal 对于 Windows Docker Desktop 用户,打开 Windows PowerShell
$ tar -zxvf apache-dolphinscheduler-1.3.9-src.tar.gz
$ cd apache-dolphinscheduler-1.3.9-src/docker/docker-swarm
$ docker pull dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler:1.3.9
$ docker tag apache/dolphinscheduler:1.3.9 apache/dolphinscheduler:latest
$ docker-compose up -d
PowerShell 应该使用
cd apache-dolphinscheduler-1.3.9-src\\docker\\docker-swarm
PostgreSQL (用户 root
, 密码 root
, 数据库 dolphinscheduler
) 和 ZooKeeper 服务将会默认启动
3、登录系统
访问前端页面:http://localhost:12345/dolphinscheduler,如果有需要请修改成对应的 IP 地址
默认的用户是admin
,默认的密码是dolphinscheduler123
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kTqmLfVE-1646312172369)(https://dolphinscheduler.apache.org/img/login.png)]
请参考用户手册章节的快速上手 查看如何使用DolphinScheduler
二、通过指定已存在的 PostgreSQL 和 ZooKeeper 服务
这种方式需要先安装 docker, docker 的安装网上已经有非常多的资料,请自行安装即可
1、基础软件安装 (请自行安装)
- PostgreSQL (8.2.15+)
- ZooKeeper (3.4.6+)
- Docker (1.13.1+)
2、请登录 PostgreSQL 数据库,创建名为 dolphinscheduler
数据库
3、初始化数据库,导入 sql/dolphinscheduler_postgre.sql
进行创建表及基础数据导入
4、下载 DolphinScheduler 镜像
我们已将面向用户的 DolphinScheduler 镜像上传至 docker 仓库,用户无需在本地构建镜像,直接执行以下命令从 docker 仓库 pull 镜像:
docker pull dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler:1.3.9
5、运行一个 DolphinScheduler 实例
$ docker run -d --name dolphinscheduler \\
-e DATABASE_HOST="192.168.x.x" -e DATABASE_PORT="5432" -e DATABASE_DATABASE="dolphinscheduler" \\
-e DATABASE_USERNAME="test" -e DATABASE_PASSWORD="test" \\
-e ZOOKEEPER_QUORUM="192.168.x.x:2181" \\
-p 12345:12345 \\
apache/dolphinscheduler:1.3.9 all
注:数据库用户 test 和密码 test 需要替换为实际的 PostgreSQL 用户和密码,192.168.x.x 需要替换为 PostgreSQL 和 ZooKeeper 的主机 IP
6、登录系统
同上
三、运行 DolphinScheduler 中的独立服务
在容器启动时,会自动启动以下服务:
MasterServer ----- master服务
WorkerServer ----- worker服务
LoggerServer ----- logger服务
ApiApplicationServer ----- api服务
AlertServer ----- alert服务
如果你只是想运行 dolphinscheduler 中的部分服务
你可以够通执行以下命令来运行dolphinscheduler中的部分服务
- 启动一个 master server, 如下:
$ docker run -d --name dolphinscheduler-master \\
-e DATABASE_HOST="192.168.x.x" -e DATABASE_PORT="5432" -e DATABASE_DATABASE="dolphinscheduler" \\
-e DATABASE_USERNAME="test" -e DATABASE_PASSWORD="test" \\
-e ZOOKEEPER_QUORUM="192.168.x.x:2181" \\
apache/dolphinscheduler:1.3.9 master-server
- 启动一个 worker server (包括 logger server), 如下:
$ docker run -d --name dolphinscheduler-worker \\
-e DATABASE_HOST="192.168.x.x" -e DATABASE_PORT="5432" -e DATABASE_DATABASE="dolphinscheduler" \\
-e DATABASE_USERNAME="test" -e DATABASE_PASSWORD="test" \\
-e ZOOKEEPER_QUORUM="192.168.x.x:2181" \\
apache/dolphinscheduler:1.3.9 worker-server
- 启动一个 api server, 如下:
$ docker run -d --name dolphinscheduler-api \\
-e DATABASE_HOST="192.168.x.x" -e DATABASE_PORT="5432" -e DATABASE_DATABASE="dolphinscheduler" \\
-e DATABASE_USERNAME="test" -e DATABASE_PASSWORD="test" \\
-e ZOOKEEPER_QUORUM="192.168.x.x:2181" \\
-p 12345:12345 \\
apache/dolphinscheduler:1.3.9 api-server
- 启动一个 alert server, 如下:
$ docker run -d --name dolphinscheduler-alert \\
-e DATABASE_HOST="192.168.x.x" -e DATABASE_PORT="5432" -e DATABASE_DATABASE="dolphinscheduler" \\
-e DATABASE_USERNAME="test" -e DATABASE_PASSWORD="test" \\
apache/dolphinscheduler:1.3.9 alert-server
注意: 当你运行dolphinscheduler中的部分服务时,你必须指定这些环境变量 DATABASE_HOST
, DATABASE_PORT
, DATABASE_DATABASE
, DATABASE_USERNAME
, DATABASE_PASSWORD
, ZOOKEEPER_QUORUM
。
环境变量
Docker 容器通过环境变量进行配置,附录-环境变量 列出了 DolphinScheduler 的可配置环境变量及其默认值
特别地,在 Docker Compose 和 Docker Swarm 中,可以通过环境变量配置文件 config.env.sh
进行配置
支持矩阵
Type | 支持 | 备注 |
---|---|---|
Shell | 是 | |
Python2 | 是 | |
Python3 | 间接支持 | 详见 FAQ |
Hadoop2 | 间接支持 | 详见 FAQ |
Hadoop3 | 尚未确定 | 尚未测试 |
Spark-Local(client) | 间接支持 | 详见 FAQ |
Spark-YARN(cluster) | 间接支持 | 详见 FAQ |
Spark-Standalone(cluster) | 尚不 | |
Spark-Kubernetes(cluster) | 尚不 | |
Flink-Local(local>=1.11) | 尚不 | Generic CLI 模式尚未支持 |
Flink-YARN(yarn-cluster) | 间接支持 | 详见 FAQ |
Flink-YARN(yarn-session/yarn-per-job/yarn-application>=1.11) | 尚不 | Generic CLI 模式尚未支持 |
Flink-Standalone(default) | 尚不 | |
Flink-Standalone(remote>=1.11) | 尚不 | Generic CLI 模式尚未支持 |
Flink-Kubernetes(default) | 尚不 | |
Flink-Kubernetes(remote>=1.11) | 尚不 | Generic CLI 模式尚未支持 |
Flink-NativeKubernetes(kubernetes-session/application>=1.11) | 尚不 | Generic CLI 模式尚未支持 |
MapReduce | 间接支持 | 详见 FAQ |
Kerberos | 间接支持 | 详见 FAQ |
HTTP | 是 | |
DataX | 间接支持 | 详见 FAQ |
Sqoop | 间接支持 | 详见 FAQ |
SQL-mysql | 间接支持 | 详见 FAQ |
SQL-PostgreSQL | 是 | |
SQL-Hive | 间接支持 | 详见 FAQ |
SQL-Spark | 间接支持 | 详见 FAQ |
SQL-ClickHouse | 间接支持 | 详见 FAQ |
SQL-Oracle | 间接支持 | 详见 FAQ |
SQL-SQLServer | 间接支持 | 详见 FAQ |
SQL-DB2 | 间接支持 | 详见 FAQ |
FAQ
如何通过 docker-compose 管理 DolphinScheduler?
启动、重启、停止或列出所有容器:
docker-compose start
docker-compose restart
docker-compose stop
docker-compose ps
停止所有容器并移除所有容器、网络:
docker-compose down
停止所有容器并移除所有容器、网络和存储卷:
docker-compose down -v
如何查看一个容器的日志?
列出所有运行的容器:
docker ps
docker ps --format ".Names" # 只打印名字
查看名为 docker-swarm_dolphinscheduler-api_1 的容器的日志:
docker logs docker-swarm_dolphinscheduler-api_1
docker logs -f docker-swarm_dolphinscheduler-api_1 # 跟随日志输出
docker logs --tail 10 docker-swarm_dolphinscheduler-api_1 # 显示倒数10行日志
如何通过 docker-compose 扩缩容 master 和 worker?
扩缩容 master 至 2 个实例:
docker-compose up -d --scale dolphinscheduler-master=2 dolphinscheduler-master
扩缩容 worker 至 3 个实例:
docker-compose up -d --scale dolphinscheduler-worker=3 dolphinscheduler-worker
如何在 Docker Swarm 上部署 DolphinScheduler?
假设 Docker Swarm 集群已经部署(如果还没有创建 Docker Swarm 集群,请参考 create-swarm)
启动名为 dolphinscheduler 的 stack:
docker stack deploy -c docker-stack.yml dolphinscheduler
列出名为 dolphinscheduler 的 stack 的所有服务:
docker stack services dolphinscheduler
停止并移除名为 dolphinscheduler 的 stack:
docker stack rm dolphinscheduler
移除名为 dolphinscheduler 的 stack 的所有存储卷:
docker volume rm -f $(docker volume ls --format ".Name" | grep -e "^dolphinscheduler")
如何在 Docker Swarm 上扩缩容 master 和 worker?
扩缩容名为 dolphinscheduler 的 stack 的 master 至 2 个实例:
docker service scale dolphinscheduler_dolphinscheduler-master=2
扩缩容名为 dolphinscheduler 的 stack 的 worker 至 3 个实例:
docker service scale dolphinscheduler_dolphinscheduler-worker=3
如何构建一个 Docker 镜像?
从源码构建 (需要 Maven 3.3+ & JDK 1.8+)
类 Unix 系统,在 Terminal 中执行:
$ bash ./docker/build/hooks/build
Windows 系统,在 cmd 或 PowerShell 中执行:
C:\\dolphinscheduler-src>.\\docker\\build\\hooks\\build.bat
如果你不理解 ./docker/build/hooks/build
./docker/build/hooks/build.bat
这些脚本,请阅读里面的内容
从二进制包构建 (不需要 Maven 3.3+ & JDK 1.8+)
请下载二进制包 apache-dolphinscheduler-1.3.9-bin.tar.gz,下载地址: 下载. 然后将 apache-dolphinscheduler-1.3.9-bin.tar.gz 放到 apache-dolphinscheduler-1.3.9-src/docker/build
目录里,在 Terminal 或 PowerShell 中执行:
$ cd apache-dolphinscheduler-1.3.9-src/docker/build
$ docker build --build-arg VERSION=1.3.9 -t apache/dolphinscheduler:1.3.9 .
PowerShell 应该使用
cd apache-dolphinscheduler-1.3.9-src/docker/build
构建多平台架构镜像
目前支持构建 linux/amd64
和 linux/arm64
平台架构的镜像,要求:
- 支持 docker buildx
- 具有 https://hub.docker.com/r/apache/dolphinscheduler 的 push 权限(务必谨慎: 构建命令默认会自动将多平台架构镜像推送到 apache/dolphinscheduler 的 docker hub)
执行:
$ docker login # 登录, 用于推送 apache/dolphinscheduler
$ bash ./docker/build/hooks/build x
如何为 Docker 添加一个环境变量?
如果你想在编译的时候或者运行的时候附加一些其它的操作及新增一些环境变量,你可以在/root/start-init-conf.sh
文件中进行修改,同时如果涉及到配置文件的修改,请在/opt/dolphinscheduler/conf/*.tpl
中修改相应的配置文件
例如,在/root/start-init-conf.sh
添加一个环境变量SECURITY_AUTHENTICATION_TYPE
:
export SECURITY_AUTHENTICATION_TYPE=PASSWORD
当添加以上环境变量后,你应该在相应的模板文件application-api.properties.tpl
中添加这个环境变量配置:
security.authentication.type=$SECURITY_AUTHENTICATION_TYPE
/root/start-init-conf.sh
将根据模板文件动态的生成配置文件:
echo "generate dolphinscheduler config"
ls $DOLPHINSCHEDULER_HOME/conf/ | grep ".tpl" | while read line; do
eval "cat << EOF
$(cat $DOLPHINSCHEDULER_HOME/conf/$line)
EOF
" > $DOLPHINSCHEDULER_HOME/conf/$line%.*
done
如何用 MySQL 替代 PostgreSQL 作为 DolphinScheduler 的数据库?
由于商业许可证的原因,我们不能直接使用 MySQL 的驱动包.
如果你要使用 MySQL, 你可以基于官方镜像
apache/dolphinscheduler
进行构建.
- 下载 MySQL 驱动包 mysql-connector-java-5.1.49.jar (要求
>=5.1.47
) - 创建一个新的
Dockerfile
,用于添加 MySQL 的驱动包:
FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler:1.3.9
COPY mysql-connector-java-5.1.49.jar /opt/dolphinscheduler/lib
- 构建一个包含 MySQL 驱动包的新镜像:
docker build -t apache/dolphinscheduler:mysql-driver .
- 修改
docker-compose.yml
文件中的所有 image 字段为apache/dolphinscheduler:mysql-driver
如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改
docker-stack.yml
- 注释
docker-compose.yml
文件中的dolphinscheduler-postgresql
块 - 在
docker-compose.yml
文件中添加dolphinscheduler-mysql
服务(可选,你可以直接使用一个外部的 MySQL 数据库) - 修改
config.env.sh
文件中的 DATABASE 环境变量
DATABASE_TYPE=mysql
DATABASE_DRIVER=com.mysql.jdbc.Driver
DATABASE_HOST=dolphinscheduler-mysql
DATABASE_PORT=3306
DATABASE_USERNAME=root
DATABASE_PASSWORD=root
DATABASE_DATABASE=dolphinscheduler
DATABASE_PARAMS=useUnicode=true&characterEncoding=UTF-8
如果你已经添加了
dolphinscheduler-mysql
服务,设置DATABASE_HOST
为dolphinscheduler-mysql
即可
- 运行 dolphinscheduler (详见如何使用docker镜像)
如何在数据源中心支持 MySQL 数据源?
由于商业许可证的原因,我们不能直接使用 MySQL 的驱动包.
如果你要添加 MySQL 数据源, 你可以基于官方镜像
apache/dolphinscheduler
进行构建.
- 下载 MySQL 驱动包 mysql-connector-java-5.1.49.jar (要求
>=5.1.47
) - 创建一个新的
Dockerfile
,用于添加 MySQL 驱动包:
FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler:1.3.9
COPY mysql-connector-java-5.1.49.jar /opt/dolphinscheduler/lib
- 构建一个包含 MySQL 驱动包的新镜像:
docker build -t apache/dolphinscheduler:mysql-driver .
- 将
docker-compose.yml
文件中的所有image
字段修改为apache/dolphinscheduler:mysql-driver
如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改
docker-stack.yml
- 运行 dolphinscheduler (详见如何使用docker镜像)
- 在数据源中心添加一个 MySQL 数据源
如何在数据源中心支持 Oracle 数据源?
由于商业许可证的原因,我们不能直接使用 Oracle 的驱动包.
如果你要添加 Oracle 数据源, 你可以基于官方镜像
apache/dolphinscheduler
进行构建.
- 下载 Oracle 驱动包 ojdbc8.jar (such as
ojdbc8-19.9.0.0.jar
) - 创建一个新的
Dockerfile
,用于添加 Oracle 驱动包:
FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler:1.3.9
COPY ojdbc8-19.9.0.0.jar /opt/dolphinscheduler/lib
- 构建一个包含 Oracle 驱动包的新镜像:
docker build -t apache/dolphinscheduler:oracle-driver .
- 将
docker-compose.yml
文件中的所有image
字段修改为apache/dolphinscheduler:oracle-driver
如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改
docker-stack.yml
- 运行 dolphinscheduler (详见如何使用docker镜像)
- 在数据源中心添加一个 Oracle 数据源
如何支持 Python 2 pip 以及自定义 requirements.txt?
- 创建一个新的
Dockerfile
,用于安装 pip:
FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler:1.3.9
COPY requirements.txt /tmp
RUN apt-get update && \\
apt-get install -y --no-install-recommends python-pip && \\
pip install --no-cache-dir -r /tmp/requirements.txt && \\
rm -rf /var/lib/apt/lists/*
这个命令会安装默认的 pip 18.1. 如果你想升级 pip, 只需添加一行
pip install --no-cache-dir -U pip && \\
- 构建一个包含 pip 的新镜像:
docker build -t apache/dolphinscheduler:pip .
- 将
docker-compose.yml
文件中的所有image
字段修改为apache/dolphinscheduler:pip
如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改
docker-stack.yml
- 运行 dolphinscheduler (详见如何使用docker镜像)
- 在一个新 Python 任务下验证 pip
如何支持 Python 3?
- 创建一个新的
Dockerfile
,用于安装 Python 3:
FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler:1.3.9
RUN apt-get update && \\
apt-get install -y --no-install-recommends python3 && \\
rm -rf /var/lib/apt/lists/*
这个命令会安装默认的 Python 3.7.3. 如果你也想安装 pip3, 将 python3
替换为 python3-pip
即可
apt-get install -y --no-install-recommends python3-pip && \\
- 构建一个包含 Python 3 的新镜像:
docker build -t apache/dolphinscheduler:python3 .
- 将
docker-compose.yml
文件中的所有image
字段修改为apache/dolphinscheduler:python3
如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改
docker-stack.yml
- 修改
config.env.sh
文件中的PYTHON_HOME
为/usr/bin/python3
- 运行 dolphinscheduler (详见如何使用docker镜像)
- 在一个新 Python 任务下验证 Python 3
如何支持 Hadoop, Spark, Flink, Hive 或 DataX?
以 Spark 2.4.7 为例:
- 下载 Spark 2.4.7 发布的二进制包
spark-2.4.7-bin-hadoop2.7.tgz
- 运行 dolphinscheduler (详见如何使用docker镜像)
- 复制 Spark 2.4.7 二进制包到 Docker 容器中
docker cp spark-2.4.7-bin-hadoop2.7.tgz docker-swarm_dolphinscheduler-worker_1:/opt/soft
因为存储卷 dolphinscheduler-shared-local
被挂载到 /opt/soft
, 因此 /opt/soft
中的所有文件都不会丢失
- 登录到容器并确保
SPARK_HOME2
存在
docker exec -it docker-swarm_dolphinscheduler-worker_1 bash
cd /opt/soft
tar zxf spark-2.4.7-bin-hadoop2.7.tgz
rm -f spark-2.4.7-bin-hadoop2.7.tgz
ln -s spark-2.4.7-bin-hadoop2.7 spark2 # 或者 mv
$SPARK_HOME2/bin/spark-submit --version
如果一切执行正常,最后一条命令将会打印 Spark 版本信息
- 在一个 Shell 任务下验证 Spark
$SPARK_HOME2/bin/spark-submit --class org.apache.spark.examples.SparkPi $SPARK_HOME2/examples/jars/spark-examples_2.11-2.4.7.jar
检查任务日志是否包含输出 Pi is roughly 3.146015
- 在一个 Spark 任务下验证 Spark
文件 spark-examples_2.11-2.4.7.jar
需要先被上传到资源中心,然后创建一个 Spark 任务并设置:
- Spark版本:
SPARK2
- 主函数的Class:
org.apache.spark.examples.SparkPi
- 主程序包:
spark-examples_2.11-2.4.7.jar
- 部署方式:
local
同样地, 检查任务日志是否包含输出 Pi is roughly 3.146015
- 验证 Spark on YARN
Spark on YARN (部署方式为 cluster
或 client
) 需要 Hadoop 支持. 类似于 Spark 支持, 支持 Hadoop 的操作几乎和前面的步骤相同
确保 $HADOOP_HOME
和 $HADOOP_CONF_DIR
存在
如何支持 Spark 3?
事实上,使用 spark-submit
提交应用的方式是相同的, 无论是 Spark 1, 2 或 3. 换句话说,SPARK_HOME2
的语义是第二个 SPARK_HOME
, 而非 SPARK2
的 HOME
, 因此只需设置 SPARK_HOME2=/path/to/spark3
即可
以 Spark 3.1.1 为例:
- 下载 Spark 3.1.1 发布的二进制包
spark-3.1.1-bin-hadoop2.7.tgz
- 运行 dolphinscheduler (详见如何使用docker镜像)
- 复制 Spark 3.1.1 二进制包到 Docker 容器中
docker cp spark-3.1.1-bin-hadoop2.7.tgz docker-swarm_dolphinscheduler-worker_1:/opt/soft
- 登录到容器并确保
SPARK_HOME2
存在
docker exec -it docker-swarm_dolphinscheduler-worker_1 bash
cd /opt/soft
tar zxf spark-3.1.1-bin-hadoop2.7.tgz
rm -f spark-3.1.1-bin-hadoop2.7.tgz
ln -s spark-3.1.1-bin-hadoop2.7 spark2 # 或者 mv
$SPARK_HOME2/bin/spark-submit --version
如果一切执行正常,最后一条命令将会打印 Spark 版本信息
- 在一个 Shell 任务下验证 Spark
$SPARK_HOME2/bin/spark-submit --class org.apache.spark.examples.SparkPi $SPARK_HOME2/examples/jars/spark-examples_2.12-3.1.1.jar
检查任务日志是否包含输出 Pi is roughly 3.146015
如何在 Master、Worker 和 Api 服务之间支持共享存储?
注意: 如果是在单机上通过 docker-compose 部署,则步骤 1 和 2 可以直接跳过,并且执行命令如
docker cp hadoop-3.2.2.tar.gz docker-swarm_dolphinscheduler-worker_1:/opt/soft
将 Hadoop 放到容器中的共享目录 /opt/soft 下
例如, Master、Worker 和 Api 服务可能同时使用 Hadoop
- 修改
docker-compose.yml
文件中的dolphinscheduler-shared-local
存储卷,以支持 nfs
如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改
docker-stack.yml
volumes:
dolphinscheduler-shared-local:
driver_opts:
type: "nfs"
o: "addr=10.40.0.199,nolock,soft,rw"
device: ":/path/to/shared/dir"
- 将 Hadoop 放到 nfs
- 确保
$HADOOP_HOME
和$HADOOP_CONF_DIR
正确
如何支持本地文件存储而非 HDFS 和 S3?
注意: 如果是在单机上通过 docker-compose 部署,则步骤 2 可以直接跳过
- 修改
config.env.sh
文件中下面的环境变量:
RESOURCE_STORAGE_TYPE=HDFS
FS_DEFAULT_FS=file:///
- 修改
docker-compose.yml
文件中的dolphinscheduler-resource-local
存储卷,以支持 nfs
如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改
docker-stack.yml
volumes:
dolphinscheduler-resource-local:
driver_opts:
type: "nfs"
o: "addr=10.40.0.199,nolock,soft,rw"
device: ":/path/to/resource/dir"
如何支持 S3 资源存储,例如 MinIO?
以 MinIO 为例: 修改 config.env.sh
文件中下面的环境变量
RESOURCE_STORAGE_TYPE=S3
RESOURCE_UPLOAD_PATH=/dolphinscheduler
FS_DEFAULT_FS=s3a://BUCKET_NAME
FS_S3A_ENDPOINT=http://MINIO_IP:9000
FS_S3A_ACCESS_KEY=MINIO_ACCESS_KEY
FS_S3A_SECRET_KEY=MINIO_SECRET_KEY
BUCKET_NAME
, MINIO_IP
, MINIO_ACCESS_KEY
和 MINIO_SECRET_KEY
需要被修改为实际值
注意:
MINIO_IP
只能使用 IP 而非域名, 因为 DolphinScheduler 尚不支持 S3 路径风格访问 (S3 path style access)
如何配置 SkyWalking?
修改 config.env.sh
文件中的 SKYWALKING 环境变量
SKYWALKING_ENABLE=true
SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
SW_GRPC_LOG_SERVER_HOST=127.0.0.1
SW_GRPC_LOG_SERVER_PORT=11800
附录-环境变量
数据库
DATABASE_TYPE
配置database
的TYPE
, 默认值 postgresql
。
注意: 当运行dolphinscheduler
中master-server
、worker-server
、api-server
、alert-server
这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。
DATABASE_DRIVER
配置database
的DRIVER
, 默认值 org.postgresql.Driver
。
注意: 当运行dolphinscheduler
中master-server
、worker-server
、api-server
、alert-server
这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。
DATABASE_HOST
配置database
的HOST
, 默认值 127.0.0.1
。
注意: 当运行dolphinscheduler
中master-server
、worker-server
、api-server
、alert-server
这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。
DATABASE_PORT
配置database
的PORT
, 默认值 5432
。
注意: 当运行dolphinscheduler
中master-server
、worker-server
、api-server
、alert-server
这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。
DATABASE_USERNAME
配置database
的USERNAME
, 默认值 root
。
注意: 当运行dolphinscheduler
中master-server
、worker-server
、api-server
、alert-server
这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。
DATABASE_PASSWORD
配置database
的PASSWORD
, 默认值 root
。
注意: 当运行dolphinscheduler
中master-server
、worker-server
、api-server
、alert-server
这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。
DATABASE_DATABASE
配置database
的DATABASE
, 默认值 dolphinscheduler
。
注意: 当运行dolphinscheduler
中master-server
、worker-server
、api-server
、alert-server
这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。
DATABASE_PARAMS
配置database
的PARAMS
, 默认值 characterEncoding=utf8
。
注意: 当运行dolphinscheduler
中master-server
、worker-server
、api-server
、alert-server
这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。
ZooKeeper
ZOOKEEPER_QUORUM
配置dolphinscheduler
的Zookeeper
地址, 默认值 127.0.0.1:2181
。
注意: 当运行dolphinscheduler
中master-server
、worker-server
、api-server
这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。
ZOOKEEPER_ROOT
配置dolphinscheduler
在zookeeper
中数据存储的根目录,默认值 /dolphinscheduler
。
通用
DOLPHINSCHEDULER_OPTS
配置dolphinscheduler
的jvm options
,适用于master-server
、worker-server
、api-server
、alert-server
、logger-server
,默认值 ""
、
DATA_BASEDIR_PATH
用户数据目录, 用户自己配置, 请确保这个目录存在并且用户读写权限, 默认值 /tmp/dolphinscheduler
。
RESOURCE_STORAGE_TYPE
配置dolphinscheduler
的资源存储类型,可选项为 HDFS
、S3
、NONE
,默认值 HDFS
。
RESOURCE_UPLOAD_PATH
配置HDFS/S3
上的资源存储路径,默认值 /dolphinscheduler
。
FS_DEFAULT_FS
配置资源存储的文件系统协议,如 file:///
, hdfs://mycluster:8020
or s3a://dolphinscheduler
,默认值 file:///
。
FS_S3A_ENDPOINT
当RESOURCE_STORAGE_TYPE=S3
时,需要配置S3
的访问路径,默认值 s3.xxx.amazonaws.com
。
FS_S3A_ACCESS_KEY
当RESOURCE_STORAGE_TYPE=S3
时,需要配置S3
的s3 access key
,默认值 xxxxxxx
。
FS_S3A_SECRET_KEY
当RESOURCE_STORAGE_TYPE=S3
时,需要配置S3
的s3 secret key
,默认值 xxxxxxx
。
HADOOP_SECURITY_AUTHENTICATION_STARTUP_STATE
配置dolphinscheduler
是否启用kerberos,默认值 false
。
JAVA_SECURITY_KRB5_CONF_PATH
配置dolphinscheduler
的java.security.krb5.conf路径,默认值 /opt/krb5.conf
。
LOGIN_USER_KEYTAB_USERNAME
配置dolphinscheduler
登录用户的keytab用户名,默认值 hdfs@HADOOP.COM
。
LOGIN_USER_KEYTAB_PATH
配置dolphinscheduler
登录用户的keytab路径,默认值 /opt/hdfs.keytab
。
KERBEROS_EXPIRE_TIME
配置dolphinscheduler
的kerberos过期时间,单位为小时,默认值 2
。
HDFS_ROOT_USER
当RESOURCE_STORAGE_TYPE=HDFS
时,配置dolphinscheduler
的hdfs的root用户名,默认值 hdfs
。
RESOURCE_MANAGER_HTTPADDRESS_PORT
配置dolphinscheduler
的resource manager httpaddress 端口,默认值 8088
。
YARN_RESOURCEMANAGER_HA_RM_IDS
配置dolphinscheduler
的yarn resourcemanager ha rm ids,默认值 空
。
YARN_APPLICATION_STATUS_ADDRESS
配置dolphinscheduler
的yarn application status地址,默认值 http://ds1:%s/ws/v1/cluster/apps/%s
。
SKYWALKING_ENABLE
配置skywalking
是否启用. 默认值 false
。
SW_AGENT_COLLECTOR_BACKEND_SERVICES
配置skywalking
的collector后端地址. 默认值 127.0.0.1:11800
。
SW_GRPC_LOG_SERVER_HOST
配置skywalking
的grpc服务主机或IP. 默认值 127.0.0.1
。
SW_GRPC_LOG_SERVER_PORT
配置skywalking
的grpc服务端口. 默认值 11800
。
HADOOP_HOME
配置dolphinscheduler
的HADOOP_HOME
,默认值 /opt/soft/hadoop
。
HADOOP_CONF_DIR
配置dolphinscheduler
的HADOOP_CONF_DIR
,默认值 /opt/soft/hadoop/etc/hadoop
。
SPARK_HOME1
配置dolphinscheduler
的SPARK_HOME1
,默认值 /opt/soft/spark1
。
SPARK_HOME2
配置dolphinscheduler
的SPARK_HOME2
,默认值 /opt/soft/spark2
。
PYTHON_HOME
配置dolphinscheduler
的PYTHON_HOME
,默认值 /usr/bin/python
。
JAVA_HOME
配置dolphinscheduler
的JAVA_HOME
,默认值 /usr/local/openjdk-8
。
HIVE_HOME
配置dolphinscheduler
的HIVE_HOME
,默认值 /opt/soft/hive
。
FLINK_HOME
配置dolphinscheduler
的FLINK_HOME
,默认值 /opt/soft/flink
。
DATAX_HOME
配置dolphinscheduler
的DATAX_HOME
,默认值 /opt/soft/datax
。
Master Server
MASTER_SERVER_OPTS
配置master-server
的jvm options
,默认值 -Xms1g -Xmx1g -Xmn512m
。
MASTER_EXEC_THREADS
配置master-server
中的执行线程数量,默认值 100
。
MASTER_EXEC_TASK_NUM
配置master-server
中的执行任务数量,默认值 20
。
MASTER_DISPATCH_TASK_NUM
配置master-server
中的派发任务数量,默认值 3
。
MASTER_HOST_SELECTOR
配置master-server
中派发任务时worker host的选择器,可选值为Random
, RoundRobin
和LowerWeight
,默认值 LowerWeight
。
MASTER_HEARTBEAT_INTERVAL
配置master-server
中的心跳交互时间,默认值 10
。
MASTER_TASK_COMMIT_RETRYTIMES
配置master-server
中的任务提交重试次数,默认值 5
。
MASTER_TASK_COMMIT_INTERVAL
配置master-server
中的任务提交交互时间,默认值 1
。
MASTER_MAX_CPULOAD_AVG
配置master-server
中的CPU中的load average
值,默认值 -1
。
MASTER_RESERVED_MEMORY
配置master-server
的保留内存,单位为G,默认值 0.3
。
Worker Server
WORKER_SERVER_OPTS
配置worker-server
的jvm options
,默认值 -Xms1g -Xmx1g -Xmn512m
。
WORKER_EXEC_THREADS
配置worker-server
中的执行线程数量,默认值 100
。
WORKER_HEARTBEAT_INTERVAL
配置worker-server
中的心跳交互时间,默认值 10
。
WORKER_MAX_CPULOAD_AVG
配置worker-server
中的CPU中的最大load average
值,默认值 -1
。
WORKER_RESERVED_MEMORY
配置worker-server
的保留内存,单位为G,默认值 0.3
。
WORKER_GROUPS
配置worker-server
的分组,默认值 default
。
Alert Server
ALERT_SERVER_OPTS
配置alert-server
的jvm options
,默认值 -Xms512m -Xmx512m -Xmn256m
。
XLS_FILE_PATH
配置alert-server
的XLS
文件的存储路径,默认值 /tmp/xls
。
MAIL_SERVER_HOST
配置alert-server
的邮件服务地址,默认值 空
。
MAIL_SERVER_PORT
配置alert-server
的邮件服务端口,默认值 空
。
MAIL_SENDER
配置alert-server
的邮件发送人,默认值 空
。
MAIL_USER=
配置alert-server
的邮件服务用户名,默认值 空
。
MAIL_PASSWD
配置alert-server
的邮件服务用户密码,默认值 空
。
MAIL_SMTP_STARTTLS_ENABLE
配置alert-server
的邮件服务是否启用TLS,默认值 true
。
MAIL_SMTP_SSL_ENABLE
配置alert-server
的邮件服务是否启用SSL,默认值 false
。
MAIL_SMTP_SSL_TRUST
配置alert-server
的邮件服务SSL的信任地址,默认值 空
。
ENTERPRISE_WECHAT_ENABLE
配置alert-server
的邮件服务是否启用企业微信,默认值 false
。
ENTERPRISE_WECHAT_CORP_ID
配置alert-server
的邮件服务企业微信ID
,默认值 空
。
ENTERPRISE_WECHAT_SECRET
配置alert-server
的邮件服务企业微信SECRET
,默认值 空
。
ENTERPRISE_WECHAT_AGENT_ID
配置alert-server
的邮件服务企业微信AGENT_ID
,默认值 空
。
ENTERPRISE_WECHAT_USERS
配置alert-server
的邮件服务企业微信USERS
,默认值 空
。
Api Server
API_SERVER_OPTS
配置api-server
的jvm options
,默认值 -Xms512m -Xmx512m -Xmn256m
。
Logger Server
LOGGER_SERVER_OPTS
配置logger-server
的jvm options
,默认值 -Xms512m -Xmx512m -Xmn256m
。
以上是关于DolphinScheduler 之Docker 部署的主要内容,如果未能解决你的问题,请参考以下文章
DolphinScheduler docker-compose安装(配置邮件)
花一分钟体验大数据任务调度系统 - Apache DolphinScheduler 第一个官方 Docker 镜像