什么是Kudu
前言
结构化数据存储在Hadoop生态系统中,分为静态数据和动态数据两类。静态数据指的是需要进行数据分析的数据,这种分析针对的数据量一般很大,例如:统计全年每个地区总营业额。动态数据指的是数据需要实时动态插入、更新、读取的数据。例如业务系统中海量用户基本信息的存储。
- 静态数据:
对于大批量数据分析场景,为了便于数据分析,Hadoop生态系统中一般将数据存储在HDFS中,HDFS设计的初衷就是一次写入多次读取,HDFS适合高吞吐连续访问数据场景。只支持数据的追加,不支持数据的更新修改,即不支持随机写。HDFS对于数据的随机读写支持不友好。
- 动态数据:
一些数据处理场景下,需要低延迟、高效的读取特定数据,我们可以将数据存储在HBase中,HBase支持数据的低延迟随机读写(HBase数据存储在HDFS中,本质上还是追加写。基于版本号和定期合并HFile实现随机读写,默认返回最大的时间戳数据)。HBase中以Rowkey为索引,对于需要大批量读取数据分析的场景,吞吐量不如HDFS。
例如我们有一个业务系统,有如下要求:
- 数据实时产生,需要对数据逐行进行插入保存、低延迟数据读取、更新的随机读写操作。
- 需要批量扫描历史数据,进行快速、实时的OLAP数据分析。
以上业务系统,既要求对数据进行随机读写,又要求对数据进行批量分析操作,针对以上业务场景我们就可以选择Kudu。
一、Kudu概念
Kudu是Cloudera在2015年9月开源的分布式数据存储引擎,其结合了HDFS和HBase的优势,可以同时提供高效的随机访问以及数据扫描能力。Kudu支持数据的实时插入和分析,为实时的OLAP计算提供了另外一种选择。
Kudu的随机读写速度和HBase相似,但是达不到HBase随机读写性能,Kudu批量查询数据性能媲美HDFS parquet,但是比HDFS批量查询慢,所以kudu更像是HDFS与HBase的一个折中选择,目前国内小米、网易等公司在用。
二、Kudu 适用场景
Kudu适用于以下场景:
- 对数据既支持扫描(scan)又支持随机访问(random access)同时具有高性能,简化用户复杂的混合架构场景。
- 数据需要更新,避免额外的数据迁移。