热门标签 | 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”,中台”,机器学习”,“用户画像”获取海量学习资料~~~


你也「在看」吗?


推荐阅读
  • dubbo学习 一 dubbo概述
    1,背景1,网站刚开时候的时候可能所有的功能业务都在一个应用里面2,当业务不断复杂,流量不断增多的时候,就需要将原先的一个应用划分成多个独立的应用。3,当分出来的业务越来越多的时候 ... [详细]
  • 阿里首席架构师科普RPC框架
    RPC概念及分类RPC全称为RemoteProcedureCall,翻译过来为“远程过程调用”。目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程 ... [详细]
  • go语言能做什么?很多朋友可能知道Go语言的优势在哪,却不知道Go语言适合用于哪些地方。1、Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、 ... [详细]
  • SpringCloud之eureka注册中心入门
    eureka注册中心一、基本概念SpringCloud封装了Netflix公司的eureka作为自己微服务的注册中心。这个注册中心和dubbo中的zookeeper很相似,简单来说 ... [详细]
  • 在这分布式系统架构盛行的时代,很多互联网大佬公司开源出自己的分布式RPC系统框架,例如:阿里的dubbo,谷歌的gRPC,apache的Thrift。而在我们公司一直都在推荐使用d ... [详细]
  • 开发笔记:小傅哥,一个有“副业”的码农!
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了小傅哥,一个有“副业”的码农!相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 我们在之前的文章中已经初步介绍了Cloudera。hadoop基础----hadoop实战(零)-----hadoop的平台版本选择从版本选择这篇文章中我们了解到除了hadoop官方版本外很多 ... [详细]
  • python zookeeeper 学习和操作
    1.zookeeeper介绍ZooKeeper是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的 ... [详细]
  • Java开发实战讲解!字节跳动三场技术面+HR面
    二、回顾整理阿里面试题基本就这样了,还有一些零星的问题想不起来了,答案也整理出来了。自我介绍JVM如何加载一个类的过程,双亲委派模型中有 ... [详细]
  • 本文_大数据之非常详细Sqoop安装和基本操作
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了大数据之非常详细Sqoop安装和基本操作相关的知识,希望对你有一定的参考价值。大数据大数据之 ... [详细]
  • 分库分表  ShardingJDBC (详解 1/6)
    狂创客圈经典图书:《NettyZookeeperRedis高并发实战》面试必备+面试必备+面试必备【博客园总入口】疯狂创客圈经典图书:《SpringCloud、Nginx高并发核心 ... [详细]
  • 马蜂窝数据总监分享:从数仓到数据中台,大数据演进技术选型最优解
    大家好,今天分享的议题主要包括几大内容:带大家回顾一下大数据在国内的发展,从传统数仓到当前数据中台的演进过程;我个人认为数 ... [详细]
  • mapreduce之后我们想把文件保存下来,变成csv的格式,我们就在store保存语句后面加上USINGPigStorage(‘,’),发现一个问题就是在每一行最末端也自动加了逗 ... [详细]
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社区 版权所有