DolphinScheduler 之Docker 部署

2022-03-07 16:09:37 浏览数 (1)

文章目录

  • 快速试用 Docker 部署
    • 先决条件
    • 如何使用 Docker 镜像
      • 一、以 docker-compose 的方式启动 DolphinScheduler (推荐)
        • 0、请配置内存不少于 4GB
        • 1、下载源码包
        • 2、拉取镜像并启动服务
        • 3、登录系统
      • 二、通过指定已存在的 PostgreSQL 和 ZooKeeper 服务
        • 1、基础软件安装 (请自行安装)
        • 2、请登录 PostgreSQL 数据库,创建名为 `dolphinscheduler` 数据库
        • 3、初始化数据库,导入 `sql/dolphinscheduler_postgre.sql` 进行创建表及基础数据导入
        • 4、下载 DolphinScheduler 镜像
        • 5、运行一个 DolphinScheduler 实例
        • 6、登录系统
      • 三、运行 DolphinScheduler 中的独立服务
    • 环境变量
    • 支持矩阵
    • FAQ
      • 如何通过 docker-compose 管理 DolphinScheduler?
      • 如何查看一个容器的日志?
      • 如何通过 docker-compose 扩缩容 master 和 worker?
      • 如何在 Docker Swarm 上部署 DolphinScheduler?
      • 如何在 Docker Swarm 上扩缩容 master 和 worker?
      • 如何构建一个 Docker 镜像?
        • 从源码构建 (需要 Maven 3.3 & JDK 1.8 )
        • 从二进制包构建 (不需要 Maven 3.3 & JDK 1.8 )
        • 构建多平台架构镜像
      • 如何为 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?
    • 附录-环境变量
      • 数据库
      • ZooKeeper
      • 通用
      • Master Server
      • Worker Server
      • Alert Server
      • Api Server
      • Logger Server

快速试用 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

代码语言:javascript复制
$ 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-srcdockerdocker-swarm

PostgreSQL (用户 root, 密码 root, 数据库 dolphinscheduler) 和 ZooKeeper 服务将会默认启动

3、登录系统

访问前端页面:http://localhost:12345/dolphinscheduler,如果有需要请修改成对应的 IP 地址

默认的用户是admin,默认的密码是dolphinscheduler123

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kTqmLfVE-1646312172369)(https://img.yuanmabao.com/zijie/pic/2022/03/07/aims1e051f5.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 镜像:

代码语言:javascript复制
docker pull dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler:1.3.9
5、运行一个 DolphinScheduler 实例
代码语言:javascript复制
$ 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 中的独立服务

在容器启动时,会自动启动以下服务:

代码语言:javascript复制
    MasterServer         ----- master服务
    WorkerServer         ----- worker服务
    LoggerServer         ----- logger服务
    ApiApplicationServer ----- api服务
    AlertServer          ----- alert服务

如果你只是想运行 dolphinscheduler 中的部分服务

你可以够通执行以下命令来运行dolphinscheduler中的部分服务

  • 启动一个 master server, 如下:
代码语言:javascript复制
$ 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), 如下:
代码语言:javascript复制
$ 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, 如下:
代码语言:javascript复制
$ 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, 如下:
代码语言:javascript复制
$ 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?

启动、重启、停止或列出所有容器:

代码语言:javascript复制
docker-compose start
docker-compose restart
docker-compose stop
docker-compose ps

停止所有容器并移除所有容器、网络:

代码语言:javascript复制
docker-compose down

停止所有容器并移除所有容器、网络和存储卷:

代码语言:javascript复制
docker-compose down -v

如何查看一个容器的日志?

列出所有运行的容器:

代码语言:javascript复制
docker ps
docker ps --format "{{.Names}}" # 只打印名字

查看名为 docker-swarm_dolphinscheduler-api_1 的容器的日志:

代码语言:javascript复制
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 个实例:

代码语言:javascript复制
docker-compose up -d --scale dolphinscheduler-master=2 dolphinscheduler-master

扩缩容 worker 至 3 个实例:

代码语言:javascript复制
docker-compose up -d --scale dolphinscheduler-worker=3 dolphinscheduler-worker

如何在 Docker Swarm 上部署 DolphinScheduler?

假设 Docker Swarm 集群已经部署(如果还没有创建 Docker Swarm 集群,请参考 create-swarm)

启动名为 dolphinscheduler 的 stack:

代码语言:javascript复制
docker stack deploy -c docker-stack.yml dolphinscheduler

列出名为 dolphinscheduler 的 stack 的所有服务:

代码语言:javascript复制
docker stack services dolphinscheduler

停止并移除名为 dolphinscheduler 的 stack:

代码语言:javascript复制
docker stack rm dolphinscheduler

移除名为 dolphinscheduler 的 stack 的所有存储卷:

代码语言:javascript复制
docker volume rm -f $(docker volume ls --format "{{.Name}}" | grep -e "^dolphinscheduler")

如何在 Docker Swarm 上扩缩容 master 和 worker?

扩缩容名为 dolphinscheduler 的 stack 的 master 至 2 个实例:

代码语言:javascript复制
docker service scale dolphinscheduler_dolphinscheduler-master=2

扩缩容名为 dolphinscheduler 的 stack 的 worker 至 3 个实例:

代码语言:javascript复制
docker service scale dolphinscheduler_dolphinscheduler-worker=3

如何构建一个 Docker 镜像?

从源码构建 (需要 Maven 3.3 & JDK 1.8 )

类 Unix 系统,在 Terminal 中执行:

代码语言:javascript复制
$ bash ./docker/build/hooks/build

Windows 系统,在 cmd 或 PowerShell 中执行:

代码语言:javascript复制
C:dolphinscheduler-src>.dockerbuildhooksbuild.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 中执行:

代码语言:javascript复制
$ 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/amd64linux/arm64 平台架构的镜像,要求:

  1. 支持 docker buildx
  2. 具有 https://hub.docker.com/r/apache/dolphinscheduler 的 push 权限(务必谨慎: 构建命令默认会自动将多平台架构镜像推送到 apache/dolphinscheduler 的 docker hub)

执行:

代码语言:javascript复制
$ 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

代码语言:javascript复制
export SECURITY_AUTHENTICATION_TYPE=PASSWORD

当添加以上环境变量后,你应该在相应的模板文件application-api.properties.tpl中添加这个环境变量配置:

代码语言:javascript复制
security.authentication.type=${SECURITY_AUTHENTICATION_TYPE}

/root/start-init-conf.sh将根据模板文件动态的生成配置文件:

代码语言:javascript复制
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 进行构建.

  1. 下载 MySQL 驱动包 mysql-connector-java-5.1.49.jar (要求 >=5.1.47)
  2. 创建一个新的 Dockerfile,用于添加 MySQL 的驱动包:
代码语言:javascript复制
FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler:1.3.9
COPY mysql-connector-java-5.1.49.jar /opt/dolphinscheduler/lib
  1. 构建一个包含 MySQL 驱动包的新镜像:
代码语言:javascript复制
docker build -t apache/dolphinscheduler:mysql-driver .
  1. 修改 docker-compose.yml 文件中的所有 image 字段为 apache/dolphinscheduler:mysql-driver

如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改 docker-stack.yml

  1. 注释 docker-compose.yml 文件中的 dolphinscheduler-postgresql
  2. docker-compose.yml 文件中添加 dolphinscheduler-mysql 服务(可选,你可以直接使用一个外部的 MySQL 数据库)
  3. 修改 config.env.sh 文件中的 DATABASE 环境变量
代码语言:javascript复制
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_HOSTdolphinscheduler-mysql 即可

  1. 运行 dolphinscheduler (详见如何使用docker镜像)

如何在数据源中心支持 MySQL 数据源?

由于商业许可证的原因,我们不能直接使用 MySQL 的驱动包. 如果你要添加 MySQL 数据源, 你可以基于官方镜像 apache/dolphinscheduler 进行构建.

  1. 下载 MySQL 驱动包 mysql-connector-java-5.1.49.jar (要求 >=5.1.47)
  2. 创建一个新的 Dockerfile,用于添加 MySQL 驱动包:
代码语言:javascript复制
FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler:1.3.9
COPY mysql-connector-java-5.1.49.jar /opt/dolphinscheduler/lib
  1. 构建一个包含 MySQL 驱动包的新镜像:
代码语言:javascript复制
docker build -t apache/dolphinscheduler:mysql-driver .
  1. docker-compose.yml 文件中的所有 image 字段修改为 apache/dolphinscheduler:mysql-driver

如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改 docker-stack.yml

  1. 运行 dolphinscheduler (详见如何使用docker镜像)
  2. 在数据源中心添加一个 MySQL 数据源

如何在数据源中心支持 Oracle 数据源?

由于商业许可证的原因,我们不能直接使用 Oracle 的驱动包. 如果你要添加 Oracle 数据源, 你可以基于官方镜像 apache/dolphinscheduler 进行构建.

  1. 下载 Oracle 驱动包 ojdbc8.jar (such as ojdbc8-19.9.0.0.jar)
  2. 创建一个新的 Dockerfile,用于添加 Oracle 驱动包:
代码语言:javascript复制
FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler:1.3.9
COPY ojdbc8-19.9.0.0.jar /opt/dolphinscheduler/lib
  1. 构建一个包含 Oracle 驱动包的新镜像:
代码语言:javascript复制
docker build -t apache/dolphinscheduler:oracle-driver .
  1. docker-compose.yml 文件中的所有 image 字段修改为 apache/dolphinscheduler:oracle-driver

如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改 docker-stack.yml

  1. 运行 dolphinscheduler (详见如何使用docker镜像)
  2. 在数据源中心添加一个 Oracle 数据源

如何支持 Python 2 pip 以及自定义 requirements.txt?

  1. 创建一个新的 Dockerfile,用于安装 pip:
代码语言:javascript复制
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, 只需添加一行

代码语言:javascript复制
    pip install --no-cache-dir -U pip && 
  1. 构建一个包含 pip 的新镜像:
代码语言:javascript复制
docker build -t apache/dolphinscheduler:pip .
  1. docker-compose.yml 文件中的所有 image 字段修改为 apache/dolphinscheduler:pip

如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改 docker-stack.yml

  1. 运行 dolphinscheduler (详见如何使用docker镜像)
  2. 在一个新 Python 任务下验证 pip

如何支持 Python 3?

  1. 创建一个新的 Dockerfile,用于安装 Python 3:
代码语言:javascript复制
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 即可

代码语言:javascript复制
    apt-get install -y --no-install-recommends python3-pip && 
  1. 构建一个包含 Python 3 的新镜像:
代码语言:javascript复制
docker build -t apache/dolphinscheduler:python3 .
  1. docker-compose.yml 文件中的所有 image 字段修改为 apache/dolphinscheduler:python3

如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改 docker-stack.yml

  1. 修改 config.env.sh 文件中的 PYTHON_HOME/usr/bin/python3
  2. 运行 dolphinscheduler (详见如何使用docker镜像)
  3. 在一个新 Python 任务下验证 Python 3

如何支持 Hadoop, Spark, Flink, Hive 或 DataX?

以 Spark 2.4.7 为例:

  1. 下载 Spark 2.4.7 发布的二进制包 spark-2.4.7-bin-hadoop2.7.tgz
  2. 运行 dolphinscheduler (详见如何使用docker镜像)
  3. 复制 Spark 2.4.7 二进制包到 Docker 容器中
代码语言:javascript复制
docker cp spark-2.4.7-bin-hadoop2.7.tgz docker-swarm_dolphinscheduler-worker_1:/opt/soft

因为存储卷 dolphinscheduler-shared-local 被挂载到 /opt/soft, 因此 /opt/soft 中的所有文件都不会丢失

  1. 登录到容器并确保 SPARK_HOME2 存在
代码语言:javascript复制
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 版本信息

  1. 在一个 Shell 任务下验证 Spark
代码语言:javascript复制
$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

  1. 在一个 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

  1. 验证 Spark on YARN

Spark on YARN (部署方式为 clusterclient) 需要 Hadoop 支持. 类似于 Spark 支持, 支持 Hadoop 的操作几乎和前面的步骤相同

确保 HADOOP_HOME 和 HADOOP_CONF_DIR 存在

如何支持 Spark 3?

事实上,使用 spark-submit 提交应用的方式是相同的, 无论是 Spark 1, 2 或 3. 换句话说,SPARK_HOME2 的语义是第二个 SPARK_HOME, 而非 SPARK2HOME, 因此只需设置 SPARK_HOME2=/path/to/spark3 即可

以 Spark 3.1.1 为例:

  1. 下载 Spark 3.1.1 发布的二进制包 spark-3.1.1-bin-hadoop2.7.tgz
  2. 运行 dolphinscheduler (详见如何使用docker镜像)
  3. 复制 Spark 3.1.1 二进制包到 Docker 容器中
代码语言:javascript复制
docker cp spark-3.1.1-bin-hadoop2.7.tgz docker-swarm_dolphinscheduler-worker_1:/opt/soft
  1. 登录到容器并确保 SPARK_HOME2 存在
代码语言:javascript复制
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 版本信息

  1. 在一个 Shell 任务下验证 Spark
代码语言:javascript复制
$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

  1. 修改 docker-compose.yml 文件中的 dolphinscheduler-shared-local 存储卷,以支持 nfs

如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改 docker-stack.yml

代码语言:javascript复制
volumes:
  dolphinscheduler-shared-local:
    driver_opts:
      type: "nfs"
      o: "addr=10.40.0.199,nolock,soft,rw"
      device: ":/path/to/shared/dir"
  1. 将 Hadoop 放到 nfs
  2. 确保 HADOOP_HOME 和 HADOOP_CONF_DIR 正确

如何支持本地文件存储而非 HDFS 和 S3?

注意: 如果是在单机上通过 docker-compose 部署,则步骤 2 可以直接跳过

  1. 修改 config.env.sh 文件中下面的环境变量:
代码语言:javascript复制
RESOURCE_STORAGE_TYPE=HDFS
FS_DEFAULT_FS=file:///
  1. 修改 docker-compose.yml 文件中的 dolphinscheduler-resource-local 存储卷,以支持 nfs

如果你想在 Docker Swarm 上部署 dolphinscheduler,你需要修改 docker-stack.yml

代码语言:javascript复制
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 文件中下面的环境变量

代码语言:javascript复制
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_KEYMINIO_SECRET_KEY 需要被修改为实际值

注意: MINIO_IP 只能使用 IP 而非域名, 因为 DolphinScheduler 尚不支持 S3 路径风格访问 (S3 path style access)

如何配置 SkyWalking?

修改 config.env.sh 文件中的 SKYWALKING 环境变量

代码语言:javascript复制
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

配置databaseTYPE, 默认值 postgresql

注意: 当运行dolphinschedulermaster-serverworker-serverapi-serveralert-server这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。

DATABASE_DRIVER

配置databaseDRIVER, 默认值 org.postgresql.Driver

注意: 当运行dolphinschedulermaster-serverworker-serverapi-serveralert-server这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。

DATABASE_HOST

配置databaseHOST, 默认值 127.0.0.1

注意: 当运行dolphinschedulermaster-serverworker-serverapi-serveralert-server这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。

DATABASE_PORT

配置databasePORT, 默认值 5432

注意: 当运行dolphinschedulermaster-serverworker-serverapi-serveralert-server这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。

DATABASE_USERNAME

配置databaseUSERNAME, 默认值 root

注意: 当运行dolphinschedulermaster-serverworker-serverapi-serveralert-server这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。

DATABASE_PASSWORD

配置databasePASSWORD, 默认值 root

注意: 当运行dolphinschedulermaster-serverworker-serverapi-serveralert-server这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。

DATABASE_DATABASE

配置databaseDATABASE, 默认值 dolphinscheduler

注意: 当运行dolphinschedulermaster-serverworker-serverapi-serveralert-server这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。

DATABASE_PARAMS

配置databasePARAMS, 默认值 characterEncoding=utf8

注意: 当运行dolphinschedulermaster-serverworker-serverapi-serveralert-server这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。

ZooKeeper

ZOOKEEPER_QUORUM

配置dolphinschedulerZookeeper地址, 默认值 127.0.0.1:2181

注意: 当运行dolphinschedulermaster-serverworker-serverapi-server这些服务时,必须指定这个环境变量,以便于你更好的搭建分布式服务。

ZOOKEEPER_ROOT

配置dolphinschedulerzookeeper中数据存储的根目录,默认值 /dolphinscheduler

通用

DOLPHINSCHEDULER_OPTS

配置dolphinschedulerjvm options,适用于master-serverworker-serverapi-serveralert-serverlogger-server,默认值 ""

DATA_BASEDIR_PATH

用户数据目录, 用户自己配置, 请确保这个目录存在并且用户读写权限, 默认值 /tmp/dolphinscheduler

RESOURCE_STORAGE_TYPE

配置dolphinscheduler的资源存储类型,可选项为 HDFSS3NONE,默认值 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时,需要配置S3s3 access key,默认值 xxxxxxx

FS_S3A_SECRET_KEY

RESOURCE_STORAGE_TYPE=S3时,需要配置S3s3 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

配置dolphinschedulerHADOOP_HOME,默认值 /opt/soft/hadoop

HADOOP_CONF_DIR

配置dolphinschedulerHADOOP_CONF_DIR,默认值 /opt/soft/hadoop/etc/hadoop

SPARK_HOME1

配置dolphinschedulerSPARK_HOME1,默认值 /opt/soft/spark1

SPARK_HOME2

配置dolphinschedulerSPARK_HOME2,默认值 /opt/soft/spark2

PYTHON_HOME

配置dolphinschedulerPYTHON_HOME,默认值 /usr/bin/python

JAVA_HOME

配置dolphinschedulerJAVA_HOME,默认值 /usr/local/openjdk-8

HIVE_HOME

配置dolphinschedulerHIVE_HOME,默认值 /opt/soft/hive

FLINK_HOME

配置dolphinschedulerFLINK_HOME,默认值 /opt/soft/flink

DATAX_HOME

配置dolphinschedulerDATAX_HOME,默认值 /opt/soft/datax

Master Server

MASTER_SERVER_OPTS

配置master-serverjvm 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, RoundRobinLowerWeight,默认值 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-serverjvm 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-serverjvm options,默认值 -Xms512m -Xmx512m -Xmn256m

XLS_FILE_PATH

配置alert-serverXLS文件的存储路径,默认值 /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-serverjvm options,默认值 -Xms512m -Xmx512m -Xmn256m

Logger Server

LOGGER_SERVER_OPTS

配置logger-serverjvm options,默认值 -Xms512m -Xmx512m -Xmn256m

0 人点赞