当前位置: 首页 > 工具软件 > Apache Kudu > 使用案例 >

Apache Kudu概述

史超英
2023-12-01

数据模型

kudu集群所存储的表,看起来就像是关系型数据库中的表。这个表可以简单的像一个键值对,也可以复杂的像上百个不同类型的属性。

像关系表一样,每张表有一个主键,这个主键可以由一个或者多个列组成。比如可以用用户ID作为单个列的主键,或者(host, metric, timestamp)作为一个组合主键。通过主键,表中的行记录可以被高效的读,更新,删除。
kudu简单的数据模型使其能够轻易的移植老的应用或者构建出一个新的:不用担心如何把你的数据编码成binary blobs格式或者理解充满难以理解的json格式数据的大数据库。表是自描述的,因此您可以使用SQL引擎或Spark等标准工具来分析数据。

低延迟随机访问

跟其他大数据分析存储不同,kudu不仅仅是一种文件格式。它是一个实时存储系统,支持对低延迟毫秒级的行访问。对于nosql的访问,它提供java,C++或者python 语言的API。当然,这些随机访问API可以与机器学习或分析中用到的的批量访问结合使用。

kudu的API被设置的易于使用。它的数据模型是完全类型化的,所以你无须担心二进制编码或者外来序列化的问题。你只需要像使用JDBC或者ODBC一样存储基本类型即可。

kudu并不是OLTP系统,但如果您有一些适合存放在内存的数据子集,它可以提供有竞争力的随机访问性能。我们用YCSB工具对一百亿行数据进行统一的随机访问测试,结果延迟小于6ms的请求占了99%。能够在与后太数据分析相同的存储上运行低延迟的在线工作负载可以大大简化应用程序架构。

对hadoop生态圈的集成

kudu是适应hadoop生态系统的,并且它也易于跟其他数据处理框架集成。你可以使用java客户端,让数据从实时数据源流入kudu,然后用spark,impala,MapReduce立即进行处理。你甚至可以将kudu表跟存储在hdfs或者hbase中的数据进行join。

kudu是hadoop集群上的好市民:它可以轻松地与HDFS DataNode共享数据磁盘,并且可以在小至1 GB的内存空间中进行轻负载操作。

kudu的架构

超快的列式存储

跟很多当前的数据分析存储一样,kudu内部是按照列来管理数据的。列式存储允许对数据进行有效的编码和压缩。比如一个只有几个唯一值的字段,每行只需要几个bit来存储。通过运行长度编码,差分编码和矢量化位打包等技术,Kudu可以快速读取数据,因为它在存储数据时节省空间。

得益于列式存储,在分析查询中可以大大减少IO。使用lazy data materialization和predicate pushdown等技术,Kudu可以在几秒钟内对数十亿行和数TB的数据执行drill-down 和 needle-in-a-haystack查询。

分布式和容错

为了扩展到大型数据集和大型集群,Kudu将表拆分为更小的单元,称为tablets。可以通过hash,范围分区,组合的方式给每个表划分tablets。这使得操作者可以轻松地在分析工作负载的并行性和更多在线工作负载的高并发性之间进行权衡。

为了确保您的数据始终安全可用,Kudu使用 Raft一致性算法备份tablets上的所有操作。与Paxos一样,Raft确保在响应客户端请求之前,每个写入至少由两个节点保留,确保不会因机器故障而丢失任何数据。当计算机出现故障时,副本会在几秒钟内重新配置,以保持极高的系统可用性。

即使某些节点可能受到诸如Spark作业或重型Impala查询之类的并发工作负载的压力,使用多数一致性也可以提供非常低的尾部延迟。但与最终一致的系统不同,Raft一致性确保所有副本将围绕数据状态达成一致,并且通过使用逻辑和物理时钟的组合,Kudu可以为需要它的客户提供严格的快照一致性。

 类似资料: