技术文章

从数据路径、系统边界和故障现场理解复杂软件

文章分为大数据系统、浏览器内核、系统工程与 AI 工程四个专题。每篇文章尽量回答三个问题:组件负责什么、请求怎样执行、出现问题时从哪里查起。

大数据系统 · 浏览器内核 · 系统工程 · AI 工程

Kudu 最值得研究的地方,不是“支持 UPDATE 的列式存储”这句话,而是它如何把两种冲突的访问模式放进同一个 Tablet:新数据要低延迟写入,分析查询又希望读取紧凑、按列编码的数据;更新不能重写整列文件,历史版本还必须对快照读可见。

解决办法不是某一种神奇数据结构,而是一组分层结构:MemRowSet 接住新行,DiskRowSet 提供列式基线,Delta Store 承载更新,WAL 与 Raft 负责持久性和复制,MVCC 决定每个快照能看到什么。

本文基于 Kudu 1.18.1 源码,文件路径均相对于 src/kudu/。

Tablet 才是存储与一致性

...

Impala 查询快,不是因为它省略了 SQL 优化,也不是简单地“绕过 MapReduce”。真正的区别在执行形态:Daemon 常驻、元数据常驻、查询被切成并行 Fragment,数据通过 Exchange 在节点间流动,Scan、Join 和 Aggregate 尽可能组成流水线,并由 Runtime Filter 在运行期缩小扫描范围。

本文以 Impala 4.5.0 为基线,从一条 SQL 进入 impalad 开始,追到 RowBatch 穿过执行树并回到客户端。源码路径均相对于 Impala 仓库。

先建立进程视图

Impala 集群的核心角色不是传统意义上...