

用户案例 | 蜀海供应链
作者简介

杜全,蜀海供应链大数据工程师,参与蜀海大数据平台和数据中台建设。
业务背景介绍


领导驾驶舱:提供给高层领导查看的数据准实时分析,T+1经营分析、产品毛利类、市场价格等报表 财务:各类日报、月报、年度报表;对账、毛利报表、指标表等 客户销售:客户采销类实时报表、日报、月报各个维度的数据分析及查询销售明细数据 供应商类:采购分析、询价报表、供应商等级、供应商工作台、供应商对账分析,采购策略优化等 仓储:库存周转、库位、实时库存等各种维度数据指标及报表需求 物流运输类:准点率、温控、运输成本,调度等分析 数据分析师:快速响应各种数据分析需求,及高层领导各种临时数据需求,数据挖掘及各种实时交互式分析 各业务运营/策略/负责人:主要查看各自业务运营的整体情况,查询数据中台的各该业务各种维度实时聚合数据 以及一些其他业务的数据报表及分析需求。
集成升级经验

在数据中台建设过程中,好的大数据调度组件往往能达到事半功倍的作用,我们团队也深知这一点,因此选择了海豚调度作为蜀海供应链数据中台的调度系统,并经过从v1.3.6的耦合集成部署改造到v3.1.8解耦集成部署的改造的阶段,在这个过程中也遇到了各种各样的问题并及时提供了解决方案,现就这些做一下分享,希望可以帮助到各位小伙伴。
海豚调度旧版本集成
前端UI改造

后端API接口服务改造

getLoginUser()方法


③ 改造点3:返回数据及分页数据方法改造


getId()、
getName()及
process()方法




dolphinscheduler-daemon.sh

dolphinscheduler-alert-1.3.6.jar和
dolphinscheduler-dao-1.3.6.jar 因此打包这两个包即可。另外,安装路径下增加alertlib文件夹并在dolphinscheduler-daemon.sh中增加alter-server加载逻辑。


工作流定义表 process_definition_json
字段大JSON 任务和工作流耦合度高,解析json,非常耗费性能,且任务没法重用;否则会导致数据大量冗余,性能差,资源消耗严重升级困难,1.3.6集成到数据中台系统中,相当于二次开发了API服务,集成了中台用户体系走统一路由网关,前端UI组件每一次升级,海豚调度就会出现各种前端样式问题(SUB_PROCESS 子工作流 进入不到该子节点下)、菜单显示不全、日志全屏看不全、项目主页上下滑动不了等等一系列UI交互问题 任务间自定义参数上下不能依赖传参 工作流实例任务交叉没有任务执行策略 ,默认是并行处理的,不保证单例模式,比如调度频率高时 前一个工作流实例还未执行完,后一个又开始,造成数据错乱、不准确 自带数据质量从3.0.0开始 支持多种告警插件类型和告警组及实例管理(不限于钉钉),从3.0.0开始 前端UI大调整、优化
海豚调度新版本升级
海豚调度集成中台项目整体架构

海豚调度集成中台调用流程

数据模型及设计细节

下载目标升级安装包(需要滚动升级的源码包和二进制包下载)

Dolphin Scheduler元数据备份(获取生产旧版本SQL脚本)
修改升级版本的配置文件


conf/datasource.properties文件并将数据库驱动包放在lib目录下即可;而配置基础部署文件需要修改
conf/common.properties、
conf/config/install_config.conf、
conf/env/dolphinscheduler_env.sh。
bin/env/dolphinscheduler_env.sh并将数据库驱动包放在
tools/libs目录下即可;而配置基础部署文件则需要修改
bin/env/install_env.sh、alert/master/worker/api-server/conf下的
common.properties、
application.yaml。
更新数据库、执行数据库升级脚本
update-schema.sh拆分大JSON并且在执行过程中会出现很多问题,除非你们公司的旧版本的工作流定义ID未经过删减一直保持自增并且不间断,因为官方对于工作流定义中tasks的拆分逻辑是自增的,找不到就会报错,因此需要修改v2.0.0源码兼容。
安装部署、启用最新版本的服务
bin/install.sh后,应该在3.1.x版本后都会遇到, 在
install.sh的第四步<即:4.delete zk node>中会出现如下报错:

worker-server/master-server/api-server的libs下
commons-cli-1.2.jar源包中也确实没有DefaultParser类,是因为1.2的版本过低。
common-cli包分别放到各服务对应的libs下,再次安装部署就没问题了,
https://mvnrepository.com/artifact/commons-cli/commons-cli/1.4,效果如下:

ERROR org.apache.zookeeper.util.ServiceUtils - Exiting JVM with code 0,虽然看着不舒服,但请忽略这个是Zookeeper正常执行完命令的退出码,0表示程序正常终止,如果仍存在疑惑可以打开一个Zookeeper客户端
(bin/zkCli.sh)Ctrl+D试一下退出。

初始化数据、验证新版本功能
OutOfMemoryError:Java heap space (v1.3.6->v2.0.0)

process_definition_json字段,而我们的工作流定义数为6463个(随着业务量还在增长中),拆分需要大量耗费内存,Java堆空间不足,导致无法分配更多的内存,这个需要根据服务器配置适当调大-Xmx参数,这里我调整到了-Xmx4g,然后升级就没问题了。


json split error && NullPointException:null (v1.3.6->v2.0.0)




Data too long for column 'task_params' (v1.3.6->v2.0.0)

dolphinscheduler_ddl.sql中
t_ds_task_definition_log 的task_params字段长度
text->longtext以及t_ds_task_instance的
task_params字段长度
text->longtext,text已经满足不了任务参数的存储大小要求了,如下图所示:


Duplicate column name 'alter_type' (v2.0.9->v3.0.0)

class path resource [sql/upgrade/2.0.0_schema/mysql/dolphinscheduler_dml.sql] cannot be opened because it does not exist (v2.0.0->v3.1.7 这个是前提调研尝试的)

Unknown column 'other_params_json' in 't_ds_worker_group' (v3.0.0->v3.1.0)

dolphinscheduler_ddl.sql,t_ds_worker_group表增加
other_params_json字段,
t_ds_process_instance表增加
state_history字段,如下图所示:

Unknown column 'description' in 't_ds_worker_group' (v3.1.0->v3.1.8)

3.1.1_schema下),需要调整
dolphinscheduler_ddl.sql,
t_ds_worker_group表增加
description字段,如下图所示:

不向前兼容性的更新





技术创新之数据表血缘

Insert...Select这种语法,以输入表(Select语句)、输出表(Insert语句)作为流转过程构建数据血缘DAG流图来赋能我们的业务,相当于为数据中台插了一双眼,真正做到数据表流转过程的可视化,这些都是以海豚调度作为核心点展开的。
数据血缘解析及全量查询

解析流程及展示


解析SQL的核心代码
insert...select语句解析,多个用分号;分割。







用户收益

海豚调度支撑公司数据中台每日累计近7000的工作流定义任务个数,78个项目基本涵盖数据中台的所有业务模块; 基于工作流和任务定义构建的表级上下游血缘解析及查询,真正做到了表血缘关系的统一化检索和可视化管理,极大提升了数据中台开发人员和数据分析师的日常检索表的效率; 提供了设置任务执行策略模式,在同一工作流实例下任务交叉执行时,保证了数据的准确性;解决了任务间自定义参数上下游依赖传参问题; 后续迭代升级可以做到快速高效地响应数据中台生产需求。
总结与致谢

用户简介

参与贡献
随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真诚欢迎热爱开源的伙伴加入到开源社区中来,为中国开源崛起献上一份自己的力量,让本土开源走向全球。

参与 DolphinScheduler 社区有非常多的参与贡献的方式,包括:

贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。
社区汇总了以下适合新手的问题列表:https://github.com/apache/dolphinscheduler/issues/5689
非新手问题列表:https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22
如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/community/development/contribute.html
来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的。
参与开源可以近距离与各路高手切磋,迅速提升自己的技能,如果您想参与贡献,我们有个贡献者种子孵化群,可以添加社区小助手微信(Leonard-ds) ,手把手教会您( 贡献者不分水平高低,有问必答,关键是有一颗愿意贡献的心 )。

添加社区小助手微信(Leonard-ds,好友申请注明“入交流群+姓名+公司+职位信+是否是用户”,群里是实名制,仅用于验证身份)
如果想参与贡献,添加小助手微信时请说明想参与贡献。
来吧,开源社区非常期待您的参与。
☞Apache DolphinScheduler 支持使用 OceanBase 作为元数据库啦!






