如何从零开始构建基于incubator-dolphinscheduler的联童科技大数据调度平台?

摘要:联童科技是一家智能化母婴童产业平台,从事母婴童行业以及互联网技术多年,拥有丰富的母婴门店运营和系统开发经验,在会员经营和商品经营方面,能够围绕会员需求,深入场景,更贴近合作伙伴和消费者,提供最优服务产品,公司致力于以技术来驱动母婴童产业的发
联童科技是一家智能化母婴童产业平台,从事母婴童行业以及互联网技术多年,拥有丰富的母婴门店运营和系统开发经验,在会员经营和商品经营方面,能够围绕会员需求,深入场景,更贴近合作伙伴和消费者,提供最优服务产品,公司致力于以技术来驱动母婴童产业的发展,公司也希望借助于大数据为客户提供更多智能数据分析和决策分析,大数据是公司重点发展的一部分,公司从成立初期起就搭建了大数据团队,有了大数据团队后,大数据调度平台的构建自然是最基础也是最重要的环节。 一、为什么选择incubator-dolphinscheduler->关注清哥聊技术公众号,了解更多技术文章 1、incubator-dolphinscheduler是一个由国内公司发起的开源项目,中国本土社区成员非常活跃,更加容易去进行社区沟通,同时联童也希望能加入到这个社区中,一起把这个由本土成员为主成立的社区做的更好。 2、incubator-dolphinscheduler 能够支撑非常多的应用场景 以DAG图的方式将Task按照任务的依赖关系关联起来,可实时可视化监控任务的运行状态 支持丰富的任务类型:Shell、MR、Spark、SQL(mysql、postgresql、hive、sparksql),Python,Sub_Process、Procedure,flink,datax,sqoop,http等 支持工作流定时调度、依赖调度、手动调度、手动暂停/停止/恢复,同时支持失败重试/告警、从指定节点恢复失败、Kill任务等操作 支持工作流优先级、任务优先级及任务的故障转移及任务超时告警/失败 支持工作流全局参数及节点自定义参数设置 支持资源文件的在线上传/下载,管理等,支持在线文件创建、编辑 支持任务日志在线查看及滚动、在线下载日志等 实现集群HA,通过Zookeeper实现Master集群和Worker集群去中心化 支持对Master/Workercpu load,memory,cpu在线查看 支持工作流运行历史树形/甘特图展示、支持任务状态统计、流程状态统计 支持补数 支持多租户 支持国际化 其中DAG图 借鉴自spark ,在dolphinscheduler 一个工作流可以对应多个工作任务,每一个工作任务对应一个DAG中的节点。 3、incubator-dolphinscheduler在保证了高并发和高可用的设计时,架构思路也相对简单,技术架构中没有引入非常多的复杂技术组件,降低了学习和维护的成本。 备注:此架构图摘自社区官方网站 incubator-dolphinscheduler在设计时,除了zookeeper外,没有引入太多复杂的技术组件。整个架构以zookeeper 作为集群管理,采用去中心化思想进行设计。 二、incubator-dolphinscheduler功能的不足 1、无法支持串行调度策略 incubator-dolphinscheduler 在一开始设计时,只支持并行调度,不支持串行调度,而在联童中,大部分场景都是需要串行运行的,也就是每一个工作流任务都只能有一个实例在运行,同一个工作流任务中必须要等前一个实例执行结束,下一个实例才能开始执行,这种场景大多出现在准实时任务中。 2、任务依赖不够强大,只能支持被动等待依赖执行成功,无法主动触发下游工作流实例运行 如下图所示,只能支持在创建任务时,被动去等待依赖执行成功,无法在当前任务执行成功后,主动去触发别的工作流任务执行。 3、部分模块中用户体验不足,并且在数据量大时,部分模块数据查询性能较慢 4、缺少比较完备的监控体系 在incubator-dolphinscheduler 只提供了一些简单的监控,当有多大几千个任务在运行时,很难做到完备监控,更是缺少对每一个任务运行的性能分析。 5、缺少任务被依赖查看 比如一个工作流或者工作流中的一个节点被哪些任务依赖了,被多少任务依赖了,完全没有办法查看。 三、我们对于incubator-dolphinscheduler的功能升级开发 1、增加串行调度的支持 如下图所示,我们在原有并行执行的基础上,增加了串行执行方式。 在串行执行时,我们还增加了串行执行的队列功能,每一任务都可以指定队列的长度大小。 2、增加主动触发下游工作流实例运行 如下图所示,我们在原有并行执行的基础上,增加主动触发下游一个或者多个工作流实例运行。 运行后效果如下: 3、一些较大的Bug修复 联童在使用incubator-dolphinscheduler时,同样也踩过不少的坑,这里我们举其中一个例子,比如在内部使用时,同事反馈最多的问题就是调度任务的日志刷新不及时,有时候很久才能刷新出日志。
阅读全文