作者zixi0825
今天给大家带来的分享是 Apache DolphinScheduler 源码剖析之 Worker 容错处理流程
Worker容错流程是这样的:
1. 当 ZooKeeper 监听到有 Worker 节点挂了,就会去通知 Master 进行容错
2. 收到通知的 Master 会通过分布式锁去“抢”到容错的操作,拿到锁的 Master 开始进行容错处理。
3. 容错的流程如下:
3.1 通过已下线的 Worker 的地址和表示[正在运行]的状态数组获取需要容错的TaskInstance 列表。
3.2 遍历列表对每个 TaskInstance 进行处理:
3.2.1 判断这个 TaskInstance 是否需要容错,因为 Worker 宕机以后有可能被 Monitor 重启动成功,那么 Master 会继续给它分配任务,所以只有老 Worker 上正在运行的 TaskInstance 需要容错,【3.1】里面拿到的需要容错的TaskInstance 列表可能会存在新 Worker 所执行的任务
3.2.2 检查 Task 是否存在 YarnApplicationId,如果存在的话就把 Yarn 任务Kill 掉
3.2.3 将 TaskInstance 的状态更新为 NEED_FAULT_TOLERANCE,更新到数据库里面
Master的任务调度处理如下:
在 MasterExecThread 这个线程里面如果检测到任务的状态为 NEED_FAULT_TOLERANCE,会进行 Alert,同时会将任务放到 readyToSubmitTaskList,重新分发给 Worker 去运行
以上就是我对 DolphinScheduler 的 Worker 容错处理的分析,欢迎大家指正
预告
为了更好的可扩展性和性能,DolphinScheduler 的重构讨论将于本周五晚19:00 开始,欢迎感兴趣的伙伴参与
您知道么?
参与 DolphinScheduler 社区有非常多的参与贡献的方式,包括文档、翻译、答疑、测试、代码、会议分享等,此外也极其欢迎各种实践文章,DolphinScheduler开源社区非常期待您的参与。
贡献第一个PR(文档、代码) 我们也希望是简单的,试想如果是一个新人一上来就贡献1个改了几十个文件的 PR 将会对参与 review 的伙伴的心理造成多大的摧残,
文档github地址:https://github.com/apache/incubator-dolphinscheduler-website
当然如果您酷爱coding,社区也是非常欢迎“show me the code"的。