学习
实践
活动
专区
工具
TVP
写文章
专栏首页Lansonli技术博客大数据Kudu(二):Kudu架构
原创

大数据Kudu(二):Kudu架构

​Kudu架构

一、Kudu存储模型及概念

Kudu有自己的数据存储模型,不依赖于HDFS、Hive、HBase其他大数据组件。Kudu有自己的集群,数据存储在Kudu自己的集群Tablet Server中。

  • Kudu的存储模型是有结构的表,表中有主键,并且主键唯一,不能重复。
  • 事务支持上与HBase类似,只支持行级ACID事务。
  • Kudu是列式存储,支持数据压缩。
  • Kudu不支持标准SQL,支持Nosql样式的API,例如:put,get,delete,scan。一般企业中kudu与impala进行整合使用,可以使用SQL对数据进行实时OLAP分析。
  • Table:

table是数据存储在Kudu的位置,具有schema和全局有序的 primary key。一张table被分成多个tablet,其中Tablet的数量是根据hash或者range进行设置。

  • Tablet:

一个tablet是一张table连续的segment,与其他数据存储引擎或关系型数据的partition相似。Tablet存在副本机制,其中一个副本为leader tablet。一个 tablet 通常由一个 Leader 和两个 Follower 组成, 这些角色分布的不同的服务器中。任何副本都可以对读取进行服务,并且写入时需要在所有副本对应的tablet server之间达成一致性。

  • Master server:

Master Servers使用一个tablet存储集群元数据信息,元数据包括所有tablet Server信息、所有tablet位置信息等。客户端访问某一张表的某一部分数据时, 会先询问 Master server, 获取这个数据的位置, 去对应位置获取或者存储数据。虽然 Master 比较重要, 但是其承担的职责并不多, 数据量也不大, 所以为了增进效率, 这个 tablet 会存储在内存中。生产环境中通常会使用多个 Master server 来保证可用性,给定的时间点只能有一个Master是Leader起作用。

  • Tablet Server :

tablet server 存储 tablet,负责表数据存储且负责和数据相关的所有操作, 包括存储, 访问, 压缩, 其还负责将数据复制到其它机器。对于给定的 tablet,一个 tablet server 充当 leader,其他 tablet server 充当该 tablet 的 follower 副本。只有 leader 服务写请求,然而 leader 或 followers 为每个服务提供读请求。一个 tablet server 可以服务多个 tablets ,并且一个 tablet 可以被多个 tablet servers 服务着。

由于Tablet Server 特殊结构和任务繁重,Kudu最多支持300个服务器,建议每个Tablet Server最多包含2000个tablet(包含follower)。

二、​​​​​​​​​​​​​​Kudu table存储原理

对于一张特定的Kudu表,存储结构如下:

Kudu数据存储实现如下:

一个table根据hash或者range分区分成多个tablet,每个tablet中包含MetaData元数据信息和RowSet信息,RowSet中包含一个MemRowSet和0到多个的DiskRowSet。其中MemRowSet存储insert的数据,一旦MemRowSet写满会flush到磁盘生成一个或多个DiskRowSet,此时MemRowSet清空。MemRowSet默认写满1G或者120s flush一次。DiskRowSet一经写入就无法修改。

另外,memRowSet是行式存储,DiskRowSet是列式存储,这是Kudu可支持一些分析性查询的基础,MemRowSet基于primary key有序。每隔一段时间,tablet中会定期对一些DiskRowSet做compaction操作,目的是对多个DiskRowSet进行重新排序,以此来使其更有序并减少diskRowSet的数量,同时在compaction的过程中会resolve掉DeltaStores当中的delete记录。

DiskRowSet是不可以修改的,那么kudu如何进行数据修改和删除呢?在内部,每个DiskRowSet又分为两部分:Base Data和Delta Stores。数据从MemRowSet刷到磁盘后就形成一份DiskRowSet,只包含base data,每份DiskRowSet在内存中都会有一个对应的DeltaMemStore,负责记录此DiskRowSet后续数据的更新和删除。DeltaMemStore内部维护一个B树索引,映射每个row_offset对应的数据变更。DeltaMemStore数据增长到一定程序后存储到磁盘,形成一个DeltaFile,随着数据的不断变更,DeltaFile会逐渐增多。

随着时间推移,Kudu中的小文件会越来越多,主要包含各个DiskRowSet中的base data,还有每个base data对应的若干个DeltaFile。小文件增多会影响Kudu性能,为了提高性能,Kudu会定期Compaction,这里的Compaction主要包含两部分:

1、DeltaFile compaction:

过多的DeltaFile影响读性能,定期将DeltaFile合并回base data可以提升性能。

2、DiskRowSet compaction (上文提到):

除了DeltaFile,定期将DiskRowSet合并也能提升性能,一个原因是合并时可以将被删除的数据彻底删除,另外也减少了文件数,提升索引效率。

经过以上了解Kudu数据存储实现的原理,我们可以知道Kudu中写入数据时优先写入内存,可以加快数据插入效率;数据在磁盘中存储在DiskRowSet中,有主键,DiskRowSet结构类似parquet结构,可以保证数据扫描分析效率。Kudu就是通过以上来实现既能高效的插入数据同时又能快速扫描大量数据满足分析性能。

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注作者,阅读全部精彩内容
登录 后参与评论
0 条评论

相关文章

  • 大数据Kudu(一):什么是Kudu

    结构化数据存储在Hadoop生态系统中,分为静态数据和动态数据两类。静态数据指的是需要进行数据分析的数据,这种分析针对的数据量一般很大,例如:统计全年每个地区总...

    Lansonli
  • 大数据Kudu(七):Kudu分区策略

    Kudu表分为多个tablet,理想情况下,tablets应该相对平等地拆分表的数据,Kudu目前没有自动拆分预先存在的 tablets 的机制。所以在创建Ku...

    Lansonli
  • Apache Kudu 架构

    从Impala在Kudu中创建新表类似于将现有Kudu表映射到Impala表,除了您需要自己指定模式和分区信息。 使用以下示例作为指导。Impala首先创建表...

    jasong
  • 大数据Kudu(六):Kudu Java Api操作

    Kudu没有提供标准SQL操作,支持Nosql样式的API,这里使用Java 操作Kudu ,包括创建表、插入数据、修改删除数据、删除表等操作,值得注意的是,J...

    Lansonli
  • 大数据Kudu(三):Kudu读写数据过程

    当 Client 请求写数据时,先根据主键从 Mater Server 中获取要访问的目标 Tablets,然后到对应的 Tablet 获取数据。因为 KUDU...

    Lansonli
  • 大数据Kudu(十):Flink操作Kudu

    Flink主要应用场景是流式数据处理上,有些公司针对流式数据使用Flink实时分析后将结果存入Kudu,例如快手公司。这里将实时计算的结果存入Kudu需要自定义...

    Lansonli
  • 大数据Kudu(四):Kudu集群搭建

    Kudu官网没有提供好编译好的Kudu安装包,我们可以下载源码进行编译获取安装包,这里为了方便我们直接使用Cloudera 提供的CDH版本kudu安装包:

    Lansonli
  • 大数据Kudu(九):Spark操作Kudu

    使用SparkSQL操作Kudu,这里需要导入Kudu与SparkSQL整合的包和SparkSQL的包,在Maven中导入如下依赖:

    Lansonli
  • 大数据Kudu(八):Kudu与Impala整合

    Impala是cloudera提供的一款高效率的sql查询工具,使用内存进行计算提供实时的SQL查询,impala强依赖于Hive 的MetaStore,直接使...

    Lansonli
  • 大数据Kudu(十一):ClickHouse与Kudu对比

    kudu 2015年9月28号出现第一个测试版本0.5.0,2016年2月26第一个正式版0.7.发布。clickhouse 2018年3月开源正式版出现。两者...

    Lansonli
  • 大数据Kudu(五):Kudu基于Cloudera Manager安装及配置

    使用Kudu一般都会和impala进行整合,impala与Hive是强依赖关系,需要安装Hive,安装Hive需要安装HDFS等,以上各个技术组件的版本都需要对...

    Lansonli
  • 大数据仓库-kudu

    数据仓库里面存储引擎是非常重要的,存储引擎的好坏,基本决定了整个数仓的基础。 kudu目标 cloudera公司最近发布了一个kudu存储引擎。按照cloud...

    大数据和云计算技术
  • 优化spark sql读取 kudu数据

    通过 spark sql 读取 kudu 数据,由于 kudu 表 只有 6 个 tablet ,所以 spark 默认只能启动 6 个 task,读取 kud...

    shengjk1
  • SparkStreaming读Kafka数据写Kudu

    Fayson
  • 将 Kudu 数据迁移到 CDP

    当您将 Kudu 数据从 CDH 迁移到 CDP 时,您必须使用 Kudu 备份工具来备份和恢复您的 Kudu 数据。

    大数据杂货铺
  • 客快物流大数据项目(四十六):Spark操作Kudu dataFrame操作kudu

    虽然我们可以通过上面显示的KuduContext执行大量操作,但我们还可以直接从默认数据源本身调用读/写API。要设置读取,我们需要为Kudu表指定选项,命名我...

    Lansonli
  • 大数据物流项目:Kudu 入门使用(五)

    KUDU 支持用户对一个表指定一个范围分区规则和多个 Hash 分区规则,如下图:

    ChinaManor
  • 如何使用Flume采集Kafka数据写入Kudu

    Fayson
  • 分布式数据存储系统kudu使用总结

    Kudu是Cloudera开源的新型列式存储系统,专门为了对快速变化的数据进行快速的分析。 在国内,小米和神策都已经采用了kudu。 我们使用了kudu 1...

    大神带我来搬砖

扫码关注腾讯云开发者

领取腾讯云代金券