Apache Kudu入门学习

news2025/1/14 0:42:36

目录

一、概念

二、背景

三、特点

四、架构

五、应用场景

六、kudu的模式设计

1、列设计

2、主键设计

3、分区设计

1.范围分区Range Partitioning 

2.哈希分区Hash Partitioning

3.多级分区Multilevel Partitioning


一、概念

官方概念:

Apache Kudu is an open source distributed data storage engine that makes fast analytics on fast and changing data easy.

Apache Kudu 是一个开源分布式数据存储引擎,可以轻松地对快速变化的数据进行快速分析。

官网地址:

Apache Kudu - Fast Analytics on Fast Data

二、背景

在 KUDU 之前,大数据主要以两种方式存储:

  • 静态数据:以 HDFS 引擎作为存储引擎,适用于高吞吐量的离线大数据分析场景。这类存储的局限性是数据无法进行随机的读写。
  • 动态数据:以 HBase、Cassandra 作为存储引擎,适用于大数据随机读写场景。这类存储的局限性是批量读取吞吐量远不如 HDFS,不适用于批量数据分析的场景。

当面对既需要随机读写,又需要批量分析的大数据场景时,方案如下

数据实时写入 HBase,HBase 完成实时的数据更新 ,定时(通常是 T+1 或者 T+H)将 HBase 数据写成静态的文件(如:Parquet)导入到 OLAP 引擎(如:HDFS)。

但是也有很多缺点:

  • 架构复杂。从架构上看,数据在 HBase、消息队列、HDFS 间流转,涉及环节太多,运维成本很高。最后数据在多个系统上,对数据安全策略、监控等都提出了挑战。
  • 维护成本高。用户需要在两套系统间编写和维护复杂的ETL逻辑。
  • 存储资源浪费。两套存储系统意味着占用的磁盘资源翻倍了,造成了成本的提升。并且每个环节需要保证高可用,都需要维护多个副本,存储空间也有一定的浪费。
  • 时效性低。数据从 HBase 导出成静态文件是周期性的,一般这个周期是一天(或一小时),在时效性上不是很高。
  • 难以应对后续的更新。真实场景中,总会有数据是「延迟」到达的。如果这些数据之前已经从 HBase 导出到 HDFS,新到的变更数据就难以处理了,一个方案是把原有数据应用上新的变更后重写一遍,但这代价又很高。

基于HDFS的存储技术,比如Parquet,具有高吞吐量连续读取数据的能力;而HBase和Cassandra等技术适用于低延迟的随机读写场景。Kudu的设计,就是试图在实时分析与随机读写之间,寻求一个最佳的结合。在Cloudera发布的《Kudu: New Apache Hadoop Storage for Fast Analytics on Fast Data》一文中有提及,Kudu作为一个新的分布式存储系统也是为了进一步提升CPU的适用效率。

KUDU 的定位是 「Fast Analytics on Fast Data」,是一个既支持随机读写、又支持 OLAP 分析的大数据存储引擎。

三、特点

  • 快速处理 OLAP 工作负载。

  • 强大但灵活的一致性模型,允许您基于每个请求选择一致性要求,包括严格序列化一致性的选项。

  • 结构化数据模型。

  • 同时运行顺序和随机工作负载的强大性能。

  • 与 Apache Impala 紧密集成,使其成为将 HDFS 与 Apache Parquet 结合使用的良好、可变的替代方案。

  • 与 Apache NiFi 和 Apache Spark 集成。

  • 与 Hive Metastore (HMS) 和 Apache Ranger 集成以提供细粒度的授权和访问控制。

  • 经过身份验证和加密的 RPC 通信。

  • 高可用:Tablet Servers 和 Masters 使用Raft Consensus Algorithm,保证只要有超过一半的 tablet 副本可用,tablet 就可以读写。例如,如果 3 个副本中有 2 个(或 5 个副本中的 3 个等)可用,则平板电脑可用。即使在领导者副本发生故障的情况下,只读跟随者平板副本也可以为读取提供服务。

  • 故障自动检测和自我修复:为了保持数据的高可用性,系统会检测故障的 Tablet 副本并从可用的副本中重新复制数据,因此当集群中有足够的 Tablet Server 可用时,会自动替换故障的副本。

  • 位置感知(也称为机架感知)以在相关故障的情况下保持系统可用,并允许 Kudu 集群跨越多个可用区。

  • 逻辑备份(完整和增量)和还原。

  • 多行事务(仅适用于 Kudu 1.15 版本的 INSERT/INSERT_IGNORE 操作)。

  • 易于管理和管理。

四、架构

KUDU 中存在两个角色

  • Mater Server:负责集群管理、元数据管理等功能。即tablet和表的基本信息,监听TServer的状态,TMaster之间通过raft协议进行数据同步。
  • Tablet Server:负责数据存储,并提供数据读写服务。tablet 负责这一张表的某块内容的读写,接受其他tablet leader 传来的同步信息。

Table(表)

一张talbe是数据存储在Kudu的tablet server中。表具有 schema 和全局有序的primary key(主键)。table 被分成称为 tablets 的 segments。

Tablet

一个 tablet 是一张 table连续的segment,tablet是kudu表的水平分区,类似于google Bigtable的tablet,或者HBase的region。每个tablet存储着一定连续range的数据(key),且tablet两两间的range不会重叠。一张表的所有tablet包含了这张表的所有key空间。与其它数据存储引擎或关系型数据库中的 partition(分区)相似。给定的tablet 冗余到多个 tablet 服务器上,并且在任何给定的时间点,其中一个副本被认为是leader tablet。任何副本都可以对读取进行服务,并且写入时需要在为 tablet 服务的一组 tablet server之间达成一致性。

KUDU 的核心对外 API 主要分为写跟读两部分

  • 写:Insert、Update、Delete,所有写操作都必须指定主键。
  • 读 : Scan 操作,Scan 时用户可以指定一个或多个过滤器,用于过滤数据。

五、应用场景

  • Strong performance for both scan and random access to help customers simplify complex hybrid architectures(适用于那些既有随机访问,也有批量数据扫描的复合场景)
  • High CPU efficiency in order to maximize the return on investment that our customers are making in modern processors(高计算量的场景)
  • High IO efficiency in order to leverage modern persistent storage(使用了高性能的存储设备,包括使用更多的内存)
  • The ability to update data in place, to avoid extraneous processing and data movement(支持数据更新,避免数据反复迁移)
  • The ability to support active-active replicated clusters that span multiple data centers in geographically distant locations(支持跨地域的实时数据备份和查询)

六、kudu的模式设计

1、列设计

编码类型

列压缩格式

kudu允许的压缩算法是LZ4、Snappy、zlib(gz)。默认情况下,kudu不压缩数据。通常情况下,压缩算法会提高空间利用率,但是会降低scan性能。

2、主键设计

同RDBMS一样,kudu的主键同样采用了唯一性约束。 一旦主键创建了之后便不能更改。

每个kudu表有且仅有一个由一列或多列组成的主键。主键列必须不可为空,并且不能使用bool或者浮点类型。

3、分区设计

1.范围分区Range Partitioning 

范围分区的分区方式将数据按照范围进行分类,每个partition会分配一个固定的范围,每个数据只会属于一个分区,不同的partition的范围不能有重叠,分区在表的创建阶段配置,后续不可修改,但是可以删除和新增,如果数据找不到所属的分区将会插入失败。

Range Partitioning 的优势是在数据进行批量读的时候,可以把大部分的读变成同一个 tablet 中的顺序读,能够提升数据读取的吞吐量。并且按照范围进行分区,我们可以很方便的进行分区扩展。其劣势是同一个范围内的数据写入都会落在单个 tablet 上,写的压力大,速度慢。


 

2.哈希分区Hash Partitioning

hash分区将行通过hash值分配到其中一个存储桶(buckets)中,在single-level hash partitioned tables(单机散列分区表)中,每个存储桶将对应一个tablet。在创建表的时候设置桶数。通常,主键列用作散列的列,但与范围分区一样,可以使用主键列的任何子集。

数据的写入会被均匀的分散到各个 tablet 中,写入速度快。但是对于顺序读的场景这一策略就不太适用了,因为数据分散,一次顺序读需要将各个 tablet 中的数据分别读取并组合,吞吐量低。并且 Hash 分区无法应对分区扩展的情况。

3.多级分区Multilevel Partitioning

kudu支持多层的分区方式,将hash分区和范围分区结合起来。

分区修剪(调优)
当可以通过扫描谓词确定分区可以完全过滤时,Kudu扫描将自动跳过扫描整个分区。要删除哈希分区,扫描必须在每个哈希列上包含相等谓词。要删除范围分区,扫描必须在范围分区列上包含相等或范围谓词。在多级别分区表上的扫描可以独立地利用任何级别上的分区修剪。


 

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

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

相关文章

​细说websocket - php篇 ​

下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket 套接字做了封装处理,开发者使用的时候只需要考虑数据的交互而不用处理连接的建立…

代码随想录算法训练营day59 | 503.下一个更大元素II,42. 接雨水

代码随想录算法训练营day59 | 503.下一个更大元素II,42. 接雨水 503.下一个更大元素II解法一:单调栈(两次遍历解决环状问题) 42. 接雨水解法一:单调栈(横向累计)解法二:暴力解法解法…

听说今年 “金9银10” 变成 金七银八 了...

眼下虽然才6月份,但真正的金9银10已经悄然开始。从认识的HR那得知,有些公司甚至在6月就开始布局了。。而年前偃旗息鼓的,年后也势必加速进入这波抢人大战! 因此,真的要等到9、10月份再做准备的话,就晚了。…

6-TET, SE,6-TET, SE 6-(4,6-二氯三嗪基)氨基荧光素,一种流行的氨基反应荧光探针

文章关键词:荧光反应探针 中文名称:6-TET, SE 6-(4,6-二氯三嗪基)氨基荧光素 英文名称:6-TET, SE 规格标准:10mg,25mg,50mg CAS:N/A 分子式:C25H11Cl4NO9 分子量:611.17 …

win命令窗口的常用命令

文章目录 一、端口号1、查看所有端口netstat -ano2、查看指定端口情况3、终止改端口4、 二、硬盘操作2.0、进入磁盘管理2.1、 查看磁盘2.2、 选择磁盘2.3、 查看分区2.4、 选择分区2.5、 进入分区删除分区 参考文章 一、端口号 1、查看所有端口netstat -ano netstat -ano 2、查…

【ZLM】ZLM源码阅读一

目录 初始化 RTP RTSP RTMP TCPServer的初始化 参考文档 初始化 RTP RTSP RTMP TCPServer的初始化 参考文档 本文参考: (17条消息) 《ZLToolKit源码学习笔记》(20)网络模块之TcpServer_秦时小的博客-CSDN博客 RTP https://blog.csdn.…

在嵌入式linux板子上搭建NFS服务器

使用portmapnfs-utils的工具在hi3536的linux系统上搭建nfs服务器,使用VM虚拟机中的ubuntu作为客户端挂载,进行文件的读写。 编译能够支持nfs server的内核 1.首先对linux内核进行修改,让linux内核支持nfs服务器的功能,修改方式是…

通过yum:mysql5.6-msyql5.7-mysql8.0升级之路

一 前言 mysql的yum源 https://dev.mysql.com/downloads/repo/yum/ https://dev.mysql.com/get/mysq57-community-release-el7-7.noarch.rpm服务器信息 2c2g40GB [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# una…

如何进行测试优先级划分

一般测试的优先级是从这三种情况进行划分:新模块测试、回归测试和特殊功能测试。 1、新单元模块的测试优先级 新模块单元,内部业务逻辑测试,优先级第一。新模块单元与其他模块的集成测试优先级第二。 对于新模块的测试,应以完成单…

消息队列的使用

消息队列 概念: 消息队列是System V IPC对象的一种 消息队列的使用: 发送端: 1 申请Key 2打开/创建消息队列 msgget 3向消息队列发送消息 msgsnd 接收端: 1打开/创建消息队列 msgget 2从消息队列接收消息 msgrcv …

一个29岁软件测试工程师的7年,太真实了...

当前就业环境,裁员、失业消息满天飞,好像有一份工作就不错了,更别说高薪了。其实这只是一方面,而另一方面,各大企业依然求贤若渴,高技术人才依然紧缺,只要你技术过硬,拿个年包50w不是…

Jetpack Compose 的最佳处理运行时权限的方法

Jetpack Compose 的最佳处理运行时权限的方法 如果您的应用安装在运行Android 6.0(API级别23)或更高版本的设备上,则必须按照本指南中的步骤为用户请求运行时权限。 在Jetpack Compose中获取运行时权限有两种方法。 使用Activity Result使用…

算法与数据结构-复杂度分析

文章目录 什么是大 O 复杂度表示法为什么要用大 O 复杂度表示法如何分析一段代码的时间复杂度1、只关注循环执行次数最多的一段代码2、加法法则:总复杂度等于量级最大的那段代码的复杂度3、乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积 几种常…

计算机网络常见面试题

参考:小林coding 1.TCP/IP模型 2.说一下TCP的三次握手? 第一次握手:客户端向服务端发起建立连接请求,客户端会随机生成一个起始序列号x,客户端向服务端发送的字段中包含标志位SYN=1,序列号seq=x。第一次握手前客户端的状态为CLOSE,第一次握手后客户端的状态为SYN-SENT。…

海外网红合作攻略:如何在转化率战场上脱颖而出

在当今社交媒体时代,与海外网红合作已成为企业推广产品与服务的重要途径之一。与海外网红合作不仅可以扩大品牌知名度,还能够吸引更多目标受众。然而,仅仅与网红合作并不能保证高转化率。本文Nox聚星将详细介绍几种有效的方法,帮助…

DDR跑不到速率,调整下PCB叠层就搞掂了?

高速先生成员--姜杰 关于DDR的案例,高速先生已经分享过很多期的文章了,有通过修改主控芯片的驱动解决问题的,有通过修改PCB走线的拓扑来解决问题的,也有通过调节端接电阻来解决问题的,相对于下面即将登场的解决方法而…

【Java|golang】2559. 统计范围内的元音字符串数

给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。 每个查询 queries[i] [li, ri] 会要求我们统计在 words 中下标在 li 到 ri 范围内(包含 这两个值)并且以元音开头和结尾的字符串的数目。 返回一个整数数组,其中…

Flutter学习一:安装配置

目录 1 官方文档 2 安装配置 2.1 第一步:下载配置Flutter 2.2 第二步:下载配置Android Studio 2.3 第三步:下载配置VScode 1 官方文档 在 Windows 操作系统上安装和配置 Flutter 开发环境 - Flutter 中文文档 - Flutter 中文开发者网站…

从一个励志故事,读懂网络工程师的职业规划

这个励志故事主人公的起点,是在伟创力的工厂打螺丝。 改变 他很早不上学了,出社会的时候学历和技能什么也没有,就只能去工厂打螺丝。他在伟创力的工厂打螺丝打了好多年,在接近30岁的时候,他哥跟他说:你不能…

黑客零基础从入门到精通学习成长路线(超多图、非常详细),看完这一篇就够了

前言 近几年,随着移动互联网、大数据、云计算、人工智能等新一代信息技术的快速发展,围绕网络和数据的服务与应用呈现爆发式增长,丰富的应用场景下暴露出越来越多的网络安全风险和问题。 但是,我国网络安全整体投入不高。网络安…