kudu 理论

kudu为何应运而生

​ kudu 是一个针对 Apache Hadoop 平台而开发的列式存储管理器,kudu是介于hive与hbase中间的一个组件,解决了hive的随机读写问题,同时提高了hbase的读吞吐量与组合查询效率。

  • hive痛点

    hive可以很高写吞吐量,但是不支持随机读写,支持组合条件查询,但是组合查询效率较低,需要全表扫或者按照分区表扫全部数据。

  • hbase痛点

    hbase可以支持随机读写,并且随机读写性能很高,但是在组合查询的时候效率很低,需要全表扫描。

kudu的出现折中了hive与hbase的特性,取长补短,介于两者中间。

hivehbasekudu
随机读写不支持随机读写支持随机读写,并且非常快支持随机读写,但是没有hbase快
组合查询支持,但是效率低下支持filter过滤,但是效率非常低,与hive性能相仿,甚至不如hive的分区分桶表支持组合查询,性能比hive高
分区设计指定分区键或者分布键按照rowkey分,采用的是range方式分区支持hash、range以及hash与range组合分区

file

kudu架构

  • kudu网络架构

file

tablet分为leader与follower多副本机制,其中leader负责写服务,follower与leader一起提供读服务。

kudu由master server与tablet server两部分组成,master server负责集群管理、元数据管理等管理工作,tablet server提供数据存储、数据读写功能。

  • kudu内部架构

file

kudu写数据流程

file

  • 检查主键

    1. 主键范围索引:记录本 diskrowset 中主键的范围,用于粗粒度过滤一些主键范围,使用最小和最大主键确定是否在改rowset中。

    2. 布隆过滤器:通过主键的布隆过滤器来实现不存在数据的过滤,布隆过滤器存在误判,但是只出现在本来不存在被误判为存在。

    3. 主键索引:要精确定位一个主键是否存在,以及具体在diskrowset中的位置(即:row_offset),通过以 B-树为数据结构的主键索引来快速查找。

  • 溢写磁盘

    随着持续数据写入,kudu 中的小文件会越来越多,主要包括各个diskrowset 中的basedata,还有若干份deltafile,小文件的增多会影响 kudu 的性能,特别是deltafile 中还有很多重复的数据,为了提高性能,会进行定期 compaction,compaction 主要包括两部分:

    1. deltafile compaction:过多的 deltafile 影响读性能,定期将 deltafile 合并回basedata可以提升性能。在大部分业务场景,频繁变更的字段是集中在少数几个字段中的,而kudu是列式存储的,因此 kudu 还在 deltafile compaction 时做了优化,文件合并时只合并部分变更列到basedata 中对应的列。

    2. diskrowset compaction:除deltafile外,还定期将diskrowset 合并,原因是合并时可以将被删除的数据彻底的删除,而且可以减少同样key范围内数据的文件数,提升索引的效率。

kudu读数据流程

file

kudu更新数据流程

file

海汼部落原创文章,原文链接:http://www.hainiubl.com/topics/75593

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值