DolphinScheduler笔记之8: 状态
在工作流的生命周期里,初步介绍过工作流的各种状态。
1. 状态机
如果我们自行实现一个任务调度系统,首要是梳理清楚任务状态。以 Flink 任务流程为例:
提交:任务提交后,资源调度需要分配资源、初始化Container、启动JobManager、TaskManager等。因此任务首先是从初始化到提交中,再从提交成功到运行,当然任务也有可能因为各种原因导致提交失败。
运行:运行中的任务,可能会成功,可能会失败,对流式任务,也有可能一直是运行。
停止:任务在任何一个状态,都可能会收到停止的事件,同理会先变成停止中,再变成已停止,如果停止失败,那回到原来的状态。
这个流程包含三部分:
状态:初始化、提交中、运行、成功、失败、已停止,都是任务的状态
事件...
DolphinScheduler笔记之7: 网络模型
DolphinScheduler 使用 Netty 作为网络框架,实现 Master Worker 模块间的 RPC 通信。这篇笔记介绍 DolphinScheduler 基础的网络模型,以及是如何使用 Netty 的。
1. Netty 简介
Netty 是 java 一款高性能的通信框架,使用上跟 C++ RPC 库很像,不像 akka 过于抽象和简洁。
Netty-Server 需要定义两个 NioEventLoopGroup 的线程组,一组用于接受 Client 的连接,一组用于 socket 的网络读写。通过 ServerBootStrap 辅助类,注册 handle 处理链,监听指定端口。
Netty-Client 需要定义一个 NioEventLoopGroup ...
DolphinScheduler笔记之6: 依赖任务DependentTaskProcessor
1. 为什么要有任务依赖?
大数据的离线场景中,任务每次执行更新一个新的 Hive 分区,分区基本都是时间相关的,比如天、小时分区。
写入 ODS 表新分区的任务执行完成后,接着执行写入 DWD 表新分区的任务,因此任务之间是有严格的依赖关系的。因为 ODS 是 DWD 的输入,如果任务启动时间过早,DWD 任务就会读不到或者读到一个空分区导致任务失败/数据错误。
所以任务依赖是任务调度系统中非常重要的一环。
扩展任务类型,诸如 ShellTask、FlinkTask、SQLTask 等好比是兵器,多多益善,但是可以按需添加,积少成多。任务依赖、调度及时性则是基本功,一旦依赖计算不准确、调度不及时,就等于自废武功了。
2. 触发/轮询/Crontab
我们是否可以只基于任务...
DolphinScheduler笔记之5: 普通任务CommonTaskProcessor
接上一篇笔记,这里总计下普通任务在 master 的处理过程。
DolphinScheduler 里的任务类型,按照逻辑可以分为两种:
普通任务:具体执行的任务,例如 Shell、SQL、Flink 等,相当于编程语言里的函数、计算
条件分支:用于判断下一个任务是否执行,例如 Dependent、Conditions、Switch 等,相当于编程语言里的 while/for/if
对于普通任务,master 打包发送到 worker 执行;对于逻辑分支,master 交给自身执行。
显然这两种类型的任务处理过程是不同的:前者分发到 worker,需要考虑负载均衡、字段协议、网络延迟等;后者在 master 执行,需要考虑线程隔离、CPU占用。
同时两者又都有相同点:...
意识并且利用自己的专注力-读《为什么精英都是时间控》
与其他时间管理的书不同的是,作者是一名神经科医生,对列举的时间管理方法会有一些激素上的介绍,比如脑源性神经营养因子、多巴胺、血清素等。
以下是我读完这本书之后的一点想法:
一天之计在于晨,早上是专注力最高的时间,应当用来做一些专注性工作,比如创作、阅读、方案制定等;作者身边的很多日本人都是早上先喝茶看报纸、看电子邮件等,我意识到自己早上到了公司也是先会看看帖子、新闻,需要改正。
作者身边的很多美国人认为5点之后应当是和家人度过的美好时光,晚上和家人共进晚餐,所以工作时间里要拼命工作,好在5点之前把工作完成,这是美国人习以为常的工作方式。
杂念是专注力的天敌,解决办法就是把杂念记下来,这样头脑中再闪现出相关杂念的时候,只要看一眼自己写的“工作安排”,杂念就会立刻消失,人...
原来这就是贝叶斯统计-读《统计学关我什么事》
1. 说得清楚
这是一本科普贝叶斯统计学的书,我一直觉得这类书籍很难写。正如我在博客about里写的:“从以为自己了解到能够给别人讲清楚,还有很长的一段距离。”,当能够表的足够清楚,给大部分人都能讲明白的时候,说明是从各个角度都已经完全理解了。
2. 贝叶斯统计
关于统计学,上学时我们最开始学习的是概率,刚开始的概念还比较容易理解,比如从壶里取一个球,根据已知条件判断球的各种的颜色概率。
不过往后就开始学习“概率的概率”,比如取出白球可能有多种概率:0.1、0.2、…、1.0,不同概率的概率是多少?这块就就有点绕了。理论上可以继续说“概率的概率的概率”,直到大脑处理不了更深的堆栈。
这个有点像如果你能预测五分钟后会发生什么,那么你就能预测“你预测五分钟后会发生什么”,理论上你...
DolphinScheduler笔记之4:工作流的启动
如果要设计一套 Master-Worker 架构的任务调度系统,Master 的复杂度无疑更高一些。因为 Master 相当于系统的“大脑”,从宏观上管理着任务调度的准确性和稳定性。其中核心又在于需要准确的管理工作流的状态以及调度下一步的行为。
在了解 DolphinScheduler 的实现之前,我们不妨先思考几个任务调度的问题:
分布式的常见问题,例如如何避免同一个任务被不同 Master 实例分别启动?或者都没有启动任务?
工作流实例是由多个任务实例的 DAG 组成,先启动哪个?什么时候启动下一个?
任务应该发送到哪个 Worker 执行?发送 Worker 超时或者失败怎么处理,重试还是发送到其他 Worker?
Worker 需要分组么?有什么好处?
...
不算笔记的笔记-读《品人录》
《万历十五年》里,黄仁宇先生讲了六个人:朱翊钧、张居正、申时行、海瑞、戚继光、李贽。
《大明王朝的七张面孔》里,张宏杰先生讲了七个人:朱元璋、朱棣、海瑞、魏忠贤、张献忠、吴三桂、郑成功。
前两本的时间还只在明朝,到了《品人录》,时间跨越更大,从汉到清,易中天先生却只选了五个人:
哪五个人?为什么是这五个人?有什么共同点么?为什么都有海瑞?
我觉得历史是个很有意思的东西,你去研究或者评价历史上的某个人,前提是这个人“有记可循”。是皇家正史也好,是稗官野史也罢,
所以历史上值得记录的往往是重要的人或事,大的如二十四史,小的如《丝绢全书》(见《显微镜下的大明》)。
你不可能凭空杜撰出来历史,但是你现在读到的历史却可能是杜撰出来的,真伪难辨。
有时候历史学家的重任是分辨历史,有时...
207 post articles, 26 pages.