当前位置: 首页 > news >正文

数仓工具使用Docker部署DolphinScheduler 3.2.0 (分布式任务调度系统)-单机模式

Apache DolphinScheduler——开源大数据调度器神器
Apache DolphinScheduler(海豚调度),国人之光,是许多国人雷锋开源在Apache的顶级项目,主要功能就是负责任务的调度处理,Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用,架构如图,大概看一下
在这里插入图片描述
架构分布图说明:
分布式 :就是可以这个组件不同的部分可以分布在不同的机器上,整体的协调工作完成任务调度;(为啥要分布式而不装在一台,因为一头牛拉一大堆物资可能会累死,除了培养更加强壮的牛以外,还可以让多头牛去拉);
去中心化:DolphinScheduler有多台master(负责发号施令,布置任务,接受成果),假设有m1,m2,m3……,也有多台worker(负责真正干活的小弟),假设有w1,w2,w3……,而这些机器都注册在zookeeper,每次任务A来的时候,都同时需要m和w,但是根据你配置的不同任务A将分到不同的m和w上,而不是单纯在一个单点上运行,提高容错性,当然如果你玩单机模式,则不存在这个概念;
易扩展:既然master,worker可以有多个,那可不可有更多,所以DolphinScheduler是支持扩容的,反之,实践中发现太败家了,需要回收一些机器,也是可以支持缩容的;
可视化DAG工作流任务调度:就是除了提供查看日志来查看任务和工作流的运行情况,还有个有序无环图可查看任务和工作流的运行情况;
处理流程中错综复杂的依赖关系:现在有要跑的项目A,B;项目A有工作流a1(内有任务一s1,任务二s2),a2(内有任务一s3,任务二s4),a3(内有任务一s5,任务二s6);项目B里面有工作流b1(内有任务一s7,任务二s8),b2(内有任务一s9,任务二s10);一般的任务调度器,都能保证一个工作流内的任务如s1,s2是有序往下运行的,当然也可并行;但是有些调度器就实现不了工作流a1和a2以及a3之间有依赖关系了,比如某些场景下必须工作流b1先跑完,才可以跑a1,a2;那更甚至的必须先跑完整个项目B才能跑 项目A就更不支持了,即项目之间有壁垒,这些都是比价差劲的,需要用户自己想办法去实现,但是DolphinScheduler这些缺陷都填了,即以上的这些复杂依赖关系,不论是工作流之间,项目之间都支持;
架构图
在这里插入图片描述
DolphinScheduler支持多种部署模式,包括单机模式(Standalone)伪集群模式(Pseudo-Cluster)集群模式(Cluster)等。
1)单机模式
单机模式下,所有的服务都集中于一个StandaloneServer进程中,并且在其中内置了注册中心Zookeeper和数据库H2,只需要配置JDK环境,就可以一键启动DolphinScheduler。
一般用于快速体验功能。
2)伪集群模式
伪集群模式是在单台机器上部署DolphinScheduler各项服务,该模式下master、worker、api server、logger server等服务都只在同一台机器上。Zookeeper和数据库需单独安装并进行相应配置。
适用于公司中正式上线前的测试集群。
3 )集群模式
集群模式与伪集群模式的区别就是在多台机器上部署DolohinScheduler各项服务,并且可以配置多个Master及多个Worker。
DolphinScheduler概述
DolphinScheduler是一个分布式、易扩展的可视化DAG工作流调度平台,致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。
DolphinScheduler组件
DolphinScheduler主要包含以下几个部分:
1)MasterServer
采用分布式无中心设计理念。
MasterServer主要负责DAG(工作流)任务切分、任务提交(提交给WorkerServer并分配任务给WorkerServer)、任务监控,并同时监听其它的MasterServer和WorkerServer的健康状态(为了做高可用,容错机制。假如有一个WorkerServer挂掉了,要把它的工作分配给别的WorkerServer;假如有一个MasterServer挂掉了,那么这个MasterServer负责的工作就要交给别的MasterServer去负责,哪个MasterServer抢到它就负责)。
2)WorkerServer
也采用分布式无中心设计理念。
WorkerServer主要负责任务的执行和提供日志服务。
3)Zookeeeper
系统中的MasterServer和WorkerServer节点都通过Zookeeper来进行集群管理和容错,zookeeper负责协调整个集群。
4)Alert
Alert服务,提供告警相关服务(电话、邮件等等)。
5)API接口
API接口层,主要负责处理前端UI的请求,比如前端要看有哪些任务再执行,执行的进度如何,都要通过API接口调用。
6)UI
UI是整个系统的前端页面,提供系统的各种可视化操作界面。
接下来就来进入实战演练呀,先是单机模式,
如果是非单例模式请看另外一篇文章:

https://blog.csdn.net/weimeilayer/article/details/141052040

首先安装部署DolphinScheduler需要docker 19x以上

1.安装docker-ce
安装依赖的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

添加Docker的阿里云yum源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新软件包索引

yum makecache fast

查看docker版本,这里选择25.0.5

yum list docker-ce --showduplicates |sort –r

安装docker-ce

yum install -y docker-ce-25.0.5

2.启动Docker服务

systemctl start docker             #启动Docker
systemctl enable docker.service    #设置开机自启

查看docker版本

docker --version

开始拉取dolphinscheduler镜像

docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/dolphinscheduler-standalone-server:3.2.0

启动服务
使用 standalone-server 镜像

docker run --name dolphinscheduler-standalone-server \-p 32000:12345 \-p 25333:25333 \-v /data/dolphinscheduler:/opt/dolphinscheduler \-d registry.cn-hangzhou.aliyuncs.com/qiluo-images/dolphinscheduler-standalone-server:3.2.0

添加了重启策略 --restart unless-stopped,它确保容器自动重启,除非它被明确停止。这提高了服务器重新启动或容器崩溃时的可靠性。

docker run --name dolphinscheduler-standalone-server \-p 32000:12345 \-p 25333:25333 \-v /data/dolphinscheduler:/opt/dolphinscheduler \-e DOLPHINSCHEDULER_OPTS="-Xms512m -Xmx1024m" \--restart unless-stopped \-d registry.cn-hangzhou.aliyuncs.com/qiluo-images/dolphinscheduler-standalone-server:3.2.0

swagger 地址:http://ip:端口/dolphinscheduler/swagger-ui/index.html
在这里插入图片描述
登录DolphinScheduler界面
启动服务后,在浏览器中输入http://ip:端口/dolphinscheduler/ui 访问DolphinScheduler.
默认的用户名:admin 密码:dolphinscheduler123
在这里插入图片描述
登录成功后进入到DolphinScheduler的管理界面。
在这里插入图片描述
然后是准备驱动,上传到 /data/dolphinscheduler/目录下

kingbase8-8.6.0.jar
mysql-connector-j-8.4.0.jar
mysql-connector-java-5.1.48.jar
ojdbc6-11.2.0.3.jar
postgresql-42.7.3.jar
DmJdbcDriver18-8.1.2.79.jar

然后进入/data/dolphinscheduler/目录

cd /data/dolphinscheduler

然后复制驱动到容器中

docker cp kingbase8-8.6.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/alert-server/
docker cp mysql-connector-j-8.4.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/alert-server/
docker cp mysql-connector-java-5.1.48.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/alert-server/
docker cp ojdbc6-11.2.0.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/alert-server/
docker cp postgresql-42.7.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/alert-server/
docker cp DmJdbcDriver18-8.1.2.79.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/alert-server/docker cp kingbase8-8.6.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/api-server/
docker cp mysql-connector-j-8.4.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/api-server/
docker cp mysql-connector-java-5.1.48.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/api-server/
docker cp ojdbc6-11.2.0.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/api-server/
docker cp postgresql-42.7.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/api-server/
docker cp DmJdbcDriver18-8.1.2.79.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/api-server/docker cp kingbase8-8.6.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/master-server/
docker cp mysql-connector-j-8.4.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/master-server/
docker cp mysql-connector-java-5.1.48.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/master-server/
docker cp ojdbc6-11.2.0.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/master-server/
docker cp postgresql-42.7.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/master-server/
docker cp DmJdbcDriver18-8.1.2.79.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/master-server/docker cp kingbase8-8.6.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/worker-server/
docker cp mysql-connector-j-8.4.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/worker-server/
docker cp mysql-connector-java-5.1.48.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/worker-server/
docker cp ojdbc6-11.2.0.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/worker-server/
docker cp postgresql-42.7.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/worker-server/
docker cp DmJdbcDriver18-8.1.2.79.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/worker-server/# 暂时可以不需要
docker cp kingbase8-8.6.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/standalone-server/
docker cp mysql-connector-j-8.4.0.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/standalone-server/
docker cp mysql-connector-java-5.1.48.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/standalone-server/
docker cp ojdbc6-11.2.0.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/standalone-server/
docker cp postgresql-42.7.3.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/standalone-server/
docker cp DmJdbcDriver18-8.1.2.79.jar dolphinscheduler-standalone-server:/opt/dolphinscheduler/libs/standalone-server/

然后有需要使用到datax的组件需要python3环境
进入容器直接执行命令

apt-get update
apt-get install -y python3 python3-pip
apt-get install -y python python-pip
python3 --version 
pip3 --version

然后有需要使用到datax的组件需要python2环境
进入容器直接执行命令

apt-get update
apt-get install -y python python-pip
python --version
pip --version

此时此刻就完成部署了,就可以测试连接了
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e0d2417ba371480893c1f7a24fed54f2.png
测试Doris 连接成功了
在这里插入图片描述

如何使用Kubernetes上部署dolphinscheduler-standalone-server
创建vi dolphinscheduler-deployment.yaml

apiVersion: v1
kind: PersistentVolume
metadata:name: dolphinscheduler-pv
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncehostPath:path: "/data/dolphinscheduler"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: dolphinscheduler-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:name: dolphinscheduler-standalone-serverlabels:app: dolphinscheduler
spec:replicas: 1selector:matchLabels:app: dolphinschedulertemplate:metadata:labels:app: dolphinschedulerspec:containers:- name: dolphinscheduler-standalone-serverimage: registry.cn-hangzhou.aliyuncs.com/qiluo-images/dolphinscheduler-standalone-server:3.2.0ports:- containerPort: 12345name: api-port- containerPort: 25333name: master-portvolumeMounts:- name: dolphinscheduler-storagemountPath: /opt/dolphinschedulervolumes:- name: dolphinscheduler-storagepersistentVolumeClaim:claimName: dolphinscheduler-pvc
---
apiVersion: v1
kind: Service
metadata:name: dolphinscheduler-servicelabels:app: dolphinscheduler
spec:selector:app: dolphinschedulerports:- name: api-portprotocol: TCPport: 12345targetPort: 12345nodePort: 32000- name: master-portprotocol: TCPport: 25333targetPort: 25333nodePort: 25333type: NodePort

然后部署

kubectl apply -f dolphinscheduler-deployment.yaml

第三种在Kubernetes上部署Apache DolphinScheduler

1.建议为DolphinScheduler创建一个单独的命名空间(如果还没创建):

kubectl create namespace dolphinscheduler

2.准备ZooKeeper
DolphinScheduler依赖ZooKeeper作为协调服务。可以使用已有的ZooKeeper服务,也可以在Kubernetes上部署一个新的实例。以下是一个简单的ZooKeeper StatefulSet部署:

vi zookeeper-deployment.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: zookeepernamespace: dolphinscheduler
spec:serviceName: "zookeeper"replicas: 3selector:matchLabels:app: zookeepertemplate:metadata:labels:app: zookeeperspec:containers:- name: zookeeperimage: registry.cn-hangzhou.aliyuncs.com/qiluo-images/zookeeper:latestports:- containerPort: 2181volumeMounts:- name: datamountPath: /datavolumeClaimTemplates:- metadata:name: dataspec:accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 1Gi

3.准备PostgreSQL,但是MySQL也是可以的
DolphinScheduler依赖PostgreSQL数据库存储任务信息。可以使用已有的PostgreSQL服务,也可以部署一个新的:

vi postgresql-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: postgresnamespace: dolphinscheduler
spec:replicas: 1selector:matchLabels:app: postgrestemplate:metadata:labels:app: postgresspec:containers:- name: postgresimage: registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres:latestports:- containerPort: 5432env:- name: POSTGRES_USERvalue: "dolphinscheduler"- name: POSTGRES_PASSWORDvalue: "Yo5WYypu0mCCheOU"- name: POSTGRES_DBvalue: "dolphinscheduler"

4.部署DolphinScheduler
创建DolphinScheduler的Deployment和Service资源。你需要配置环境变量来连接ZooKeeper和PostgreSQL:

vi dolphinscheduler-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: dolphinschedulernamespace: dolphinscheduler
spec:replicas: 1selector:matchLabels:app: dolphinschedulertemplate:metadata:labels:app: dolphinschedulerspec:containers:- name: dolphinschedulerimage: registry.cn-hangzhou.aliyuncs.com/qiluo-images/dolphinscheduler:latestports:- containerPort: 12345- containerPort: 56789env:- name: DATABASE_HOSTvalue: "plsql.dolphinscheduler.svc.cluster.local"- name: DATABASE_PORTvalue: "5432"- name: DATABASE_DATABASEvalue: "dolphinscheduler"- name: DATABASE_USERNAMEvalue: "dolphinscheduler"- name: DATABASE_PASSWORDvalue: "Yo5WYypu0mCCheOU"- name: ZOOKEEPER_QUORUMvalue: "zookeeper.dolphinscheduler.svc.cluster.local:2181"
  1. 配置Ingress或NodePort
    根据你的集群设置,可能需要配置Ingress或NodePort以暴露DolphinScheduler的Web UI:
vi dolphinscheduler-service.yaml
apiVersion: v1
kind: Service
metadata:name: dolphinscheduler-servicenamespace: dolphinscheduler
spec:type: NodePortports:- port: 12345targetPort: 12345nodePort: 30001- port: 56789targetPort: 56789nodePort: 30002selector:app: dolphinscheduler

最后执行

kubectl apply -f zookeeper-deployment.yaml
kubectl apply -f postgresql-deployment.yaml
kubectl apply -f dolphinscheduler-deployment.yaml
kubectl apply -f dolphinscheduler-service.yaml

在这里插入图片描述

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • -Wl,-rpath= 编译器链接器指定动态库路径 与 LD_LIBRARY_PATH
  • 期末九天从入门到精通操作数据库(mysql)
  • 猫头虎 分享:Python库 SymPy 的简介、安装、用法详解入门教程 ‍
  • 鹏城杯 2022 取证writeup
  • OD C卷 - 结对编程
  • 计算机毕业设计 高校学术交流平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • python实用教程(二):安装配置Pycharm及使用(Win10)
  • 【MySQL】 黑马 MySQL进阶 笔记
  • 解决 VMware 中 Ubuntu文件系统磁盘空间不足
  • 【Leetcode 1832 】 判断句子是否为全字母句 —— 忙忙碌碌哈希表不如一行代码速度快
  • Object.create的原型继承
  • [笔记] hyperf event
  • Html中嵌入module类型的JavaScript代码,如何访问其中的函数或变量?
  • 数论之高斯消元
  • Spring父子容器
  • hexo+github搭建个人博客
  • angular2 简述
  • CSS中外联样式表代表的含义
  • Java反射-动态类加载和重新加载
  • MySQL-事务管理(基础)
  • node入门
  • PaddlePaddle-GitHub的正确打开姿势
  • Python 基础起步 (十) 什么叫函数?
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SQL 难点解决:记录的引用
  • WebSocket使用
  • 爱情 北京女病人
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 聊聊hikari连接池的leakDetectionThreshold
  • 盘点那些不知名却常用的 Git 操作
  • 强力优化Rancher k8s中国区的使用体验
  • 提醒我喝水chrome插件开发指南
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 栈实现走出迷宫(C++)
  • puppet连载22:define用法
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $ git push -u origin master 推送到远程库出错
  • (2)Java 简介
  • (4)(4.6) Triducer
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转载)虚函数剖析
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 读取 JSON格式的数据
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [android] 切换界面的通用处理