大数据平台迁移实践 | Apache DolphinScheduler 在当贝大数据环境中的应用
大家下午好,我是来自当贝网络科技大数据平台的基础开发工程师 王昱翔,感谢社区的邀请来参与这次分享,关于 Apache DolphinScheduler 在当贝网络科技大数据环境中的应用。
本次演讲主要包含四个部分:
平台建设的背景
大数据平台重构
大数据调度平台建设
下一步规划
王昱翔
当贝大数据平台基础开发工程师
毕业于电子科技大学,主要是做大数据平台的构建、集成及组件的运维的工作。
01 背景
在当贝网络科技使用 Apache DolphinScheduler 作为大数据调度平台之前,我们在平台、测试环境和调度环境中都面临着不少问题需要解决。
02 大数据平台架构
这次我将从架构重构的目标、ClickHouse 迁移、大数据平台成功迁移、计算分离,以及大数据平台监控架构设计等几个方面给大家进行分享。
平台重构目标
- 打造一个高效稳定的大数据平台,这是平台的首要目标;
- 实现数据的海量存储;
- 实现平台的安全高可用架构;
- 实现计存分离;
- 环境可视化操作;
- 监控即时告警。
- 大数据平台重构架构设计
我们对大数据平台进行了重构设计。
最下面是基础环境,中间是数据源,再向上是数据的预处理,即CDC,数据导图工具。以及数据存储。平台基于 HDFS、OSS、 ClickHouse、ES、Kafka 和 Hudi 进行存储,向上是数据处理的计引擎,再向上是任务调度权限管控,接口管理等基础服务管理,架构的最上层是在此之上进行的公司业务处理。
大数据平台需求分析
此前,公司的大数据平台存在一些问题。从平台环境来说,主要存在的问题包括版本较低,服务部署混乱,计算引擎 MR速度比较慢,存储不足,而且扩容较难,服务缺乏高可用的架构,服务挂掉之后数据缺失;缺少可视化的操作,需要后台操作;还缺乏报警机制,任务挂掉之后没有通知;运维起来也很困难,需要人肉运维。
在测试环境上,缺少测试环境,本地开发完后直接提交代码上生产,没有经过测验证,导致晚上任务异常报错。
调度环境上,我们原来使用的是 Ooize调度,其系统配置比较复杂,可视化效果较差,没有补数,不支持权限管理,不支持多租户,还容易出现死锁。另外,运维监控能力不足,可视化效果差,无法在线查看日志,故障排除进入后台排错,流程复杂。
大数据平台问题调研分析
经过调研分析,我们找到了大数据平台的主要问题在于几个方面:OS 版本低,组件部署混乱,多系统数据磁盘共用,磁盘空间不足也是一大问题,导致每天晚上零点之前需要把昨天的数据删掉,来保证有 T+1 数据的存储空间。
大数据平台问题及解决方案
针对大数据平台混合部署的问题,我们历时一个半月的时间迁移了 ClickHouse。
关于版本过低的问题,我们把 CDH 从 5.7 升级到 6.3.0(Hadoop 3.0)重构了一套集群。
MR 计算引擎计算时间较长,我们将计算引擎从 MR 切换带 Spark,主要是跑hive-sql,代码改造较少。
针对存储不足的问题,我们采用了计存分离的方案,使用 yarn+oss,并用 jindoFS 作为中间加速层。
原来的 Ooize 调度无法满足我们现有的业务调度的需求,于是我们就改用 Apache DolphinScheduler 进行调度。后者的好处包括是支持多数据源,支持容错告警,以及相当有用的多租户功能。
针对无监控告警这一点,我们采用 Prometheus+Grafana,以及 Python脚本去做监控,分为组件级别、任务级别、服务器状态级别,以及调度报错。
最后,我们使用 HA (Namenode、ResourceManager) 管理单节点,进行故障转移。
ClickHouse 迁移方案
在迁移 ClickHouse 时,我们多种备选方案,分别是直接停机进行 copy,使用 Remote 表函数,使用 Clickhouse copier,以及 更简单的 copy 数据目录的方法。
但是从操作复杂度、全量同步、增量同步、性能等多方面考虑,我们选用了第二种方案。此方案支持全量同步和增量同步,潜意识图,性能也较好,但局限性在于不太适合达标,需要相同的拓扑结构。
ClickHouse 迁移方案&迁移过程
迁移执行过程:
一、找出原来建表语句
select database,create_table_query from system.tables where database in('athena','dmp','sony');
二、在新的clickhouse创建databases和table
创建数据库
create database dmp ON CLUSTER cluster_clickhouse; 创建表:导出后搞成自动化脚本去执行
三、数据迁移语句(可以用python写成脚本的方式去执行,可以线下交流)
insert into dmp.dws_dmp_user_local ON CLUSTER cluster_clickhouse SELECT * FROM remote('192.168.1.1:9000', dmp, dws_dmp_user, 'default', '');
四、数据迁移前的注意事项
1.cluster_5shards_1replicas-->cluster_clickhouse
2.表名后面添加 ON CLUSTER cluster_clickhouse
大数据平台迁移升级方案
在迁移 ClickHouse 为平台提供了足够空间后,我们设计了平台的迁移和升级方案。有两种备选方案:
方案一、原地升级
这种方案是卸载旧的 CDH,保留原来数据,安装新版 CDH 并升级。其优点是不需要任何额外硬件资源,但缺点是停机时间较长,需要多种验证。
方案二 、重构升级
第二种方案是安装新的 CDH 集群,将现有数据拷贝到新集群,切换为生产集群。其优点是没有数据丢失的风险,停机时间较短,缺点是需要额外的硬件资源,需要迁移数据,以及 整体升级周期较长。
由平台建议,一个实施流程基本上分为三个阶段:一个是预备期,第二个是并行期,第三个是运行期。预备期是在测试搭建一道测试环境,然后进行方案验证,验证通过后在新建一套生产集群。并行期的两个集群,老集群数据和服务的迁移到新的集群上,然后对数据和服务进行验证。就是迁移的时候要考虑到两个集群增量的数据的持平这一块。运行期新老集群割接.因方案一停机时间较长、原地升级失败后回滚风险较大,有丢失数据的风险,所以我们选择了方案二。
任务迁移流程
平台迁移流程主要包括对历史任务、Schema、批量脚本和外部应用的数据迁移。
平台迁移任务主要分为评估、测试/改在、迁移/并行、优化/割接四个阶段。
实施流程
经过搭建新集群,数据迁移,旧集群下线和新集群切换,新集群正式运行。
此外,为了进行大数据平台构建和迁移,我们还进行了数据一致性校验,Hive 元数据迁移等一系列工作。
计存分离架构
并采用计存分离的存储架构,实现数据更高效的存储。
集成 jindoFS
我们还将阿里的 jindoFS 和 CDH 集成,实现了高效的数据分析、数据加速和数据存储。
计存分离数据效果图
监控平台设计
我们设计的大数据监控主要包括两部分,一是平台资源监控,一个是任务运行状态监控。
钉钉告警
监控 BI 展示
03 调度系统迁移
调度系统调研
在调度系统上,我们原来采用的是 Oozie,但是在使用过程中发现其缺点不可忽视,比如可视化的界面差;缺乏补数、重试功能;严重依赖当前集群版本,二开难度大;配置复杂、调度任务时出现死锁;不支持租户、权限,管控能力差。
于是我们进行了调度系统重新选型。在调研过程中,我们对比了主流的调度系统工具,并决定采用 Apache DolphinScheduler。
为什么选择 Apache DolphinScheduler ?
经过对比,我们发现 Apache DolphinScheduler 的以下特性非常符合我们的业务需求:
通过拖拽任务绘制工作流DAG
任务支持动态暂停/停止/恢复操作
支持失败重试/告警、容错、补数等操作
支持全局参数及节点自定义参数设置
支持集群HA,集群去中心化
支持运行历史树形/甘特图展示
丰富的任务类型支持
调度系统支撑的业务架构
我们使用 ApahceDolphinScheduler 的 1.3.8 版本,2 个 Master节点和 7 个Worker 节点,1个 API 节点,日调度流程 200+,日调度任务 5000+,服务 20+ 业务线,处理 T+1 任务场景,组件主要使用到了 Shell、Spark、Hive、Sqoop、Datax、SeaTunnel(原Waterdrop) 和 MR。
01 迁移方案&流程
迁移方案上,我们采用边运行边迁移,循形渐进的方式,由易到难,按业务分批迁移,验证通过后老系统任务下线。
迁移效果
通过迁移前后对比,我们可以看到系统管理更加便捷,系统更稳定,开发也更高效了。
我们选择使用 Shell节点作为项目代码的一部分,可以在 Git 上直接维护,将代码下载到服务器上使用。
02 调度系统监控
我们还自己开发了调度监控系统,特点是包含任务实例和任务类型,以及任务开始时间和结束时间,并对任务和 ID 进行关联,可以看到报错的语句。
03 调度系统存在的问题
因为我们使用的是原生的 1.3.8 版本,没有进行二开,但是任务多了以后发现存在以下问题:
- 分布式锁
- Master调度工作流时依赖分布式锁,导致调度工作流吞吐量难以提升,极端情况下调度可能出现高延迟;
- Master资源利用率低
- Master创建大量线程池,导致线程上下文切换频繁,大量线程处于轮询数据库状态,线程利用率低;
- 数据库压力大
- Master通过轮询数据库来查询任务状态,任务数多的时候导致数据库压力大;
- 各组件存在耦合情况
注册中心耦合Zookeeper
Worker耦合任务,需要打入许多依赖jar包
04 下一步计划
升级到2.0架构 ,解决1.3架构存在的问题;
定制开发与公司的多个平台集成;
实现跨集群任务调用,测试和生产环境共用一套任务调度;
完善监控告警。
05 拥抱开源
后续,我们还计划参与到更多 Apache 开源项目中。
01 为什么参与开源?
- 提升技术功底:学习源码里的优秀设计思想,比如疑难问题的解决思路,一些优秀的设计模式,整体提升自己的技术功底;
- 深度掌握技术框架:源码看多了,对于一个新技术或框架的掌握速度会有大幅提升 ;
- 快速定位线上问题:遇到线上问题,特别是框架源码里的问题(比如bug),能够快速定位;
- 拥抱开源社区:参与到开源项目的研发,结识更多大牛,积累更多优质人脉看源码。
02 参与开源的方法
- 先使用:先看官方文档快速掌握框架的基本使用;
- 抓主线:找一个demo入手,顺藤摸瓜快速看一遍框架的主线源码,画出源码主流程图,切勿一开始就陷入源码的细枝末节,否则会把自己绕晕,凭经验猜;
- 画图做笔记:总结框架的一些核心功能点,从这些功能点入手深入到源码的细节,边看源码边画源码走向图,并对关键源码的理解做笔记,把源码里的闪光点都记录下来,后续借鉴到工作项目中,理解能力强的可以直接看静态源码,也可以边看源码边debug源码执行过程,观察一些关键变量的值;
- 整合总结:所有功能点的源码都分析完后,回到主流程图再梳理一遍,争取把自己画的所有图都在脑袋里做一个整合。
这就是我分享的全部内容,感谢聆听!
大数据平台迁移实践 | Apache DolphinScheduler 在当贝大数据环境中的应用的更多相关文章
- 海豚调度5月Meetup:6个月重构大数据平台,帮你避开调度升级改造/集群迁移踩过的坑
当今许多企业都有着技术架构的DataOps程度不够.二次开发成本高.迁移成本高.集群部署混乱等情况,团队在技术选型之后发现并不适合自己的需求,但是迁移成本和难度又比较大,甚至前团队还留下了不少坑,企业 ...
- 携程实时大数据平台演进:1/3 Storm应用已迁到JStorm
携程大数据平台负责人张翼分享携程的实时大数据平台的迭代,按照时间线介绍采用的技术以及踩过的坑.携程最初基于稳定和成熟度选择了Storm+Kafka,解决了数据共享.资源控制.监控告警.依赖管理等问题之 ...
- hadoop大数据平台安全基础知识入门
概述 以 Hortonworks Data Platform (HDP) 平台为例 ,hadoop大数据平台的安全机制包括以下两个方面: 身份认证 即核实一个使用者的真实身份,一个使用者来使用大数据引 ...
- Kafka 集群在马蜂窝大数据平台的优化与应用扩展
马蜂窝技术原创文章,更多干货请订阅公众号:mfwtech Kafka 是当下热门的消息队列中间件,它可以实时地处理海量数据,具备高吞吐.低延时等特性及可靠的消息异步传递机制,可以很好地解决不同系统间数 ...
- 从 Hadoop 到云原生, 大数据平台如何做存算分离
Hadoop 的诞生改变了企业对数据的存储.处理和分析的过程,加速了大数据的发展,受到广泛的应用,给整个行业带来了变革意义的改变:随着云计算时代的到来, 存算分离的架构受到青睐,企业开开始对 Hado ...
- 基于Hadoop的大数据平台实施记——整体架构设计[转]
http://blog.csdn.net/jacktan/article/details/9200979 大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底 ...
- 基于Hadoop的大数据平台实施记——整体架构设计
大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底是否适用于您的组织,至少在互联网上已经被吹嘘成无所不能的超级战舰.好像一夜之间我们就从互联网时代跳跃进了大 ...
- 知名大厂如何搭建大数据平台&架构
今天我们来看一下淘宝.美团和滴滴的大数据平台,一方面进一步学习大厂大数据平台的架构,另一方面也学习大厂的工程师如何画架构图.通过大厂的这些架构图,你就会发现,不但这些知名大厂的大数据平台设计方案大同小 ...
- 从 Airflow 到 Apache DolphinScheduler,有赞大数据开发平台的调度系统演进
点击上方 蓝字关注我们 作者 | 宋哲琦 ✎ 编 者 按 在不久前的 Apache DolphinScheduler Meetup 2021 上,有赞大数据开发平台负责人 宋哲琦 带来了平台调度系统 ...
随机推荐
- 个人冲刺(四阶段)——体温上报app(一阶段)
任务:完成了后台数据库的类模块 MyDBHelper.java package com.example.helloworld; import android.content.Context; impo ...
- springboot如何使用自定义配置文件
从前边<springboot竟然有5种默认的加载路径,你未必都知道>我们知道,springboot会默认加载application.properties/application.yml ...
- select into 与 insert into 的区别
1.select * into table_A from table_B table_A是个新创建表,table_B是个已经存在的表. 2.insert into table_A from tabl ...
- Docker权限 “Got permission denied while trying to connect to the Docker daemon socket at unix:///var/”
问题及解决办法 在普通用户下执行docker命令需要用sudo,没加sudo出现了下图所示的提示: 从上图看出,权限不足连接/var/run/docker.sock,我们看下这个文件: 可以看出,这个 ...
- fiddler的安装以及使用同时对Android 与IOS 抓包配置进行分析 进阶 一
由于工作方向的原因,很久没有用过APP抓包工具了,有那么一天遇到了bug需要协助开发工程师进行定位分析,然后又重新梳理了一下之前常用的抓包工具,这里重点介绍一下目前市面上最流行的几款抓包工具,根据自己 ...
- CabloyJS实现了一款基于X6的工作流可视化编辑器
介绍 文档演示:CMS审批工作流演示了如何通过JSON来直接创建一个工作流定义,通常用于为具体的业务数据生成预定义或内置审批工作流的场景 CabloyJS 4.8.0采用X6 图编辑引擎实现了一款工作 ...
- 基于原生JS实现的Bean容器和AOP编程
Bean是什么 我们知道Bean是Spring最基础的核心构件,大多数逻辑代码都通过Bean进行管理.NestJS基于TypeScript和依赖注入也实现了类似于Spring Bean的机制:服务提供 ...
- 浅谈倍增法求解LCA
Luogu P3379 最近公共祖先 原题展现 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入格式 第一行包含三个正整数 \(N,M,S\),分别表示树的结点个数.询问 ...
- 皓远的第一次博客作业(pta题目集——1-3)
题目集总结: 前言: 一. 知识点运用: ① Java入门的基础语法(循环,判断,字符串,数组等等),Java的基础类运用,类与对象关系调用,类间关系(聚合). ② 引(类与对象): 对象 ...
- 2 Elment Ui 日期选择器 格式化问题
Elment Ui 日期选择器 格式化问题 在前后端联调过程中 我们常常会遇到日期无法被反序列化 这个问题 会有点头疼 下面以我这边为例 后端使用的是springboot 默认集成了jackjson ...