【大数据进阶第三阶段之DolphinScheduler学习笔记】DolphinScheduler(海豚调度)的部署指南

这篇具有很好参考价值的文章主要介绍了【大数据进阶第三阶段之DolphinScheduler学习笔记】DolphinScheduler(海豚调度)的部署指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

部署

参考官网部署方式:https://dolphinscheduler.apache.org/zh-cn/docs/3.1.3/guide/installation/standalone

部署方式:单机部署,伪集群部署,集群部署。

如果是新手,想要体验 DolphinScheduler 的功能,推荐使用Standalone方式体检。如果你是在生产中使用,推荐使用 集群部署或者 kubernetes。

1、单机部署(Standalone)

Standalone 仅适用于 DolphinScheduler 的快速体验.

​ 如果你是新手,想要体验 DolphinScheduler 的功能,推荐使用 Standalone 方式体检。如果你想体验更完整的功能,或者更大的任务量,推荐使用伪集群部署。如果你是在生产中使用,推荐使用集群部署或者kubernetes ​

注意: Standalone 仅建议 20 个以下工作流使用,因为其采用内存式的 H2 Database, Zookeeper Testing Server,任务过多可能导致不稳定,并且如果重启或者停止 standalone-server 会导致内存中数据库里的数据清空。 Standalone 支持元数据持久化,但是需要使用外部数据库,如 mysql 或者 postgresql,​ 请看配置数据库 。

1.1 前置准备工作

  • JDK:下载JDK (1.8+),安装并配置 JAVA_HOME 环境变量,并将其下的 bin 目录追加到 PATH 环境变量中。如果你的环境中已存在,可以跳过这步。
  • 二进制包:在下载页面下载 DolphinScheduler 二进制包

1.2 启动 DolphinScheduler Standalone Server

1.2.1 解压并启动 DolphinScheduler

二进制压缩包中有 standalone 启动的脚本,解压后即可快速启动。

# 解压并运行 Standalone Server
tar -xvzf apache-dolphinscheduler-*-bin.tar.gz
chmod -R 755 apache-dolphinscheduler-*-bin
cd apache-dolphinscheduler-*-bin
bash ./bin/dolphinscheduler-daemon.sh start standalone-server

1.2.2 登录 DolphinScheduler

浏览器访问地址 http://localhost:12345/dolphinscheduler/ui 即可登录系统 UI。默认的用户名和密码是 admin/dolphinscheduler123

dolphinscheduler 如何设置${datax_launcher},大数据,DolphinScheduler,大数据,学习,笔记,hadoop

1.3 启停服务

脚本 ./bin/dolphinscheduler-daemon.sh 除了可以快捷启动 standalone 外,还能停止服务运行,全部命令如下

# 启动 Standalone Server 服务
bash ./bin/dolphinscheduler-daemon.sh start standalone-server
# 停止 Standalone Server 服务
bash ./bin/dolphinscheduler-daemon.sh stop standalone-server
# 查看 Standalone Server 状态
bash ./bin/dolphinscheduler-daemon.sh status standalone-server

1.4 配置数据库

Standalone server 使用 H2 数据库作为其元数据存储数据,这是为了上手简单,用户在启动服务器之前不需要启动数据库。但是如果用户想将元数据库存储在 MySQL 或 PostgreSQL 等其他数据库中,必须更改一些配置。请参考 数据源配置 Standalone 切换元数据库 创建并初始化数据库

2、 伪集群部署(DolphinScheduler)

 伪集群部署目的是在单台机器部署 DolphinScheduler 服务,该模式下 master、worker、api server 都在同一台机器上​ 

2.1 前置准备工作

伪分布式部署 DolphinScheduler 需要有外部软件的支持

  • JDK:下载JDK (1.8+),安装并配置 JAVA_HOME 环境变量,并将其下的 bin 目录追加到 PATH 环境变量中。如果你的环境中已存在,可以跳过这步。
  • 二进制包:在下载页面下载 DolphinScheduler 二进制包
  • 数据库:PostgreSQL (8.2.15+) 或者 MySQL (5.7+),两者任选其一即可,如 MySQL 则需要 JDBC Driver 8.0.16
  • 注册中心:ZooKeeper (3.8.0+),下载地址
  • 进程树分析
    • macOS 安装pstree
    • Fedora/Red/Hat/CentOS/Ubuntu/Debian 安装psmisc

注意: DolphinScheduler 本身不依赖 Hadoop、Hive、Spark,但如果你运行的任务需要依赖他们,就需要有对应的环境支持

2.2 准备 DolphinScheduler 启动环境

配置用户免密及权限

创建部署用户,并且一定要配置 sudo 免密。以创建 dolphinscheduler 用户为例

# 创建用户需使用 root 登录
useradd dolphinscheduler

# 添加密码
echo "dolphinscheduler" | passwd --stdin dolphinscheduler

# 配置 sudo 免密
sed -i '$adolphinscheduler  ALL=(ALL)  NOPASSWD: NOPASSWD: ALL' /etc/sudoers
sed -i 's/Defaults    requirett/#Defaults    requirett/g' /etc/sudoers

# 修改目录权限,使得部署用户对二进制包解压后的 apache-dolphinscheduler-*-bin 目录有操作权限
chown -R dolphinscheduler:dolphinscheduler apache-dolphinscheduler-*-bin
chmod -R 755 apache-dolphinscheduler-*-bin

注意:

  • 因为任务执行服务是以 sudo -u {linux-user} 切换不同 linux 用户的方式来实现多租户运行作业,所以部署用户需要有 sudo 权限,而且是免密的。初学习者不理解的话,完全可以暂时忽略这一点
  • 如果发现 /etc/sudoers 文件中有 "Defaults requirett" 这行,也请注释掉

配置机器 SSH 免密登陆

由于安装的时候需要向不同机器发送资源,所以要求各台机器间能实现 SSH 免密登陆。配置免密登陆的步骤如下

su dolphinscheduler

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

注意: 配置完成后,可以通过运行命令 ssh localhost 判断是否成功,如果不需要输入密码就能 ssh 登陆则证明成功

启动 zookeeper

进入 zookeeper 的安装目录,将 zoo_sample.cfg 配置文件复制到 conf/zoo.cfg,并将 conf/zoo.cfg 中 dataDir 中的值改成 dataDir=./tmp/zookeeper

# 启动 zookeeper
./bin/zkServer.sh start

2.3 修改相关配置

完成基础环境的准备后,需要根据你的机器环境修改配置文件。配置文件可以在目录 bin/env 中找到,他们分别是 并命名为 install_env.sh 和 dolphinscheduler_env.sh

2.3.1 修改 install_env.sh 文件

文件 install_env.sh 描述了哪些机器将被安装 DolphinScheduler 以及每台机器对应安装哪些服务。您可以在路径 bin/env/install_env.sh 中找到此文件,可通过以下方式更改 env 变量,export <ENV_NAME>=,配置详情如下。

# ---------------------------------------------------------
# INSTALL MACHINE
# ---------------------------------------------------------
# Due to the master, worker, and API server being deployed on a single node, the IP of the server is the machine IP or localhost
ips="localhost"
sshPort="22"
masters="localhost"
workers="localhost:default"
alertServer="localhost"
apiServers="localhost"

# DolphinScheduler installation path, it will auto-create if not exists
installPath=~/dolphinscheduler

# Deploy user, use the user you create in section **Configure machine SSH password-free login**
deployUser="dolphinscheduler"

2.3.2 修改 dolphinscheduler_env.sh 文件

文件 ./bin/env/dolphinscheduler_env.sh 描述了下列配置:

  • DolphinScheduler 的数据库配置,详细配置方法见[初始化数据库]
  • 一些任务类型外部依赖路径或库文件,如 JAVA_HOME 和 SPARK_HOME都是在这里定义的

如果您不使用某些任务类型,您可以忽略任务外部依赖项,但您必须根据您的环境更改 JAVA_HOME、注册中心和数据库相关配置。

# JAVA_HOME, will use it to start DolphinScheduler server
export JAVA_HOME=${JAVA_HOME:-/opt/soft/java}

# Database related configuration, set database type, username and password
export DATABASE=${DATABASE:-postgresql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:postgresql://127.0.0.1:5432/dolphinscheduler"
export SPRING_DATASOURCE_USERNAME={user}
export SPRING_DATASOURCE_PASSWORD={password}

# DolphinScheduler server related configuration
export SPRING_CACHE_TYPE=${SPRING_CACHE_TYPE:-none}
export SPRING_JACKSON_TIME_ZONE=${SPRING_JACKSON_TIME_ZONE:-UTC}
export MASTER_FETCH_COMMAND_NUM=${MASTER_FETCH_COMMAND_NUM:-10}

# Registry center configuration, determines the type and link of the registry center
export REGISTRY_TYPE=${REGISTRY_TYPE:-zookeeper}
export REGISTRY_ZOOKEEPER_CONNECT_STRING=${REGISTRY_ZOOKEEPER_CONNECT_STRING:-localhost:2181}

# Tasks related configurations, need to change the configuration if you use the related tasks.
export HADOOP_HOME=${HADOOP_HOME:-/opt/soft/hadoop}
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-/opt/soft/hadoop/etc/hadoop}
export SPARK_HOME=${SPARK_HOME:-/opt/soft/spark}
export PYTHON_LAUNCHER=${PYTHON_LAUNCHER:-/opt/soft/python}
export HIVE_HOME=${HIVE_HOME:-/opt/soft/hive}
export FLINK_HOME=${FLINK_HOME:-/opt/soft/flink}
export DATAX_LAUNCHER=${DATAX_LAUNCHER:-/opt/soft/datax/bin/python3}

export PATH=$HADOOP_HOME/bin:$SPARK_HOME/bin:$PYTHON_LAUNCHER:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_LAUNCHER:$PATH

2.4 初始化数据库

请参考 [数据源配置] 伪分布式/分布式安装初始化数据库 创建并初始化数据库

2.5 启动 DolphinScheduler

使用上面创建的部署用户运行以下命令完成部署,部署后的运行日志将存放在 logs 文件夹内

bash ./bin/install.sh

注意: 第一次部署的话,可能出现 5 次sh: bin/dolphinscheduler-daemon.sh: No such file or directory相关信息,此为非重要信息直接忽略即可

2.6 登录 DolphinScheduler

浏览器访问地址 http://localhost:12345/dolphinscheduler/ui 即可登录系统 UI。默认的用户名和密码是 admin/dolphinscheduler123

2.7 启停服务

# 一键停止集群所有服务
bash ./bin/stop-all.sh

# 一键开启集群所有服务
bash ./bin/start-all.sh

# 启停 Master
bash ./bin/dolphinscheduler-daemon.sh stop master-server
bash ./bin/dolphinscheduler-daemon.sh start master-server

# 启停 Worker
bash ./bin/dolphinscheduler-daemon.sh start worker-server
bash ./bin/dolphinscheduler-daemon.sh stop worker-server

# 启停 Api
bash ./bin/dolphinscheduler-daemon.sh start api-server
bash ./bin/dolphinscheduler-daemon.sh stop api-server

# 启停 Alert
bash ./bin/dolphinscheduler-daemon.sh start alert-server
bash ./bin/dolphinscheduler-daemon.sh stop alert-server

注意 1:: 每个服务在路径 <service>/conf/dolphinscheduler_env.sh 中都有 dolphinscheduler_env.sh 文件,这是可以为微 服务需求提供便利。意味着您可以基于不同的环境变量来启动各个服务,只需要在对应服务中配置 <service>/conf/dolphinscheduler_env.sh 然后通过 <service>/bin/start.sh 命令启动即可。但是如果您使用命令 /bin/dolphinscheduler-daemon.sh start <service> 启动服务器,它将会用文件 bin/env/dolphinscheduler_env.sh 覆盖 <service>/conf/dolphinscheduler_env.sh 然后启动服务,目的是为了减少用户修改配置的成本.

注意 2::服务用途请具体参见《系统架构设计》小节。Python gateway service 默认与 api-server 一起启动,如果您不想启动 Python gateway service 请通过更改 api-server 配置文件 api-server/conf/application.yaml 中的 python-gateway.enabled : false 来禁用它。

3、集群部署(Cluster) 

3.1 部署步骤

集群部署(Cluster)使用的脚本和配置文件与伪集群部署中的配置一样,所以所需要的步骤也与伪集群部署大致一样。区别就是伪集群部署针对的是一台机器,而集群部署(Cluster)需要针对多台机器,且两者“修改相关配置”步骤区别较大

3.1.1 前置准备工作 && 准备 DolphinScheduler 启动环境

其中除了伪集群部署中的“前置准备工作”,“准备启动环境”除了“启动zookeeper”以及“初始化数据库”外,别的都需要在每台机器中进行配置

3.1.2 修改相关配置

这个是与伪集群部署差异较大的一步,因为部署脚本会通过 scp 的方式将安装需要的资源传输到各个机器上,所以这一步我们仅需要修改运行install.sh脚本的所在机器的配置即可。配置文件在路径在bin/env/install_env.sh下,此处我们仅需修改INSTALL MACHINEDolphinScheduler ENV、Database、Registry Server与伪集群部署保持一致,下面对必须修改参数进行说明

# ---------------------------------------------------------
# INSTALL MACHINE
# ---------------------------------------------------------
# 需要配置master、worker、API server,所在服务器的IP均为机器IP或者localhost
# 如果是配置hostname的话,需要保证机器间可以通过hostname相互链接
# 如下图所示,部署 DolphinScheduler 机器的 hostname 为 ds1,ds2,ds3,ds4,ds5,其中 ds1,ds2 安装 master 服务,ds3,ds4,ds5安装 worker 服务,alert server安装在ds4中,api server 安装在ds5中
ips="ds1,ds2,ds3,ds4,ds5"
masters="ds1,ds2"
workers="ds3:default,ds4:default,ds5:default"
alertServer="ds4"
apiServers="ds5"

3.2 启动 DolphinScheduler && 登录 DolphinScheduler && 启停服务

与伪集群部署保持一致

4、Kubernetes 部署

4.1 先决条件

  • Helm 3.1.0+
  • Kubernetes 1.12+
  • PV 供应(需要基础设施支持)

4.2 安装 dolphinscheduler

请下载源码包 apache-dolphinscheduler-3.2.0-src.tar.gz,下载地址: 下载

发布一个名为 dolphinscheduler 的版本(release),请执行以下命令:

$ tar -zxvf apache-dolphinscheduler-3.2.0-src.tar.gz
$ cd apache-dolphinscheduler-3.2.0-src/deploy/kubernetes/dolphinscheduler
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm dependency update .
$ helm install dolphinscheduler . --set image.tag=3.2.0

将名为 dolphinscheduler 的版本(release) 发布到 test 的命名空间中:

$ helm install dolphinscheduler . -n test

提示: 如果名为 test 的命名空间被使用, 选项参数 -n test 需要添加到 helm 和 kubectl 命令中

这些命令以默认配置在 Kubernetes 集群上部署 DolphinScheduler,附录-配置部分列出了可以在安装过程中配置的参数

提示: 列出所有已发布的版本,使用 helm list

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

4.3 访问 DolphinScheduler 前端页面

如果 values.yaml 文件中的 ingress.enabled 被设置为 true, 在浏览器中访问 http://${ingress.host}/dolphinscheduler 即可

提示: 如果 ingress 访问遇到问题,请联系 Kubernetes 管理员并查看 Ingress

否则,当 api.service.type=ClusterIP 时,你需要执行 port-forward 端口转发命令:

$ kubectl port-forward --address 0.0.0.0 svc/dolphinscheduler-api 12345:12345
$ kubectl port-forward --address 0.0.0.0 -n test svc/dolphinscheduler-api 12345:12345 # 使用 test 命名空间

提示: 如果出现 unable to do port forwarding: socat not found 错误, 需要先安装 socat

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

或者当 api.service.type=NodePort 时,你需要执行命令:

NODE_IP=$(kubectl get no -n {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
NODE_PORT=$(kubectl get svc {{ template "dolphinscheduler.fullname" . }}-api -n {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}")
echo http://$NODE_IP:$NODE_PORT/dolphinscheduler

然后访问前端页面: http://localhost:12345/dolphinscheduler/ui

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

请参考用户手册章节的快速上手查看如何使用 DolphinScheduler

4.4 卸载 dolphinscheduler

卸载名为 dolphinscheduler 的版本(release),请执行:

$ helm uninstall dolphinscheduler

该命令将删除与 dolphinscheduler 相关的所有 Kubernetes 组件(但 PVC 除外),并删除版本(release)

要删除与 dolphinscheduler 相关的 PVC,请执行:

$ kubectl delete pvc -l app.kubernetes.io/instance=dolphinscheduler

注意: 删除 PVC 也会删除所有数据,请谨慎操作!

4.5 [试验性] worker 自动扩缩容

警告: 目前此功能尚在试验阶段,不建议在生产环境使用!

DolphinScheduler 使用 KEDA 对 worker 进行自动扩缩容。但是 DolphinScheduler 默认是不启用该功能的。 您需要做下列配置来启用该功能:

首先您需要创建一个单独的命名空间并使用 helm 安装 KEDA

helm repo add kedacore https://kedacore.github.io/charts

helm repo update

kubectl create namespace keda

helm install keda kedacore/keda \
    --namespace keda \
    --version "v2.0.0"

其次,您需要将 values.yaml 中的 worker.keda.enabled 配置设置成 true,或者您可以通过以下命令安装 chart:

helm install dolphinscheduler . --set worker.keda.enabled=true -n <your-namespace-to-deploy-dolphinscheduler>

一旦自动扩缩容功能启用,worker的数量将基于任务状态在 minReplicaCount 和 maxReplicaCount 之间弹性扩缩。 举例来说,当您的 DolphinScheduler 实例中没有任务在运行时,将不会有 worker。因此,这个功能会显著节约资源,降低您的使用成本。

自动扩缩容功能目前支持 DolphinScheduler 官方 helm chart 中自带的 postgresql and mysql。 如果您要使用外部的数据库,自动扩缩容功能目前只支持 mysql 和 postgresql 类型的外部数据库。

如果您在使用自动扩缩容时需要改变 worker WORKER_EXEC_THREADS 的值,请直接在 values.yaml 中修改 worker.env.WORKER_EXEC_THREADS 的值, 而不要通过 configmap 来更新。

4.5 配置

配置文件为 values.yaml,附录-配置 表格列出了 DolphinScheduler 的可配置参数及其默认值

4.6 支持矩阵

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

4.7 FAQ

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

列出所有 pods (别名 po):

kubectl get po
kubectl get po -n test # with test namespace

查看名为 dolphinscheduler-master-0 的 pod 容器的日志:

kubectl logs dolphinscheduler-master-0
kubectl logs -f dolphinscheduler-master-0 # 跟随日志输出
kubectl logs --tail 10 dolphinscheduler-master-0 -n test # 显示倒数10行日志

如何在 Kubernetes 上扩缩容 api, master 和 worker?

列出所有 deployments (别名 deploy):

kubectl get deploy
kubectl get deploy -n test # with test namespace

扩缩容 api 至 3 个副本:

kubectl scale --replicas=3 deploy dolphinscheduler-api
kubectl scale --replicas=3 deploy dolphinscheduler-api -n test # with test namespace

列出所有 statefulsets (别名 sts):

kubectl get sts
kubectl get sts -n test # with test namespace

扩缩容 master 至 2 个副本:

kubectl scale --replicas=2 sts dolphinscheduler-master
kubectl scale --replicas=2 sts dolphinscheduler-master -n test # with test namespace

扩缩容 worker 至 6 个副本:

kubectl scale --replicas=6 sts dolphinscheduler-worker
kubectl scale --replicas=6 sts dolphinscheduler-worker -n test # with test namespace

如何用 MySQL 替代 PostgreSQL 作为 DolphinScheduler 的数据库?

由于商业许可证的原因,我们不能直接使用 MySQL 的驱动包.

如果你要使用 MySQL, 你可以基于官方镜像 apache/dolphinscheduler-<service> 进行构建.

从 3.0.0 版本起,dolphinscheduler 已经微服务化,更改元数据存储需要对把所有的服务都替换为 MySQL 驱动包,包括 dolphinscheduler-tools, dolphinscheduler-master, dolphinscheduler-worker, dolphinscheduler-api, dolphinscheduler-alert-server .

  1. 下载 MySQL 驱动包 mysql-connector-java-8.0.16.jar

  2. 创建一个新的 Dockerfile,用于添加 MySQL 的驱动包:

FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-<service>:3.2.0
# 例如
# FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-tools:3.2.0

# 注意,如果构建的是dolphinscheduler-tools镜像
# 需要将下面一行修改为COPY mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/tools/libs
# 其他服务保持不变即可
COPY mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/libs
  1. 构建一个包含 MySQL 驱动包的新镜像:
docker build -t apache/dolphinscheduler-<service>:mysql-driver .
  1. 推送 docker 镜像 apache/dolphinscheduler-<service>:mysql-driver 到一个 docker registry 中

  2. 修改 values.yaml 文件中 image 的 repository 字段,并更新 tag 为 mysql-driver

  3. 修改 values.yaml 文件中 postgresql 的 enabled 为 false

  4. 修改 values.yaml 文件中的 externalDatabase 配置 (尤其修改 hostusername 和 password)

externalDatabase:
  type: "mysql"
  host: "localhost"
  port: "3306"
  username: "root"
  password: "root"
  database: "dolphinscheduler"
  params: "useUnicode=true&characterEncoding=UTF-8"
  1. 部署 dolphinscheduler (详见安装 dolphinscheduler)

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

由于商业许可证的原因,我们不能直接使用 MySQL 或者 Oracle 的驱动包.

如果你要添加 MySQL 或者 Oracle, 你可以基于官方镜像 apache/dolphinscheduler-<service> 进行构建.

需要更改 dolphinscheduler-worker, dolphinscheduler-api 两个服务的镜像.

  1. 下载 MySQL 驱动包 mysql-connector-java-8.0.16.jar 或者 Oracle 驱动包 ojdbc8.jar (例如 ojdbc8-19.9.0.0.jar)

  2. 创建一个新的 Dockerfile,用于添加 MySQL 或者 Oracle 驱动包:

FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-<service>:3.2.0
# 例如
# FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-worker:3.2.0

# 如果你想支持 MySQL 数据源
COPY mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/libs

# 如果你想支持 Oracle 数据源
COPY ojdbc8-19.9.0.0.jar /opt/dolphinscheduler/libs
  1. 构建一个包含 MySQL 或者 Oracle 驱动包的新镜像:
docker build -t apache/dolphinscheduler-<service>:new-driver .
  1. 推送 docker 镜像 apache/dolphinscheduler-<service>:new-driver 到一个 docker registry 中

  2. 修改 values.yaml 文件中 image 的 repository 字段,并更新 tag 为 new-driver

  3. 部署 dolphinscheduler (详见安装 dolphinscheduler)

  4. 在数据源中心添加一个 MySQL 或者 Oracle 数据源

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

只需要更改 dolphinscheduler-worker 服务的镜像.

  1. 创建一个新的 Dockerfile,用于安装 pip:
FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-worker:3.2.0
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 && \
  1. 构建一个包含 pip 的新镜像:
docker build -t apache/dolphinscheduler-worker:pip .
  1. 推送 docker 镜像 apache/dolphinscheduler-worker:pip 到一个 docker registry 中

  2. 修改 values.yaml 文件中 image 的 repository 字段,并更新 tag 为 pip

  3. 部署 dolphinscheduler (详见安装 dolphinscheduler)

  4. 在一个新 Python 任务下验证 pip

如何支持 Python 3?

只需要更改 dolphinscheduler-worker 服务的镜像.

  1. 创建一个新的 Dockerfile,用于安装 Python 3:
FROM dolphinscheduler.docker.scarf.sh/apache/dolphinscheduler-worker:3.2.0
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 && \
  1. 构建一个包含 Python 3 的新镜像:
docker build -t apache/dolphinscheduler-worker:python3 .
  1. 推送 docker 镜像 apache/dolphinscheduler-worker:python3 到一个 docker registry 中

  2. 修改 values.yaml 文件中 image 的 repository 字段,并更新 tag 为 python3

  3. 修改 values.yaml 文件中的 PYTHON_LAUNCHER 为 /usr/bin/python3

  4. 部署 dolphinscheduler (详见安装 dolphinscheduler)

  5. 在一个新 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. 确保 common.sharedStoragePersistence.enabled 开启

  3. 部署 dolphinscheduler (详见安装 dolphinscheduler)

  4. 复制 Spark 3.1.1 二进制包到 Docker 容器中

kubectl cp spark-2.4.7-bin-hadoop2.7.tgz dolphinscheduler-worker-0:/opt/soft
kubectl cp -n test spark-2.4.7-bin-hadoop2.7.tgz dolphinscheduler-worker-0:/opt/soft # with test namespace

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

  1. 登录到容器并确保 SPARK_HOME 存在
kubectl exec -it dolphinscheduler-worker-0 bash
kubectl exec -n test -it dolphinscheduler-worker-0 bash # with test namespace
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 # or just mv
$SPARK_HOME/bin/spark-submit --version

如果一切执行正常,最后一条命令将会打印 Spark 版本信息

  1. 在一个 Shell 任务下验证 Spark
$SPARK_HOME/bin/spark-submit --class org.apache.spark.examples.SparkPi $SPARK_HOME/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 任务并设置:

  • 主函数的 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 (部署方式为 cluster 或 client) 需要 Hadoop 支持. 类似于 Spark 支持, 支持 Hadoop 的操作几乎和前面的步骤相同

确保 $HADOOP_HOME 和 $HADOOP_CONF_DIR 存在

如何在 Master、Worker 和 Api 服务之间支持共享存储?

例如, Master、Worker 和 Api 服务可能同时使用 Hadoop

  1. 修改 values.yaml 文件中下面的配置项
common:
  sharedStoragePersistence:
    enabled: false
    mountPath: "/opt/soft"
    accessModes:
      - "ReadWriteMany"
    storageClassName: "-"
    storage: "20Gi"

storageClassName 和 storage 需要被修改为实际值

注意storageClassName 必须支持访问模式: ReadWriteMany

  1. 将 Hadoop 复制到目录 /opt/soft

  2. 确保 $HADOOP_HOME 和 $HADOOP_CONF_DIR 正确

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

修改 values.yaml 文件中下面的配置项

common:
  configmap:
    RESOURCE_STORAGE_TYPE: "HDFS"
    RESOURCE_UPLOAD_PATH: "/dolphinscheduler"
    FS_DEFAULT_FS: "file:///"
  fsFileResourcePersistence:
    enabled: true
    accessModes:
      - "ReadWriteMany"
    storageClassName: "-"
    storage: "20Gi"

storageClassName 和 storage 需要被修改为实际值

注意storageClassName 必须支持访问模式: ReadWriteMany

如何支持 S3 资源存储,例如 MinIO?

以 MinIO 为例: 修改 values.yaml 文件中下面的配置项

common:
  configmap:
    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_NAMEMINIO_IPMINIO_ACCESS_KEY 和 MINIO_SECRET_KEY 需要被修改为实际值

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

如何配置 SkyWalking?

修改 values.yaml 文件中的 SKYWALKING 配置项

common:
  configmap:
    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"

如何单独部署特定组件?

修改 values.yaml 文件中的 api.enabledalert.enabled master.enabled 或 worker.enabled 配置项

例如,在一个集群中需要同时将 worker 部署到 CPU 服务器和 GPU 服务器,并且 worker 使用不同的镜像,可以这样做:文章来源地址https://www.toymoban.com/news/detail-815780.html

# 安装 master、api-server、alert-server以及其他默认组件,但是不安装 worker
helm install dolphinscheduler . --set worker.enabled=false
# 禁用其他组件的安装,只安装 worker,使用自行建构建的 CPU镜像,通过 nodeselector部署到附带 x86标签的 CPU服务器,使用 zookeeper作为外部注册中心
helm install dolphinscheduler-cpu-worker . \
     --set minio.enabled=false --set postgresql.enabled=false --set zookeeper.enabled=false \
     --set master.enabled=false  --set api.enabled=false --set alert.enabled=false \
     --set worker.enabled=true --set image.tag=latest-cpu --set worker.nodeSelector.cpu="x86" \
     --set externalRegistry.registryPluginName=zookeeper --set externalRegistry.registryServers=dolphinscheduler-zookeeper:2181
# 禁用其他组件的安装,只安装 worker,使用自行建构建的 GPU 镜像,通过 nodeselector部署到附带 a100标签的 gpu服务器,使用zookeeper作为外部注册中心
helm install dolphinscheduler-gpu-worker . \
     --set minio.enabled=false --set postgresql.enabled=false --set zookeeper.enabled=false \
     --set master.enabled=false  --set api.enabled=false --set alert.enabled=false \
     --set worker.enabled=true --set image.tag=latest-gpu --set worker.nodeSelector.gpu="a100" \
     --set externalRegistry.registryPluginName=zookeeper --set externalRegistry.registryServers=dolphinscheduler-zookeeper:2181

到了这里,关于【大数据进阶第三阶段之DolphinScheduler学习笔记】DolphinScheduler(海豚调度)的部署指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DolphinScheduler 3.1.0 海豚集群运维使用问题记录

    海豚框架官方文档 常用命令: 命令 含义 bin/start-all.sh 集群群起 bin/stop-all.sh 集群群停 bin/status-all.sh 查看状态 dolphinscheduler-daemon.sh start/stop master-server 单独启动或者停止master-server dolphinscheduler-daemon.sh start/stop worker-server 单独启动或者停止worker-server dolphinscheduler-daemon.sh start/st

    2024年02月02日
    浏览(35)
  • 海豚²来了丨DolphinDB 集成 DolphinScheduler,任务调度更轻松

    DolphinDB 是一款高性能时序数据库。DolphinDB 集成了功能强大的编程语言和高容量高速度的批流一体数据分析系统,为海量数据(特别是时间序列数据)的快速存储、检索、计算及分析提供一站式解决方案。在实际生产环境中,经常存在 数据导入、转换、查询计算,更新等一系

    2024年02月03日
    浏览(61)
  • 最新版海豚调度dolphinscheduler-3.1.3安装部署详细教程

    本文基于Ambari集群搭建最新版本的海豚调度dolphinscheduler-3.1.3版本,后续会尝试整合到Ambari中。 安装dolphinscheduler需要在环境中安装如下依赖 ① JDK8 下载JDK (1.8+),安装并配置 JAVA_HOME 环境变量,并将其下的 bin 目录追加到 PATH 环境变量中 ② 数据库:PostgreSQL (8.2.15+) 或者 MySQL

    2023年04月15日
    浏览(53)
  • 海豚调度 DolphinScheduler(2.x和3.x版本) 本地环境搭建,方便本地调式代码

    💡 本系列文章是 DolphinScheduler 由浅入深的教程,涵盖搭建、二开迭代、核心原理解读、运维和管理等一系列内容。适用于想对 DolphinScheduler了解或想要加深理解的读者。 祝开卷有益。 大数据学习指南 DolphinScheduler 的开源版本有不少的 BUG,所以在公司生产使用的话,需要做二

    2024年02月11日
    浏览(53)
  • 从小白到大神之路之学习运维第37天---第三阶段---mysql数据库之拓展知识

    拓展知识 目录 一、MySQL数据库目录结构以及存放位置 二、MySQL Enterprise Backup 三、MySQL读写分离器 四、进程和线程 五、CentOS 7 中配置静态 IP     1. 数据库存储目录: MySQL数据库的数据文件存储在指定的数据目录下。MySQL安装时默认数据目录在Linux系统中为/var/lib/mysql,Windows系

    2024年02月08日
    浏览(52)
  • 【计算机网络】学习笔记:第三章 数据链路层【王道考研】持续更新中....

    基于本人观看学习b站王道计算机网络课程所做的笔记,不做任何获利 仅进行交流分享 特此鸣谢王道考研 若有侵权请联系,立删 如果本篇笔记帮助到了你,还请点赞 关注 支持一下 ♡𖥦)!! 主页专栏有更多,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持

    2024年02月01日
    浏览(61)
  • 【计算机网络】学习笔记:第三章 数据链路层(八千字详细配图)【王道考研】

    基于本人观看学习b站王道计算机网络课程所做的笔记,不做任何获利 仅进行交流分享 特此鸣谢王道考研 若有侵权请联系,立删 如果本篇笔记帮助到了你,还请点赞 关注 支持一下 ♡𖥦)!! 主页专栏有更多,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持

    2024年02月06日
    浏览(63)
  • C#学习笔记--数据结构、泛型、委托事件等进阶知识点

    ArrayList 元素类型以Object类型存储,支持增删查改的数组容器。 因而存在装箱拆箱操作,谨慎使用。 ArrayList和数组区别? ArrayList使用不用说明固定长度,数组则需要 数组存储的是指定类型的,ArrayList是Object ArrayList存在装箱拆箱,数组不存在 ArrayList数组长度用Count获取 而数组

    2024年02月08日
    浏览(50)
  • 从小白到大神之路之学习运维第44天---第三阶段----拓展知识-----文件管理命令(find+sed+awk)、pycharm工具

    第三阶段基础 时  间:2023年6月20日 参加人:全班人员 内  容: 目录 一、文件管理命令 find 1. 根据文件名查找文件 2. 根据文件类型查找文件 3. 根据文件大小查找文件 4. 根据时间戳查找文件 5. 组合多个条件查找文件 Sed 1. 替换文本 2. 插入和删除行 3. 格式化输出 总 结: a

    2024年02月09日
    浏览(52)
  • 从小白到大神之路之学习运维第41天---第三阶段---Redis高可用集群(redis 的主从复制、redis的哨兵模式操作)

    第三阶段基础 时  间:2023年6月15日 参加人:全班人员 内  容: Redis高可用集群 目录 一、redis主从复制原理介绍 主从复制特点: 主从复制实现原理: 二、主从复制实现操作(多机实例实现)   前提配置: 主库操作: 从库一操作: 从库二操作: 主库变化: 验  证: 三、

    2024年02月09日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包