本文由作者授权发布,谢绝转载
作者:何李夫,网易杭州研究院数据科学中心工程师
本文介绍了使用 Apache Kudu 的两种常见姿势,并在此基础上介绍了通过 Kudu 和 Impala 实现透明分层储存管理,以实现快速数据的快速分析能力,特别是透明的分层存储对构建用户行为日志类的实时数仓建设具有革命性的价值。原先实时 ETL 直接入 HDFS,数据展现会滞后,而改由入 Kudu,马上就能展现。这种数据展现的加速,能够极大地拓宽业务品种的丰富度。
作为网易互联网业务高速成长的核心引擎之一,由网易杭州研究院数据科学中心研发的网易猛犸大数据平台提供了数据集成、计算、存储等全面的大数据能力,其中基于 Apache Kudu 的分布式存储是猛犸的一个核心组件,目前已经应用于网易考拉、网易云音乐等核心业务。本文将分两部分展开介绍 Kudu 在网易的应用实践:第一部分是介绍当前 Kudu 的使用现状,针对的是架构设计和技术选型;第二部分是如何来实现透明的分层存储管理,针对的数据存储的规划,希望能给需要构建实时分析业务的同学带来一些借鉴和帮助。
这里有两个滑动窗口:一个是 Kudu 和 HDFS 的 range 分片滑动窗口,另一个是 view 的滑动窗口。
另外,需要特别补充下中间“Boundary”的处理,即 SQL 查询的时候怎么处理这部分正在移动的数据?答案是在 view 的定义里:
CREATE VIEW my_table_view AS
SELECT name, time, message
FROM my_table_kudu
WHERE time >= "2018-01-01"
UNION ALL
SELECT name, time, message
FROM my_table_parquet
WHERE time < "2018-01-01"
AND year = year(time)
AND month = month(time)
AND day = day(time);
请注意 SQL 中的 Kudu 表和 parquet 表的 time 字段的限制,view 定义了各自的时间范围,所以数据是不影响的。
我们举个例子:
step1:
把 Kudu 数据拷贝到 HDFS ,此时因为 time 属性没变,所以 HDFS 上新增的 range 数据扫描不到:
step2:
修改 view,使其包含 HDFS 增加新的分区,不包含 Kudu 旧的分区,那么这部分数据的扫描就切换到的 HDFS 上了;
step3:
增、删 Kudu 分区:
作者简介:
何李夫,网易杭州研究院数据科学中心工程师,目前负责 Kudu 内核开发,提供统一的 Kudu 安装、运维、调优、新功能开发等工作。