探秘 DolphinScheduler:从理念到单机部署实践

共计 4069 个字符,预计需要花费 11 分钟才能阅读完成。

简介

Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。
Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种 OPS 编排中的关系。 解决数据研发ETL依赖错综复杂,无法监控任务健康状态的问题。 DolphinScheduler 以 DAG(Directed Acyclic Graph,DAG)流式方式组装任务,可以及时监控任务的执行状态,支持重试、指定节点恢复失败、暂停、恢复、终止任务等操作。
探秘 DolphinScheduler:从理念到单机部署实践

特性

简单易用

- 可视化 DAG: 用户友好的,通过拖拽定义工作流的,运行时控制工具
- 模块化操作: 模块化有助于轻松定制和维护。

丰富的使用场景

- 支持多种任务类型: 支持Shell、MR、Spark、SQL等10余种任务类型,支持跨语言,易于扩展
- 丰富的工作流操作: 工作流程可以定时、暂停、恢复和停止,便于维护和控制全局和本地参数。

High Reliability

- 高可靠性: 去中心化设计,确保稳定性。 原生 HA 任务队列支持,提供过载容错能力。 DolphinScheduler 能提供高度稳健的环境。

High Scalability

- 高扩展性: 支持多租户和在线资源管理。支持每天10万个数据任务的稳定运行。

系统架构

###系统架构图
探秘 DolphinScheduler:从理念到单机部署实践

架构说明

  • MasterServer
    MasterServer采用分布式无中心设计理念,MasterServer主要负责 DAG 任务切分、任务提交监控,并同时监听其它MasterServer和WorkerServer的健康状态。 MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。MasterServer基于netty提供监听服务。
    该服务内主要包含:

    • DistributedQuartz分布式调度组件,主要负责定时任务的启停操作,当quartz调起任务后,Master内部会有线程池具体负责处理任务的后续操作;
    • MasterSchedulerService是一个扫描线程,定时扫描数据库中的t_ds_command表,根据不同的命令类型进行不同的业务操作;
    • WorkflowExecuteRunnable主要是负责DAG任务切分、任务提交监控、各种不同事件类型的逻辑处理;
    • TaskExecuteRunnable主要负责任务的处理和持久化,并生成任务事件提交到工作流的事件队列;
    • EventExecuteService主要负责工作流实例的事件队列的轮询;
    • StateWheelExecuteThread主要负责工作流和任务超时、任务重试、任务依赖的轮询,并生成对应的工作流或任务事件提交到工作流的事件队列;
    • FailoverExecuteThread主要负责Master容错和Worker容错的相关逻辑;
  • WorkerServer
    WorkerServer也采用分布式无中心设计理念,WorkerServer主要负责任务的执行和提供日志服务。
    WorkerServer服务启动时向Zookeeper注册临时节点,并维持心跳。
    WorkerServer基于netty提供监听服务。
    该服务包含:

    • WorkerManagerThread主要负责任务队列的提交,不断从任务队列中领取任务,提交到线程池处理;
    • TaskExecuteThread主要负责任务执行的流程,根据不同的任务类型进行任务的实际处理;
    • RetryReportTaskStatusThread主要负责定时轮询向Master汇报任务的状态,直到Master回复状态的ack,避免任务状态丢失;
  • ZooKeeper
    ZooKeeper服务,系统中的MasterServer和WorkerServer节点都通过ZooKeeper来进行集群管理和容错。另外系统还基于ZooKeeper进行事件监听和分布式锁。
    我们也曾经基于Redis实现过队列,不过我们希望DolphinScheduler依赖到的组件尽量地少,所以最后还是去掉了Redis实现。

  • AlertServer
    提供告警服务,通过告警插件的方式实现丰富的告警手段。

  • ApiServer
    API接口层,主要负责处理前端UI层的请求。该服务统一提供RESTful api向外部提供请求服务。

  • UI
    系统的前端页面,提供系统的各种可视化操作界面。

    部署

    单机部署(Standalone)

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

配置依赖

将tar包解压到 /usr/local下 版本为jdk-8u211-linux-x64.tar.gz ; #路径为/usr/local/jdk1.8.0_211(解包后自动生成)
解包到/usr/local,意思是本机用户环境启动

tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local

在配置文件里声明路径(指定路径)

echo ''export JAVA_HOME=/usr/local/jdk1.8.0_291'' >> /etc/profile.d/jdk8.sh

在配置文件里声明Java变量环境

echo "export CLASS_PATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/jar/tools.jar:\$JAVA_HOME/jre/lib" >> /etc/profile.d/jdk8.sh

在配置文件里声明启动Java变量环境

echo "export PATH=\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin:\$PATH" >> /etc/profile.d/jdk8.sh

在配置文件里声明启动Java变量环境路径

echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/local/apr/lib" >> /etc/profile.d/jdk8.sh

给Java变量环境添加执行权限

chmod +x /etc/profile.d/jdk8.sh

重启环境

source /etc/profile.d/jdk8.sh

查看Java变量环境

java -version

显示

[root@dolphinscheduler ~]# java -version
openjdk version "1.8.0_412"
OpenJDK Runtime Environment (build 1.8.0_412-b08)
OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)
[root@dolphinscheduler ~]# 

下载DolphinScheduler二进制文件

wget https://dlcdn.apache.org/dolphinscheduler/3.2.2/apache-dolphinsscheduler-3.2.2-bin.tar.gz

解压并运行

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

登录 DolphinScheduler

浏览器访问地址 http://localhost:12345/dolphinscheduler/ui 即可登录系统 UI。默认的用户名和密码是 admin/dolphinscheduler123
探秘 DolphinScheduler:从理念到单机部署实践
###启停服务
脚本 ./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
正文完
 0