博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apache Kudu概述
阅读量:3683 次
发布时间:2019-05-21

本文共 1575 字,大约阅读时间需要 5 分钟。

数据模型

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可以为需要它的客户提供严格的快照一致性。

转载地址:http://ggudn.baihongyu.com/

你可能感兴趣的文章
求一个正整数N的开平方(牛顿迭代法)
查看>>
Golang为什么Response.Body需要被关闭&&内存泄漏数量
查看>>
MySQL中的int(11)和varchar(255)含义
查看>>
golang中 struct{} 和 struct
查看>>
golang json包变量不加tag
查看>>
golang:var、new、make区别及使用
查看>>
记一次goer新手的using unaddressable value错误
查看>>
gorm更新时传入结构体struct时零值被忽略
查看>>
一台主机最多保持65535个TCP连接吗?
查看>>
select和count一起使用返回一条数据
查看>>
AB实验流量正交的理解
查看>>
ubuntu安装双cuda,并进行切换
查看>>
c++ protobuf的使用
查看>>
Ubuntu16.04 wine 安装Window下的微信
查看>>
docker 清理镜像和磁盘空间命令
查看>>
ubuntu16.04 使用docker搭建镜像环境,并安装使用jupyter,实现主机访问镜像环境
查看>>
ubuntu磁盘清理
查看>>
python np.ceil()和np.repeat(),图像通道赋值的用法
查看>>
**python使用 opencv2 和udp通信进行两路相机视频的回传,以及使用pygame同时显示两路视频**
查看>>
Linux 中 find 和 vi 编辑器基本使用
查看>>