Home

《窦占龙憋宝 - 七宝八金刚》书摘

古代有饭铺酒馆、茶楼妓院、赌坊酒肆,但说书场在我看来,却是一个不一样的所在,有教化世人的作用。 只因听书的人三教九流,有钱没钱的,卖苦力的、挣大钱的、走江湖的,鱼龙混杂。 这世上有诸多不平事,老百姓听多了,也都有疑问: “纣王无道,多少忠臣扶保;文王有德,却遭食子之殃;妲己祸国,受的是女娲娘娘差派;姜后贤德,剜眼烙手而亡;奸党费仲尤浑,死后为天上星宿;忠臣梅伯比干,难逃炮烙挖心之殇” 这个时候,就需要说书人了,所以说书里最讲究一个起承转合、前因后果。嬉笑怒骂插科打诨间讲个因果循环,使人敬畏这报应不爽,因缘际会。不为别的,只因信的人多了,道理才是道理。 摘了部分书抄: 天天坐着洋车过来,掐着点儿到书场子,甭管台底下坐了多少听书的,等得如何心急火燎,先生也是不慌不...

Read more

《崔老道传奇》书摘

正儿八经的故事内容就不记了,这么一本书,愣是给人看饿了! 摘抄了一部分: 是说祥德斋的枣泥儿馅儿白皮儿点心好吃,那是道光年间就卖出了名的老字号。豆沙馅儿、什锦馅儿的虽说也好,最好吃的可还得说是枣泥儿点心,用的是绥德红枣,带虫子眼儿的全拣出去扔了,先煮后炒,拌上花生油和白砂糖,又甜又沙口,在天津卫久负盛名。 他家的芝麻烧饼最好吃,用麻酱分层,揪出面剂子,拿起来往芝麻笸箩里一按,单面沾上芝麻,放进炉膛里烤,刚出炉的还挺烫,外表焦脆、内里绵香 门口左右两条布招,分别写着“面劲入口滑,汤泼香十里”。不是人家吹牛,羊肉烩面确实地道,口外的羊肉肥而不膻,炖熟了切成块,也有切片的,老汤做底,面条现抻,加上几块羊肉,放上香菜、葱花,浇上山西老...

Read more

DolphinScheduler-9: 容错

1. 容错的必要性 分布式系统使用集群提高了算力,也天然需要面对和解决单机不稳定的问题,比如常说的宕机、掉盘、网络抖动等。 Jeff Dean 多年前在斯坦福有过一个分享1,其中一些数字我觉得应该是架构谨记的: Typical first year for a new cluster: ~1 network rewiring (rolling ~5% of machines down over 2-day span) ~20 rack failures (40-80 machines instantly disappear, 1-6 hours to get back) ~5 racks go wonky (40-80 machines see 50% packet...

Read more

知易行难-读《中台落地手记》

中台落地手记 : 业务服务化与数据资产化这本书在豆瓣只有6分,但读起来受益不少。主要有几个原因: 图画的清晰、好看 方便速成 自身做了几年大数据中台 读书笔记按照这几点分别总结。 1. 图 一图胜千言。虽然我的 PPT 画的难看,但是我羡慕 PPT 画的清楚的人,也赞同 PPT 文化。PowerPoint 画的清楚,往往代表着思路清晰、重点明确。有Power、有Point. 图不在于画的好看,而是在于清楚,有取舍、有重点。节取一些架构图: 大数据平台架构: 数据质量: 看这张图的时候,我一直在想数据质量平台应该是先验还是后验平台? Spark各阶段: ServiceMesh: MyCat: Consul: Apache Atlas: ...

Read more

DolphinScheduler-8: 状态

在工作流的生命周期里,初步介绍过工作流的各种状态。 1. 状态机 如果我们实现一个任务调度系统,首要是梳理清楚任务状态。 以 Flink 任务流程为例: 提交:任务提交后,资源调度需要分配资源、初始化Container、启动JobManager、TaskManager等。因此任务首先是从初始化到提交中,再从提交成功到运行,当然任务也有可能因为各种原因导致提交失败。 运行:运行中的任务,可能会成功,可能会失败,对流式任务,也有可能一直是运行。 停止:任务在任何一个状态,都可能会收到停止的事件,同理会先变成停止中,再变成已停止,如果停止失败,那回到原来的状态。 这个流程包含三元素: 状态:初始化、提交中、运行、成功、失败、已停止,都是任务的状态 事件...

Read more

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 ...

Read more

DolphinScheduler-6: 依赖任务DependentTaskProcessor

1. 为什么要有任务依赖? 大数据的离线场景中,任务每次执行更新一个新的 Hive 分区,分区基本都是时间相关的,比如天、小时分区。 写入 ODS 表新分区的任务执行完成后,接着执行写入 DWD 表新分区的任务,因此任务之间是有严格的依赖关系的。因为 ODS 是 DWD 的输入,如果任务启动时间过早,DWD 任务就会读不到或者读到一个空分区导致任务失败/数据错误。 所以任务依赖是任务调度系统中非常重要的一环。 扩展任务类型,诸如 ShellTask、FlinkTask、SQLTask 等好比是兵器,多多益善,但是可以按需添加,积少成多。任务依赖、调度及时性则是基本功,一旦依赖计算不准确、调度不及时,就等于自废武功了。 2. 触发/轮询/Crontab 我们是否可以只基于任务...

Read more

DolphinScheduler-5: 普通任务CommonTaskProcessor

接上一篇笔记,这里总计下普通任务在 master 的处理过程。 DolphinScheduler 里的任务类型,按照逻辑可以分为两种: 普通任务:具体执行的任务,例如 Shell、SQL、Flink 等,相当于编程语言里的函数、计算 条件分支:用于判断下一个任务是否执行,例如 Dependent、Conditions、Switch 等,相当于编程语言里的 while/for/if 对于普通任务,master 打包发送到 worker 执行;对于逻辑分支,master 交给自身执行。 显然这两种类型的任务处理过程是不同的:前者分发到 worker,需要考虑负载均衡、字段协议、网络延迟等;后者在 master 执行,需要考虑线程隔离、CPU占用。 同时两者又都有相同点:...

Read more