Kudu-架构与设计

news2024/11/17 15:55:41

Kudu架构与设计

  • 一、背景
    • 1.存储组件
    • 2.使用场景
    • 3.多组件组合缺点
      • 3.1 架构复杂
      • 3.2 时效性低
      • 3.3 应对数据更新
  • 二、Kudu概述
    • 1.设计特点
    • 2.框架适用场景
    • 3.框架不适用场景
  • 三、数据模型与存储
    • 1.Table
    • 2.Tablet
    • 3.MetaData
    • 4.RowSet
    • 5.MemRowSet
    • 6.DiskRowSet
      • 6.1 Base Data
      • 6.2 Delta Stores
  • 四、Kudu架构图
    • 1.Master tablet
    • 2.Master Server
    • 3.Tablet Server
  • 五、数据新增流程
    • 1.获取Tablet元数据
    • 2.新增数据请求
    • 3.副本写入
  • 六、数据更新流程
    • 1.获取Tablet元数据
    • 2.数据更新请求
    • 3.副本写入
  • 七、数据查询流程
    • 1.获取Tablet元数据
    • 2.数据更新请求
  • 八、持久化
    • 1.MemRowSet刷盘
    • 2.DeltaMemStore刷盘
    • 3.文件合并
      • 3.1 DeltaFile合并
      • 3.2 DiskRowSet合并
  • 总结
    • 参考链接


一、背景

1.存储组件

大数据存储层主要是由HDFS和HBase两个组件支持。HDFS适用于高吞吐量的离线大数据分析场景,不支持随机的读写。HBase适用于大数据随机读写场景,批量读取吞吐量不如HDFS,不适合批量数据分析场景。

2.使用场景

现实中可以根据应用场景选择使用的存储组件。但是如果既需要大数据随机读写,又需要批量数据分析场景,因为没有单一组件满足此类业务要求。因此需要将HBase和HDFS来组合满足此类需求,也就是数据实时写入和更新到HBase,定时(通常T+1)将HBase数据导出到HDFS用于做分析。

3.多组件组合缺点

通过HBase和HDFS组合虽然满足了随机读写和OLAP分析场景,但是有以下缺点:

3.1 架构复杂

需要HBase和HDFS两个组件,并且涉及到数据在两个组件之间的流转,数据一致性和运维成本高。每个环节都需要保证高可用性,数据在两个组件都需要维护多副本,存储空间有一定浪费。

3.2 时效性低

数据写入到HBase后,需要等待一个周期后才能进入HDFS进行OLAP操作,因此时效性低。

3.3 应对数据更新

如果已经导入到HDFS数据后,又在HBase中进行了更新,这个针对数据的更新在HDFS中比较难以处理。一个方案就是将所有数据重新导出到HDFS,但是代价过高。

二、Kudu概述

Apache Kudu是由Cloudera开源的存储引擎,是一个满足随机读写、又支持OLAP分析的大数据存储引擎,同时避免上述组合架构缺点。

1.设计特点

  • 与MapReduce,Spark以及Hadoop生态系统中其他组件进行友好集成
  • 可与ClouderaImpala集成,替代目前Impala常用的HDFS+Parquet组合
  • 灵活的一致性模型
  • 顺序写和随机写并存的场景下,仍能达到良好的性能
  • 高可用,使用Raft协议保证数据高可靠存储
  • 结构化数据模型

2.框架适用场景

  • 实时数据更新
  • 时间序列相关的应用,海量历史数据查询,必须非常快地返回关于单个实体的细粒度查询。
  • 实时预测模型的应用

3.框架不适用场景

只追求随机读写或者OLAP分析的场景,或者对OLAP分析容忍一定的延迟。

三、数据模型与存储

kudu表是列式存储,其中表是有结构表与关系型数据库类似。表中必须有一个唯一不重复主键。
kudu表根据hash或者range拆分成多个tablet。与kafka的partition类似,tablet也是采用副本机制来保障可靠性,由一个tablet leader和多个tablet follower组成。
在这里插入图片描述

1.Table

kudu表是schema的、一个表有多行组成,每行有固定的列组成。列具有名称、数据类型、大小等。一行有一个唯一的铸剑列。

2.Tablet

一个表会按照Hash或者range分成多个tablet,每个tablet包含元数据MetaData和数据存储RowSet。tablet是调度和负责均衡的基本单位,表的tablet会有多个副本分布到多个TabletServer上,其中一个为tablet leader负责读和写操作,其他为tablet follower只负责读操作。

3.MetaData

MetaData文件记录的是DiskRowSet的元信息,主要包括哪些block及block在data中的位置。

4.RowSet

RowSet是进行数据存储的单元,包括一个MemRowSet和零到多个DiskRowSet。MemRowSet存储新增数据,当MemRowSet写满后会flush到磁盘生成一个或多个DiskRowSet。

5.MemRowSet

MemRowSet存储的是新增数据,数据采用行存储、基于Primary key有序。默认写满1G或者120s会刷新到磁盘DiskRowSet中。

6.DiskRowSet

DiskRowSet采用列存储并且是不可修改的,每个DiskRowSet又分为Base Data和Delta Stores。

6.1 Base Data

MemRowSet刷盘到DiskRowSet时,这时只包含Base Data,也就是保存的都是新增数据。

6.2 Delta Stores

如何对已经刷盘的数据进行修改和删除?每个DiskRowSet生成后,在内存中都会有一个DeltaMemStores负责记录此DiskRowSet数据的后续更新和删除操作。DeltaMemStores数据刷盘后会形成一个DeltaFile文件。

四、Kudu架构图

Kudu采用的是Master/Slave架构。Kudu由管理集群元数据的Master Server节点和负责数据存储的Tablet Server节点组成。为了高可用性两种节点都是多副本形式部署,采用Raft协议保证Master Server和Tablet Server数据的容错性和一致性。通过Rafe进行副本的leader选举,leader负责接受写请求并将数据写入到其他follower副本,一旦写入的数据在大多数副本中持久化后,就会向客户确认。
在这里插入图片描述

1.Master tablet

kudu的元数据表是使用一个tablet来进行管理和存储,为了与普通tablet区分,这个tablet称为Master tablet。为了保证可靠性所以基本都是一个leader和两个follower。每个Master tablet都由一个Master Server进行管理。

2.Master Server

Master Server负责管理和保存kudu元数据的tablet。实际部署中集群中会使用多个Master Server来保证可靠性,在系统运行期间同一时刻只能有一个Master Server中的Tablet是leader。

3.Tablet Server

Tablet Server负责管理和保存kudu中表多个tablet。实际部署中集群中会使用多个Tablet Server来保证可靠性,在系统运行期间同一时刻针对同一个tablet只能有一个是leader。由于tablet leader负责写服务,tablet leader和tablet follower负责读服务,因此为了负责均衡考虑,tablet的leader会均匀分布到Tablet Server节点。

五、数据新增流程

kudu新增数据需要根据主键先校验主键是否冲突,然后才会进行写入操作。
在这里插入图片描述

1.获取Tablet元数据

首先需要知道表的元数据,也就是要知道表的tablet信息,这个信息时维护在Master Tablet Cluster集群中。
1.1 client访问Master Tablet获取表相关信息
1.2 从Master Tablet节点返回表的分区信息和表的tablet信息

2.新增数据请求

从表的tablet信息,找到tablet leader所在的Tablet Server。
2.3 向tablet所在的Tablet Server发送写入请求
2.4 Tablet Server首先查找Tablet中的memRowSet和DiskRowSet是否有相同主键,如果没有则写入到MemRowSet,如果有则返回错误。
2.7 Tablet Server返回给Client告知写入成功

3.副本写入

kudu的存储和持久化不依赖外部组件,所以kudu采用多副本写入来解决可靠性问题。
3.5 Tablet leader通知Tablet follower进行信息的写入
3.6 Tablet follower将信息本地写入成功后,会告知Tablet leader,如果多数写入成功,则认为写入成功。

六、数据更新流程

kudu数据更新需要根据主键找到数据所在的DiskRowSet或者MemRowSet,然后将更新记录存入到对应的RowSet中。这样相同的主键数据和变更记录都是保存在同一个DiskRowSet,查询特定主键时不需要遍历所有DiskRowSet,提升了查询性能。
在这里插入图片描述

1.获取Tablet元数据

跟数据新增流程一致

2.数据更新请求

从表的tablet信息,找到tablet leader所在的Tablet Server。
2.3 向tablet所在的Tablet Server发送写入请求
2.4 Tablet Server首先待更新数据所在位置

  • 位于MemRowSet
    如果数据存在MemRowSet,会将更新操作记录在行中的一个mutation链表中。在刷新落盘时会更新合并到BaseData,并生成UNDO records用于查看历史版本的数据和MVCC,UNDO records实际上也是以DeltaFile的形式存放
  • 位于DiskRowSet
    找到待更新数据所在的DiskRowset,每个DiskRowset都会在内存中设置一个DeltaMemStore,将更新操作记录在DeltaMemStore中,在DeltaMemStore达到一定大小时,flush在磁盘,形成Delta并存在方DeltaFile中。
    2.7 Tablet Server返回给Client告知写入成功

3.副本写入

跟数据新增流程一致

七、数据查询流程

kudu数据更新需要根据主键找到数据所在的DiskRowSet或者MemRowSet,然后将更新记录存入到对应的RowSet中。这样相同的主键数据和变更记录都是保存在同一个DiskRowSet,查询特定主键时不需要遍历所有DiskRowSet,提升了查询性能。
在这里插入图片描述

1.获取Tablet元数据

跟数据新增流程一致

2.数据更新请求

从表的tablet信息,找到tablet leader所在的Tablet Server。
2.3 向tablet所在的Tablet Server发送写入请求
2.4 Tablet Server首先查询数据所在位置

  • 位于MemRowSet
    根据读取操作中包含的timestamp信息将该timestamp前提交的更新操作合并到base data中,这个更新操作记录在该行数据对应的mutation链表中
  • 位于DiskRowSet
    在所有DeltaFile中找到所有目标数据相关的UNDO record和REDO records,REDO records可能位于多个DeltaFile中,根据读操作中包含的timestamp信息判断是否需要将base data进行回滚或者利用REDO records将base data进行合并更新。
    2.5 Tablet Server返回给Client告知写入成功

八、持久化

1.MemRowSet刷盘

MemRowSet存储的是新增数据,当数据写满1G或者120s会刷盘一次,然后写入到一个或者多个DiskRowSet中。

2.DeltaMemStore刷盘

DeltaMemStore存储DisRowSet数据的更新和删除操作,当增长到一定大小的时候会刷盘一次,形成一个DeltaFile文件。

3.文件合并

由于以上刷盘机制,随着时间推移Kudu中小文件会越来越多,主要是DiskRowSet中的Base data和若干DeltaFile。为了提高性能,Kudu会定期进行合并,主要包含两部分:

3.1 DeltaFile合并

由于DeltaFile过多会影响读性能,所以会定期将DeltaFile合并回到Base data。

3.2 DiskRowSet合并

如果DiskRowSet过多也会影响性能,Kudu定期会将多个DiskRowSet进行合并以提升性能,合并时会将被删除的数据进行彻底删除并且减少了文件数量。

总结

Kudu是一个满足随机读写又满足大规模数据分析的大数据存储引擎,是HDFS和HBase两者性能的一个中和。一个引擎就可以满足之前需要HDFS和HBase两个组合的场景。架构采用极简模式没有引入其他组件,主要采用Raft进行协调,采用多副本保证可靠性。数据更新和修改时会在原有DiskRowSet中操作,并采用定期合并减少文件个数,提高读性能。


参考链接

1.kudu由来、架构、数据存储结构、注意事项
2.四万字硬刚Kudu | Kudu基础原理实践小总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1303229.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring结合设计模式之策略模式

策略模式基本概念: 一个接口或者抽象类,里面两个方法(一个方法匹配类型,一个可替换的逻辑实现方法)不同策略的差异化实现(就是说,不同策略的实现类) 使用策略模式替换判断,使代码更加优雅。 …

从docker镜像提取文件

1. 从Docker镜像提取JAR文件 Docker是一种流行的容器化平台,允许开发人员将应用程序及其所有依赖关系打包到一个容器中。这使得应用程序的部署和迁移变得更加简单和可靠。在某些情况下,我们可能需要从Docker镜像中提取JAR文件,以便进行进一步…

Dubbo 的 go 语言实现迎来了 Dubbo3 版本

新版本的 dubbo-go: 全面升级 Triple 协议,兼容 gRPC、标准 HTTP 客户端,提供简单明了的 API 用于编写 RPC server 与 client,解决组件间的基本通信问题。 针对微服务场景,提供了完善的服务治理能力,这包括配置管理、可观测性、流量管控规则、生态集成与适配等的全面升级…

【华为数据之道学习笔记】3-9以特征提取为核心的非结构化数据管理

随着业务对大数据分析的需求日益增长,非结构化数据的管理逐 渐成为数据管理的重要组成部分。非结构化数据包括无格式文本、各类格式文档、图像、音频、视频等多种异构的格式文件,较之结构化数据,其更难标准化和理解,因此在存储、检…

HTML常用表单元素使用?

目录 一、常用表单元素使用的关键字二、常用表单元素使用的效果与作用(1)password : 保护用户的隐私(2) email: 输入邮件(比如QQ邮件)(3)、number : 输入框只能输入数字(4)、tel : 常用于输入电话号&#x…

阿里云国际CDN加速图文和视频类网站操作教程

假设用户A需要加速一个小型的社区网站,加速需求和相关信息如下: 网站域名:c.9he.com。 加速内容:图片和文字为主,同时包含部分视频点播内容。 加速区域:仅中国内地,因为访问该网站的终端用户都…

IDEA卡顿,进行性能优化设置(亲测有效)——情况二

问题背景与现象 IDEA今天突然显示到期,于是从同事那边搞到一个很好用的破解方式,说实话,非常方便(后续在安前码后中分享) 破解之后呢,香了一阵子,但是突然显示开始卡顿,界面几乎是…

ChatGPT/GPT4应用:文本、论文、编程、绘图等,提高工作效率及科研项目开发能力

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

UDP报文格式详解

✏️✏️✏️各位看官好,今天给大家分享的是 传输层的另外一个重点协议——UDP。 清风的CSDN博客 🛩️🛩️🛩️希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流&#xff0…

CDH6.3.2安装

文章目录 [toc]一、CM简介1、ClouderaManager的概念2、ClouderaManager的功能3、ClouderaManager的架构 二、准备清单1、部署步骤2、集群规划3、软件环境准备 三、安装清单1、操作系统iso包2、JDK包3、MySQL包4、CM和CDH包5、部署ansible 四、基础环境准备1、配置网络2、配置ho…

SiteGround如何设置WordPress网站自动更新

SiteGround Autoupdate功能会自动帮我们更新在他们这里托管的所有WordPress网站,这样做是为了保证网站安全,并且让它们一直保持最新状态。他们会根据我们选择的设置自动更新不同版本的WordPress,包括主要版本和次要版本。在每次自动更新之前&…

博士毕业需要发表几篇cssci论文

大家好,今天来聊聊博士毕业需要发表几篇cssci论文,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 博士毕业需要发表几篇CSSCI论文 背景介绍 CSSCI即“中文社会科学引文索引”,被…

Unity之OpenXR+XR Interaction Toolkit接入微软VR设备Windows Mixed Reality

前言 Windows Mixed Reality 是 Microsoft 用于增强和虚拟现实体验的VR设备,如下图所示: 在国内,它的使用率很低,一把都是国外使用,所以适配起来是相当费劲。 这台VR设备只能用于串流Windows,启动后,会自动连接Window的Mixed Reality程序,然后打开微软的增强现实门户…

css的复合选择器(有案例)

目录 复合选择器的描述 后代选择器(常用重点) 子选择器 并集选择器(重点常用) 伪类选择器 链接伪类选择器 focus 伪类选择器 知识总结: 案例实现: 复合选择器的描述 在 CSS 中,可以根…

SSL证书HTTPS保护服务

SSL证书属于数字证书的其中一种,广泛用于https协议,从而可以让数据传输在加密前提下完成,确保HTTPS网络安全是申请SSL证书必要工作。 SSL证书是主要用于https是一种加密协议,仔细观察网站地址会发现目前主流的网址前面都会有http…

2,PyCharm的下载与安装

1,PyCharm的下载 a:打开PyCharm官网,并选择Developer Tools → PyCharm Pycharm官网地址 b:点击Download c:下载完成后,会在下载文件夹中,出现“pycharm-professional-2023.3.exe”文件 2&a…

计算机网络(三) | 数据链路层 PPP协议、广播CSMA/CD协议、集线器、交换器、扩展and高速以太网

文章目录 1 数据链路基本概念和问题1.1 基本概念1.2 基本问题(1)封装成帧(2)透明传输(3)差错控制 2.数据链路层协议2.1 点对点 PPP协议2.1.1 需要实现的2.1.2 PPP组成2.1.3 帧格式2.1.4 工作流程 2.2 广播 …

线上扭蛋机小程序搭建,扭蛋与科技的完美结合

扭蛋机作为当下比较热门的一种盲盒玩法,在年轻人群体中非常受欢迎。随着经济的增长和人们生活水平的提高,人们对娱乐消费需求也在增加,扭蛋机的受众群体也在扩大。 目前线上扭蛋机小程序也获得了大众的青睐,扭蛋机小程序就是把线…

Appium 2.X(移动端自动化保姆级教程)

文章目录 Appium 2.X 安装使用1. Appium (Server)安装2. Appium Inspector (Client)安装3. SDK Manger (ADB)安装4. adb操作 Appium 2.X 安装使用 1. Appium (Server)安装 Node&am…

AI生成视频专题报告:Runway基础模型快速迭代,视频生成领域的先行者

今天分享的AI系列深度研究报告:《AI生成视频专题报告:Runway基础模型快速迭代,视频生成领域的先行者》。 (报告出品方:中泰证券) 报告共计:14页 Runway Reaserch:视频软件编辑工具提供者&…