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


你也「在看」吗?


推荐阅读
  • 在这分布式系统架构盛行的时代,很多互联网大佬公司开源出自己的分布式RPC系统框架,例如:阿里的dubbo,谷歌的gRPC,apache的Thrift。而在我们公司一直都在推荐使用d ... [详细]
  • 从接触DataX起就有一个疑问,它和Sqoop到底有什么区别,昨天部署好了DataX和Sqoop,就可以对两者进行更深入的了解了。两者从原理上看有点相似,都是解决异构环境的数据交换 ... [详细]
  • 经过多年的发展,Hadoop生态系统不断完善和成熟,目前已经包括了多个子项目,除了核心的HDFS和MapReduce以外,Hadoop生态系统还包括要ZoopKer、HBase、H ... [详细]
  • Ambari实战1:Ambari使用场景及介绍
    本篇文章主要讲解Ambari的一些基础知识,让大家对Ambari有一个潜意识的认识。什么是Ambari?ApacheAmbari是一种基于We ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • Netty(三)
    开发十年,就只剩下这套架构体系了!>>>  熟悉TCP编程的读者可能都会知道,无论是服务端 ... [详细]
  • 数据仓库中基本概念
    一、数据仓库数据仓库(DataWarehouse)是一个面向主题的、集成的、稳定的且随时间变化的数据集合,用于支持管理人员的决策面向主题主题就是类型的意思。传统数 ... [详细]
  • 前言本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出, ... [详细]
  • MySQL数据 实时同步到KafkaBinlog canal、Maxwell、Kafka Connect 实现MySQL增量同步
    一、需求分析早期业务借助Sqoop将Mysql中的数据同步到Hive、hdfs来进行数据分析,使用过程中也带来了一些问题:虽然Sqoop支持增量同步但还属于粗粒度的离线同步,无法满 ... [详细]
  • 数据仓库分层设计(基于Hive)
    1、数据仓库逻辑分层架构先来看数据仓库的逻辑分层架构:分层名称可能不一样,但基本是都是这样想要看懂数据仓库的逻辑分层架构,先要弄懂以下概念 ... [详细]
  • 大数据技术原理与应用:大数据处理架构Hadoop生态圈
    Hadoop生态圈概述Hadoop简介什么是Apachehadoop?ApacheHadoop项目是以可靠、可扩展和分布式计算为目的而发展而来的开源软件ApacheHadoop软件 ... [详细]
  • hadoop2.2.0 分布式存储hdfs完全分布式搭建及功能测试记录(一)架构及原理介绍...
    0.文档说明:本文是围绕hadoop2.2的分布式文件系统hdfs进行分布式存储功能测试,形成的hdfs分布式存储功能测试报告,其中主要包 ... [详细]
  • Hadoop之Hive架构与设计
    Hadoop之Hive架构与设计Hadoop是一个能够对大量数据进行分布式处理的软件框架。具有可靠、高效、可伸缩的特点。HDFS:全称为Hadoop分布式文件系统& ... [详细]
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社区 版权所有