热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

架构升级给DolphScheduler带来2~3倍性能提升

 引言大数据任务调度作为大数据建设中的核心基础设施,在经过社区用户们长期的使用中,不少用户对调度也提出了很多新的要求,为此,ApacheDolphinScheduler(Incub

 引言

大数据任务调度作为大数据建设中的核心基础设施,在经过社区用户们长期的使用中,不少用户对调度也提出了很多新的要求,为此,Apache DolphinScheduler(Incubating)经过长达  5 个多月的辛苦努力, 终于发布了 1.3.2 正式版本。DolphinScheduler-1.3.2 有超过 30 名贡献者参与开发,性能较 1.2 版本有 2 ~ 3 倍的提升,相对 1.2 版本,1.3.x 增加了诸如 K8s支持、多目录管理等重要的新特性和新的任务类型。1.3.x 重要的改动如下:

架构升级:重构 worker server

  • 移除基于 ZooKeeper 的任务队列

  • 引入 Netty 进行 master 和 worker 间的通信

  • 提供了三种 master 分发任务的算法:随机,轮询和资源线性加权

  • Worker 不再操作数据库,减轻数据库压力

 

新增任务类型

  • 数据同步节点:新增了 DataX 和 Sqoop 节点,加强 DolphinScheduler 构建全流程ETL 工作流的能力

  • 条件分支节点:提供了多个上游任务结果的复杂逻辑判断能力,根据用户自定义逻辑进行分支流转

 

易用性提升

  • 资源中心支持目录管理:资源中心支持目录类型,用户可以分项目或模块进行资源文件管理

  • 支持 Ambari 插件:支持使用 Ambari 进行 DolphinScheduler 的集群部署和管理

  • 支持 K8s:DolphinScheduler 支持 K8s 部署。为了支持 k8s,worker 分组数据不再存储在 mysql,而通过配置文件中指定 worker 标签的方式,存储在 ZooKeeper 中

  • 简化配置文件:分离 install.sh 中的参数配置和集群部署配置,install.sh 仅进行集群部署,集群参数配置文件抽取到 conf/config/install_config.conf 中

  • 工作流布局优化:提供一键美化工作流布局功能

  • 其他特性(部分)

  • 增加工作流复制功能

  • 删除任务实例级联删除对应的任务实例日志

1.3.x 新特性解读

1、重构 Worker

DolphinScheduler 1.2 的整体架构

架构升级给DolphScheduler带来 2~3 倍性能提升

DolphinScheduler 1.2 架构

 

在 DolphinScheduler 1.2 中,master 和 worker 的职责分别如下:

Master 

master 采用分布式无中心设计理念,master 主要负责 DAG 任务切分、任务提交监控,并同时监听其它master 和 worker 的健康状态。

master 服务启动时向 Zookeeper 注册临时节点,通过监听 Zookeeper 临时节点变化来进行容错处理。

该服务内主要包含:

  • Distributed Quartz 分布式调度组件,主要负责定时任务的启停操作,当 quartz 调起任务后,Master内部会有线程池具体负责处理任务的后续操作

  • MasterSchedulerThread 是一个扫描线程,定时扫描数据库中的 command 表,根据不同的命令类型进行不同的业务操作

  • MasterExecThread 主要是负责DAG任务切分、任务提交监控、各种不同命令类型的逻辑处理

  • MasterTaskExecThread 主要负责任务的持久化

 

Worker

worker 也采用分布式无中心设计理念,worker 主要负责任务的执行和提供日志服务。worker 服务启动时向 Zookeeper 注册临时节点,并维持心跳。

该服务包含:

  • FetchTaskThread 主要负责不断从 Task Queue 中领取任务,并根据不同任务类型调用TaskScheduleThread 对应执行器。

  • LoggerServer 是一个 RPC 服务,提供日志分片查看、刷新和下载等功能

 

在 1.2 版本实现的架构中,任务队列的实现基于 ZooKeeper。master 将任务数据存放到 ZooKeeper 中,然后 worker 节点通过分布式锁的方式去消费任务队列,延迟了任务开始执行的时间。为保证任务队列的性能,ZooKeeper 的节点中并未存储执行任务所需的全部数据。许多任务的元数据如租户,队列和任务实例信息等都需要由 worker 操作数据库进行获取,增加了数据库的负担。所以在 1.3 的架构设计中,我们着重考虑到减少 worker 的压力,设计了如下新架构

 

DolphinScheduler 1.3 新架构

架构升级给DolphScheduler带来 2~3 倍性能提升

DolphinScheduler 1.3 新架构

 

在 DolphinScheduler 1.3 中,任务队列基于 Netty 实现,master 保留了原有的逻辑,当 master 节点切分出任务节点后,使用配置的任务分发策略直接发送目标 worker 节点进行执行。worker 节点在启动的时候将节点信息和分组信息注册到 ZooKeeper 中,供 master 节点进行调用。性能优化的核心是去除了 worker节点的 ZooKeeper 操作和数据库操作。1.3 的架构分层详细图如下:

架构升级给DolphScheduler带来 2~3 倍性能提升

 

1.3 整个系统运作过程的活动图如下:

架构升级给DolphScheduler带来 2~3 倍性能提升

更多详细信息参见 issue:https://github.com/apache/incubator-dolphinscheduler/issues/1658

2、新增任务类型

数据同步节点

DolphinScheduler 作为一个数据处理调度系统支持了多种 ETL 功能节点,如 SQL 节点,存储过程节点和 Spark 节点等。在整个 ETL 流程中,多源异构数据的集成是基础。因此,在1.3.1版本中DolphinScheduler 集成了成熟的数据交换引擎 DataX 和 Sqoop 以支持多源异构数据源间的传输交换。目前,DolphinScheduler 已打通整个数据摄取-数据处理-数据结果同步的 ETL 流程。使用数据同步节点,可以避免在shell脚本中直接配置数据源的连接信息,所有的数据源权限均受 DolphinScheduler 管控。

DataX 节点

 

架构升级给DolphScheduler带来 2~3 倍性能提升

Sqoop节点

 

架构升级给DolphScheduler带来 2~3 倍性能提升

条件分支节点

Dolphin Scheduler 1.3.1 支持条件分支节点,用户可以在自定义参数中定义分支流转的判断逻辑,根据上游任务的执行情况,决定后续执行的分支。

架构升级给DolphScheduler带来 2~3 倍性能提升

 

注意,条件节点是一种逻辑判断任务,不会分发到 worker 去执行,是在 master 上执行的一个逻辑节点。

3、资源中心支持目录结构

DolphinScheduler 1.3.1 支持了资源中心目录化和授权资源使用目录树的功能,极大的改善了资源文件的使用体验。资源中心目录化使得分项目管理资源文件成为可能而不是将租户的所有资源文件都放在一个目录下。资源中心支持授权整个目录给用户,提高了多文件授权的操作效率。使用目录树的方式进行资源文件授权,可以避免 1.2 版本一个一个寻找资源文件的耗时操作。

架构升级给DolphScheduler带来 2~3 倍性能提升

 

架构升级给DolphScheduler带来 2~3 倍性能提升

4、支持 Ambari 插件

Ambari 插件可以让 DolphinScheduler 和 Ambari 轻松集成,利用 Ambari 的能力可以使部署和管理 DolphinScheduler 更加简单,也更容易扩/缩容,

架构升级给DolphScheduler带来 2~3 倍性能提升

 

架构升级给DolphScheduler带来 2~3 倍性能提升

5、支持 K8s

1.3.x 也提供了对 K8s 的支持,后续也会推出 DolphinScheduler 的 Docker 官方镜像,更方便大家部署 DolphinScheduler,这块的详细文档请参考:[ K8s Readme ](https://github.com/apache/incubator-dolphinscheduler/blob/1.3.1-release/docker/kubernetes/dolphinscheduler/README.md)

架构升级给DolphScheduler带来 2~3 倍性能提升

6、其他一些重要的特性:

  • 批量导出和导入工作流

  • 流程定义复制

  • 删除流程实例级联删除任务日志

  • DAG 图一键格式化,非常适合通过 open API 调用的场景

  • 流程图美化

  • 简化配置,优化部署体验

  • 完善自动化 CI、CD

 

1.3.2 版本带来的新特性

新特性:

  • Worker Server 可以设置多个 worker groups

  • JVM 参数优化

  • 给流程图连线添加标签

 

值得注意的是 1.3.2 版本修复了 1.3.1 的 20 多个 bug ,其中需要关注的是

  • [#3058] The task running order in the process instance does not follow the topological order in the process definition

该 bug 是在打开任务节点,没有正常关闭窗口,然后又新建一个流程定义导致新建的流程定义的前置节点的信息丢失。这可能造成 1.3.1 版本的流程图运行错乱的问题

此外,1.3.2 也带来了 4 项功能改进和增强,具体变化请参考:

https://github.com/apache/incubator-dolphinscheduler/releases/tag/1.3

Apache DolphinScheduler 社区介绍

Apache DolphinScheduler 是一个非常多样化的社区,至今贡献者已100多名, 他们分别来自 30 多家不同的公司。 微信群用户3000人。

架构升级给DolphScheduler带来 2~3 倍性能提升

 

部分用户案例(排名部分先后)

已经有近 400 多家企业和科研机构在使用 DolphinScheduler,来处理各类调度和定时任务,另有 800 多家公司开通了海豚调度的试用:

架构升级给DolphScheduler带来 2~3 倍性能提升

 

Apache DolphinScheduler 能力

  • 以DAG图的方式将Task按照任务的依赖关系关联起来,可实时可视化监控任务的运行状态

  • 支持丰富的任务类型:Shell、MR、Spark、Flink、SQL(mysql、postgresql、hive、sparksql)、Python、Http、Sub_Process、Procedure等

  • 支持工作流定时调度、依赖调度、手动调度、手动暂停/停止/恢复,同时支持失败重试/告警、从指定节点恢复失败、Kill任务等操作

  • 支持工作流优先级、任务优先级及任务的故障转移及任务超时告警/失败

  • 支持工作流全局参数及节点自定义参数设置

  • 支持资源文件的在线上传/下载,管理等,支持在线文件创建、编辑

  • 支持任务日志在线查看及滚动、在线下载日志等

  • 实现集群HA,通过Zookeeper实现Master集群和Worker集群去中心化

  • 支持对Master/Worker cpu load,memory,cpu在线查看

  • 支持工作流运行历史树形/甘特图展示、支持任务状态统计、流程状态统计

  • 支持补数

  • 支持多租户

  • 支持国际化

加入 Apache DolphinScheduler

在使用 DolphinScheduler 的过程中,如果您有任何问题或者想法、建议,都可以通过Apache 邮件列表或者github issue参与到 DolphinScheduler 的社区建设中来。

架构升级给DolphScheduler带来 2~3 倍性能提升

 

欢迎加入贡献的队伍,加入开源社区从提交第一个 PR开始,

  - 找到带有”easy to fix”标记或者一些非常简单的issue(比如拼写错误等),先通过第一个PR熟悉提交流程,如果有任何疑问,欢迎联系

 

邮件订阅方式:

https://dolphinscheduler.apache.org/zh-cn/docs/development/subscribe.html

github:

https://github.com/apache/incubator-dolphinscheduler

官方网站

https://dolphinscheduler.apache.org/en-us/

 

欢迎下载试用,在试用过程中发现任何问题,可以通过邮件列表或 github 上新建 issue 进行反馈!

 

架构升级给DolphScheduler带来 2~3 倍性能提升

关注小晨说数据,获取更多大厂技术干货分享

回复“spark”,“flink”,中台”,机器学习”,“用户画像”获取海量学习资料~~~


你也「在看」吗?


推荐阅读
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • 本文介绍了 PHP 的基本概念、服务器与客户端的工作原理,以及 PHP 如何与数据库交互。同时,还涵盖了常见的数据库操作和安全性问题。 ... [详细]
  • Ubuntu 环境下配置 LAMP 服务器
    本文详细介绍了如何在 Ubuntu 系统上安装和配置 LAMP(Linux、Apache、MySQL 和 PHP)服务器。包括 Apache 的安装、PHP 的配置以及 MySQL 数据库的设置,确保读者能够顺利搭建完整的 Web 开发环境。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 本文详细介绍了在尝试启动MySQL服务时,如果遇到错误提示‘MySQL未运行,但锁定文件(/var/lock/subsys/mysql)存在’应如何处理,包括具体的操作步骤和可能的原因分析。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • Logging all MySQL queries into the Slow Log
    MySQLoptionallylogsslowqueriesintotheSlowQueryLog–orjustSlowLog,asfriendscallit.However,Thereareseveralreasonstologallqueries.Thislistisnotexhaustive:Belowyoucanfindthevariablestochange,astheyshouldbewritteninth ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 本文档介绍了如何使用ESP32开发板在STA模式下实现与TCP服务器的通信,包括环境搭建、代码解析及实验步骤。 ... [详细]
  • 本文详细介绍了如何使用Heartbeat构建一个高可用性的Apache集群,包括安装、配置和测试步骤。 ... [详细]
  • mybatis 详解(七)一对一、一对多、多对多
    mybatis详解(七)------一 ... [详细]
  • RocketMQ 运维监控实践指南
    本文详细介绍了如何实现 RocketMQ 的运维监控,包括监控平台的搭建、常用运维命令及其具体用法。适合对 RocketMQ 监控感兴趣的读者参考。 ... [详细]
author-avatar
sddfdffwfefe_863
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有