Kudu:Apache Kudu 简介和架构

摘要:KuduHdfsHbase

Kudu简介

Kudu是由Cloudera开源的存储引擎,可以同时提供低延迟的随机读写和高效的批量数据分析能力,他是一个融合HdfsHbase功能的新组件,具备介于两者之间的新存储组件。

Kudu和Hbase Hdfs对比.png

  • Kudu是大数据存储引擎,可以结合其他框架进行大数据批量分析
  • 结合了Hdfs的高吞吐数据能力和Hbase高随机读写能力

Kudu架构

Kudu使用单个Master节点管理集群和元数据,使用任意数量的Table Server节点来存储实际数据,可以部署多个Master节点来提高容错。
Kudu架构中分为Master ServerTablet ServerTableTablet

Kudu架构.png

  • Master Server: Kudu集群中的老大,可以有多个Master Server提高集群的容错能力,但是只有一个Master Server对外提供服务,负责管理集群和管理元数据
  • Tablet Server: Kudu集群中的小弟,可以有任意多个,负责存储数据数据读写。在Tablet Server上存储Tablet,对于一个Tablet,只有其中一个Table Server作为leader,提供读写服务,其他Table Server都是follower,只提供读服务。
  • Table: Kudu中的表概念,有SchemaPrimary Key概念,Kudu中的表会被水平方向分为多个Tablet片段存储在Tablet Server上。
  • Tablet: 一个Tablet是一张表的一个连续片段,tablet是表的水平分区,tablet之间的primary key范围不会重叠,一张表的所有tablet片段构成了这张表的所有primary key范围。tablet会冗余存储在多个Tablet Server上设置副本,任何时刻只有一个Tablet Server是leader,其他都是follower。

数据模型

Kudu的设计是面向结构化存储的,数据模型与传统的关系型数据库类似,一个 Kudu集群由多个表组成,每个表由多个字段组成,一个表必须指定一个由若干个(>=1)字段组成的主键,如下图:

数据模型.png

  • Kudu需要在建表时定义Schema信息,包括定义列(列类型)主键primary key
  • Kudu的数据唯一性依赖与primary key的列组合
  • Kudu不支持传统关系型数据库的二级索引
  • Kudu表中的每个字段是强类型的,而不是HBase那样所有字段都认为是 bytes。这样做的好处是可以对不同类型数据进行不同的编码。Kudu的数据类型包括BOOL, INT8, INT16, INT32, BIGINT, INT64, FLOAT, DOUBLE, STRING, BINARY

底层数据模型

Kudu的底层存储基于table/tablet/replica视图级别的底层存储系统

kudu底层存储.png

  • 每个table被划分为tablet,每个tablet包含一个MetaData和若干个RowSet(行集合)
  • MetaData记录元数据,即记录该tablet属于哪个table,RowSet包含一个MemRowSet和若干个DiskRowSet
  • MemRowSet:当有新数据插入时写入MemRowSet,以及修改已经在MemRowSet中的数据,当MemRowSet写满或者超过一定时间后刷入磁盘形成若干个DiskRowSet,默认是1G或者120s
  • DiskRowSet:MemRowSet每刷新一次就会生成一个DiskRowSet,DiskRowSet刷下来之后就不在变化了,DiskRowSet中又包含BloomFIleAdhoxIndexBaseDataUndoFileRedoFileDeltaMem
  • BloomFIle:根据一个DiskRowSet中的key生成布隆过滤器,用于快速模糊定位某个key是否在DiskRowSet中
  • AdhoxIndex:如果key在DiskRowSet中定位key的具体偏移位置
  • BaseData:MemRowSet刷如磁盘的数据,按列存储,按主键排序
  • RedoFile:保存更新后的数据,防止事务成功后数据未在磁盘更新
  • UbdoFile:保存更新前的数据,防止事务失败后恢复原始数据
  • DeltaMem:用于DiskRowSet数据的更新,存储DiskRowSet中变更的数据,随着DiskRowSet的变化,DeltaMem记录变更记录,DeltaMem增长到一定程度刷到磁盘形成deltaData

数据分区策略

Kudu对表进行横向分区,Kudu表会被横向切分存储在多个tablets中。不过相比与其他存储引擎,Kudu提供了更加丰富灵活的数据分区策略。一般数据分区策略主要有两种,一种是Range Partitioning,另一种分区策略是Hash Partitioning

  • Range Partitioning: 按照字段值范围进行分区,HBase 就采用了这种方式,优势是在数据进行批量读的时候,可以把大部分的读变成同一个 tablet 中的顺序读,能够提升数据读取的吞吐量。并且按照范围进行分区,我们可以很方便的进行分区扩展。其劣势是同一个范围内的数据写入都会落在单个 tablet 上写的压力大,速度慢
  • Hash Partitioning: 按照字段的Hash值进行分区,Cassandra采用了这个方式,由于是Hash分区,数据的写入会被均匀的分散到各个 tablet 中写入速度快。但是对于顺序读的场景这一策略就不太适用了,因为数据分散,一次顺序读需要将各个 tablet 中的数据分别读取并组合,吞吐量低。并且 Hash 分区无法应对分区扩展的情况。

Kudu支持用户对一个表指定一个范围分区规则和多个 Hash 分区规则

kudu分区.png

Kudu的读写更新流程

kudu写入流程.png
  • 先根据主键找到要访问的tablet,即根据key的范围过滤掉不可能存在的范围区间
  • 在该范围下通过布隆过滤器再过滤掉不可能存在的rowset
  • 最后通过rowset中的B-tree精确定位key是否存在
  • 如果存在则报错,否则插入MemRowSet

kudu读取流程.png
  • 先根据key范围找到tablet
  • 在tablets下scan找到找到数据,在找到delta store修改数据,在合并上内存中未刷入磁盘的数据MenRowSet

kudu更新流程.png
  • 跟写入数据一样,先找到key数据
  • 找到数据后将修改内容写入delta store

Kudu web ui

通过http访问Kudu web ui,http://master主机名:8051

master主页.png


点击Masters看到只有一个master单节点,角色是leader,以及rpc地址http地址,分别用来使用kudu和查看kudu

点击master.png


点击Tablet Server看到有3个注册的tablet server,分布在三台机器,3个成功0个失败,点击进入可以到每个tablet server的页面

点击tablet server.png


点击Tables可以查看表的表名,状态,tablet数量,磁盘占用大小

点击tables.png


点击某个表可以查看表的主键,数据类型,分区,impala建表语句


点击表.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容