批处理和流处理
1.时间的边界
1.1. T+1
时间分两种,处理时间和事件时间。大部分情况,数据处理都会选择事件时间。
以离线的天级 Hive 表任务为例,我们看看是如何产出 T+1 的数据的。
T+1 00:00 是处理时间,假定 A 表 Tday 的数据在 00:05 完全到达,B 表 T-day 的数据在 01:05 完全到达。
数据完全到达后,开始 merge Tday 的增量数据,然后根据需要生成全量表或者拉链表。可能的时间轴:
00:05 -> 00:30: merge A 表 Tday 的增量数据,记录到 A-inc
00:30 -> 01:35: merge A-inc + A-base,记录到 A 表 Tday 分区
01:05 ->...
《Kubernetes修炼手册》读书笔记
最近要落地 Native Flink On Kubernetes,但是公司的容器团队支持力度很小。因此开始看 Kubernetes 相关书籍,这本书是从春节前看的,早上、周末、陆陆续续持续了一个月左右,收获很大。适合入门,非常推荐。
1. Kubernetes系统
Kubernetes 集群由主节点和工作节点组成:
主节点(master): 即控制平面,包含了
API Server: 组件通信,通过HTTPS的方式提供了RESTful风格的API接口
集群存储: etcd
controller管理器: controller 管理器是 controller 的管理者,例如工作节点controller、终端controller,以及副...
大数据和后端服务
大数据和后端服务之间的差别,远比后端服务之间,比如推荐架构、搜索架构、直播架构等的差别要大。两者比较的文章似乎很少见。
但实际上,我在做后端服务的时候,也曾调研过能否使用大数据的组件,比如 Flink、Kafka。很多后端服务也会用到大数据的存储,比如 Hbase 来存储数据。
还记得刚从后端转到大数据开发时,对各种差别感到疑惑。如今做了几年大数据,有的疑惑逐渐解开,有的疑惑依旧看不清,有必要阶段性的总结一下。当然,工程师不应该限制自己是大数据、前端还是后端还是算法,但是试图理清区别和联系,能够让我们的视野看的更高。
1. 大数据的技术本质还是后端服务
以在大数据离线任务开发中,常见的 Apache DolphinScheduler 工作流调度系统为例。DolphinSched...
Flink - fabric8 的使用
Flink 使用 Fabric8 Kubernetes client1作为 Kubernetes 的客户端,本文结合 Flink 提交 JobManager、TaskManager 的代码介绍 Fabric8 的使用。
1. Flink 使用 Fabric8 相关源码
Fabric8 是一个 Java 的 Kubernetes 客户端,使用一套自定义的 DSL 跟 REST API 交互。
我们可以使用链式调用方式访问和操作集群资源,例如:
ListOptions options = new ListOptions();
options.setLabelSelector("type=flink-native-kubernetes"...
潜艇会游泳吗?读《智慧的疆界》
这本书是一本人工智能简史,前面几章科普效果很好,后面介绍到算法,看不懂的很多。等再打打数学根基后,再读一遍。
1. 书摘
人工智能学科包含了三大学派:
符号主义学派
连接主义学派
行为主义学派
符号主义学派不关注大脑如何思考的,希望通过构建规则、决策树,来解决问题。利用逻辑推理、搜索来匹配输入输出。
对比现在最热门的基于神经网络的机器学习,以决策树学习为代表的基于符号的机器学习有一个很好的性质:它生成的模型是一个白盒模型,输出结果的含义很容易通过模型的结构来解释,而神经网络输出的是一个黑盒模型,最终结果往往是模型确实可以解决问题,甚至是工作得非常好,但是人类无法根据模型去解释为什么会如此。可解释性是符号主义思想先天决定的,这也是基于规则学习算法对比起现在流...
Calcite-6:使用 SQL 分析博客文章
博客里的文章,命名和规则都比较有规律。现在工作里 SQL 接触非常多,今天突然在想用 SQL 分析一把博客文章,介绍下 calcite .
1. 文章数据结构化
文章结构化的数据,可以粗略提炼出以下结构:
标题:从文章内容提取 title 字段
发布时间:从文章内容提取 date 字段
tags: 从文章内容提取 tags 字段
url: 从文件名提取
直接上代码:
case class PostMeta(url: String, title: String, date: String, tags: String) {
def toArray: Array[AnyRef] = Array(url, title, date, tags)
}
object...
Flink - Native Flink On Kubernetes 集群启动流程
这篇笔记主要介绍 Flink 任务使用 Application Mode 提交到 K8S 集群的流程,使用 flink 1.12 版本说明。
Flink 任务的启动流程,简言之分为三步:
提交任务:不同 Mode(Application/PerJob/Session)的区别主要是用户代码是否在这一步执行.
启动 JobManager: 跟 Resource Provider(YARN/K8S)申请资源、运行用户代码、初始化 TM 等。
启动 TaskManager:执行 JM 指定的具体算子,与 JM 保持心跳。
由于这些开源项目代码变动很快,因此我尽量从 why 的角度,同时忽略代码间类调用的细节,通过一些重点代码介绍。
1. 提交
无论是 PerJob 还是...
2023年个人总结
1. 工作
2023年花了很大的精力,把自研的任务调度系统迁移到了 DolphinScheduler.
原有的调度系统使用 PHP 开发,非常古老,可能比公司成立时间还要早。如果放到十年前看,有很多可圈可点之处。但是近几年只能勉强维护,新的功能需求,开发两周,再加两周补开发带来的 bug.
由于离线任务调度系统的高峰是在凌晨,迁移过程熬夜挺多。也总结了一些经验,发表在了 https://mp.weixin.qq.com/s/smsNDH2MYpoys-qWz4O0Sg
22年总结实时计算时,担心 Flink 任务动态扩缩这个项目,很多收尾的工作,由于人力撤出导致盘点不全。23年这块还是出了一些问题,值得反思的地方很多。进一步的,如果提前处理了,问题就不会发生,但是价值如何自证?...
225 post articles, 29 pages.