Home

漫谈 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"...

Read more

潜艇会游泳吗?读《智慧的疆界》

这本书是一本人工智能简史,前面几章科普效果很好,后面介绍到算法,看不懂的很多。等再打打数学根基后,再读一遍。 1. 书摘 人工智能学科包含了三大学派: 符号主义学派 连接主义学派 行为主义学派 符号主义学派不关注大脑如何思考的,希望通过构建规则、决策树,来解决问题。利用逻辑推理、搜索来匹配输入输出。 对比现在最热门的基于神经网络的机器学习,以决策树学习为代表的基于符号的机器学习有一个很好的性质:它生成的模型是一个白盒模型,输出结果的含义很容易通过模型的结构来解释,而神经网络输出的是一个黑盒模型,最终结果往往是模型确实可以解决问题,甚至是工作得非常好,但是人类无法根据模型去解释为什么会如此。可解释性是符号主义思想先天决定的,这也是基于规则学习算法对比起现在流...

Read more

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

Read more

漫谈 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 还是...

Read more

2023年个人总结

1. 工作 2023年花了很大的精力,把自研的任务调度系统迁移到了 DolphinScheduler. 原有的调度系统使用 PHP 开发,非常古老,可能比公司成立时间还要早。如果放到十年前看,有很多可圈可点之处。但是近几年只能勉强维护,新的功能需求,开发两周,再加两周补开发带来的 bug. 由于离线任务调度系统的高峰是在凌晨,迁移过程熬夜挺多。也总结了一些经验,发表在了 https://mp.weixin.qq.com/s/smsNDH2MYpoys-qWz4O0Sg 22年总结实时计算时,担心 Flink 任务动态扩缩这个项目,很多收尾的工作,由于人力撤出导致盘点不全。23年这块还是出了一些问题,值得反思的地方很多。进一步的,如果提前处理了,问题就不会发生,但是价值如何自证?...

Read more

JDBC

1. JDBC 定义 Java Database Connectivity (JDBC) 定义了一套访问数据库的 API. Java Database Connectivity (JDBC) is an application programming interface (API) for the Java programming language which defines how a client may access a database.1 好处是几乎可以使用完全相同的代码,访问不同的数据库:MySQL、Hive、Doris、Presto 等等。 定义在 package java.sql,主要包含了 DriverManager Driver Connection...

Read more

大数据列存储文件格式

文件存储格式,即数据在磁盘上是如何组织的,比如 leveldb 的 sst 文件由 DataBlock、FilterBlock、IndexBlock、Footer 等组成。这种格式的设计,适应了单机写多读少、读取新写入数据的场景。 1. 大数据为何偏爱列存储 Apache ORC、Apache Parquet 都是典型的列存储格式,大数据的场景,为何偏爱列存储? 首先无论场景如何变化,从单机到大数据,面临的磁盘性能是一致的,引用 Jeff Dean 演讲的数据1: Latency Comparison Numbers (~2012) Operation Time in Nano Seconds ...

Read more

linkedin/coral 代码速读

前几天纷飞的大雪还未消融,周末又赶上降温。于是踏实关在屋里,快速读了一遍 linkedin/coral1 的代码,这篇笔记记录下整体流程。 1. 背景:SQL 重写的需求 大数据领域,随着数据量变大、时效性要求越来越多样化,SQL 计算引擎也越来越多,从原来的 HiveSQL,到如今的 Presto/Trino、Flink、Spark。同时,随着 storage format、table format、table schema 各个方向的精细发展,SQL 的形式也越来越多,短期内也很难出现事实上的统一标准。 SQL 往往需要在不同执行计算引擎间变更,比如: 分析师的 HiveSQL 运行很慢,希望能够修改为 TrinoSQL 执行 数仓工程师的 HiveSQL,希望能够统...

Read more