kudu 理论

教程 犀牛 ⋅ 于 2021-06-03 22:45:06 ⋅ 1178 阅读

kudu为何应运而生

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

  • hive痛点

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

  • hbase痛点

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

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

hive hbase kudu
随机读写 不支持随机读写 支持随机读写,并且非常快 支持随机读写,但是没有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://hainiubl.com/topics/75593
成为第一个点赞的人吧 :bowtie:
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter