Java 操作 kudu--分区策略 | 学习笔记

简介: 快速学习 Java 操作 kudu--分区策略

开发者学堂课程【NoSQL 数据库 Kudu 教程Java 操作 kudu--分区策略学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/723/detail/12907


Java 操作 kudu--分区策略


内容介绍:

一、 kudu 分区方式

二、 Range Partitioning(范围分区)

三、multi partition(多级分区)

 

一、kudu 分区方式

kudu 当中表的分区方式,也称之为分区策略,所谓的分区方式指的是 kudu 当中一个表,最终会被划分成若干个叫做tablet 的,这样的数据单元,tablet 会存储在各个不同的 tablet server 上,所关心的是一个表当中有很多行记录,这些行是按照何种规则进行划分的,比如说有一张表099,作为的主键 ID,到底这100条数据是随机,还是按照某种规则,还是按照某种范围,这一个决定一行季度属于哪一个 tablet 就是所谓的分区规则方式的问题,分区指定的方式,是在建表的时候,通过表的 option 来设置的当下的 kudu 它支持三种分区的方式。

第一种,叫做 range partitioning 范围分区,所谓的 range 的根据存入插入的数据量,划定一个范围,比如说010,作为一个1020,2030,3040,这样可以把数据均衡平均地存储在各个不同的服务器上,避免出现一个负载不均衡的情况,这是一种规则。

第二种叫做 hash 分区,hash 本身是一个算法,指定某个字段或者某个力,然后,根据他的 hash 值对指定的个数进行取余取模运算,然后也可以分配到各个不同的分区当中,可以对的数据随机分散是有帮助的,还可以避免所谓的热点问题,剪辑的热点问题。

第三种方式,叫做多级分区 multilevel,就是在上面两个分区的基础上,做一个整合,既采用范围分区,又采用 hash分区,相当于在分区的基础上继续分区,择其两个优点,选择同时,尽量减少每个的缺点。

首先打开的 ID,通过之前的建表语句,在之前进行创建表的时候,在最终这里 option 当中去指定了根据 ID 采用hash 分区,做一个相关的验证,把这个表达中的逻辑全部给它复制过来,重新写一个新的方法,写一个 attest,叫做public void Test partition ,首先看第一个,先把这个代码给它粘贴过来,这里边的表也是方便重新创建一个新的表,第一个表叫做 T hash partition,事实上的 hash 分区,也是 kudu 当中默认的分区方式,接下来把它拿过来,这里报错应该是一个异常问题,选择他把异常给他抛一下,如果这个表不存在,创建这个表,上面的这些都不用动,指定表的 scheme 信息,哪些字段,哪些类型,创建 option 在这里,创建了一个表的 tab options,在无形当中,指定了所谓的字段,所以这里很重要,以下叫指定用于分区的字段,是以 ID 为例,指定好段之后再来看一下,要通过下面这个 API 把刚才的一个字段 partition list,以及分区的个数六设置到 options 当中,相当于最终每条记录 ID 都要进行hash kudu 的值,对六进行取模来进行分配,就可以得到一个新的一个表,

image.png

执行这个结果右键选择做一个 run 运行,等这里执行,这边出现绿色退出状态码为0,执行成功打开的浏览器,在这边做一个刷新,选择的 tables,这叫 T hash partition,点击表后面链接的来看一下,这后面就写了字段,重点看这个partition scheme,根据 ID hash 分到六个分区当中,这就是第一种。

image.png


二、Range Partitioning(范围分区)

接下来看一下第二个叫做范围 range 分区,比如现在再创立个表,叫做 t range partitionrange 就是首先想一下这个 range 一个范围,就自闭意味着有一个上下边界的问题,接下来做个演示,把这一段代码给注释掉,首先第一件事,要指定 range 分区的字段,第一步指定 range 分区的字段,要范围分区根据分区字段分区范围,用的叫做 table options,sight range parting club 是指定分区的字段,这个字段就是 parting list ,这是第一个,接下来看一下要指定分区的策略,指定分区的策略,首先给大家画一下,希望最终达到一个什么样的范围分析效果,0开始大于等于0ID,根据 ID 来分的,然后,小于10,这是一个 range 范围,比如说最终希望得到这样效果,然后从10到的20,这是一个,从2030,这是一个 range,然后从30到的40是一个 range,从40到最终的50号,进行 range 肯定会有上下边界的问题,先看一下 API,比如在这里,这里用的是 tableoption.add range,后面有两个选项,一个叫做lower,一个叫做 upper,只不过不是用 int 类型表示的,而是用这个 partitioning lower 一个类型来分装的,就是上下边界,先不设置它,接下来数据只能做个循环,比如下届是从0开始的,0,10,2030这里首先第一个变量 ink 叫做count, count 等于0首先从0开始,接下来,针对来做一个循环,比如这里从012345个分区,所以第一个变量 I=0,然后从0开始,i<=5,应该没有五个分区,012345个分区,然后下来干什么,i++,在这当中,后面继续写 i==i<5,i++首先是准备下届,上下届,方法应该发现它里面是叫做 partition lower,不是一个 int 类型,所以不能临时把这样往里面放 partition,从的 scheme 当中获得,scheme 的一个方法,叫做 new 一个 partition Row,可以获得下届的,比如首先来个 lower,下届,lower 怎么获取,lower.add Int,需要指定哪个字段,是根据 int 来进行划分的,当前 int 是不是把 count 起来可以了,count 0,是不是现在下届是0,接下来还要准备一个上届,在通过的 scheme new 一个 partial row 这就来个 apper ,这里面也需要去指定一下的 apper.addint,首先这个字段标出来还是 ID,这是下届是0,上届是10,怎么变成10,当届时的是0,所以这里可以做这么操作,那这个 count,做一个加时操作,加等于10经过这步操作之后,再把 count 拿过来说它变成10,因此第一次的时候他就是0,到10下来,它是10,然后变成20,这样就满足了需求了,接下来才把这一个给它放到这里面好,来看一下设置之后,里面需要一个叫做apper,应该是一个 lower,一个下届,然后一个 apper 上届,这样就完成了一个范围的一个指定,所以这里简单写两个注释,指定 range 的下届,指定 range 的上届,最终鉴别的效果叫做 T range partition ,表达 schema 信息一样没有区别,run 等他执行,首先报错了,报错叫做 unknown column int,不认识这个字段叫做 int,应该写 ID,性别的差别要注意,接下来再重新装运,叫 ID,不可以写个 int,这时候字形已经成功了,

image.png

已经绿色了下来,打开浏览器看一下,做一个刷新 tables 来看,多了一个 t range partition,点开这个表,是不是这种效果,分区规则是根据的 ID range 的一个划分,010的这一个范围,1020,2030,50,这样就做了一个划分,下来把数据做一个平均分配,这是第二种分区方式,叫做 range partition,第三种叫做多级分区,相当于是分区计算机一分区,比如说进行 range 区分,分为010作为一个分区了,010当中能不能根据 hash 再进行划分,也是可以的,分区记忆分区。

image.png


三、multi partition(多级分区)

创建第三个表叫做 t multi partition,这个表名也写一下,在参加表的时候,只要注意,把上面这个表这个 hash,打开之后,把它设为三个,根据的 ID,既有的 hash 又有的 range,根据 hash ID 分为三个部分,然后根据 range 分为这几个范围,直接来右键 run 运行再去看一下结果,找一个运行结束,回到浏览器做一个刷新,有了 multi partition,点开大家发现,首先看这个 scheme 信息 hash ID,根据 ID 分为三个部分,然后 Range 的范围是0到10一样,这种猜想 hash 是分为三个,range 是分为五个,0到10,1个,到底最后几个,来看最后结果 count 是最终的分析结果是15个,你能猜出来为什么15个,首先把数据根据这个 range 分为这么几个部分,1、2、3、4、5,5个部分,每个部分当中再根据 hash 再划分为三个部分,所以说最终是每个当中分为三个部分,所以这种方式,叫做多重分区,多个分区,相当于结合了两个分区的优点,在实际过程当中,可以结合具体场景来进行选择,默认情况下叫做 hash,根据你指定的字段 hash kudu 值模除与分区的个数把数据做一个分配,这就是 kudu 当中分区的一个概念,决定了一条记录属于哪一个 tablet。

image.png

相关文章
|
16天前
|
消息中间件 监控 算法
Java性能优化:策略与实践
【10月更文挑战第21】Java性能优化:策略与实践
|
27天前
|
存储 算法 Java
深入理解Java虚拟机(JVM)及其优化策略
【10月更文挑战第10天】深入理解Java虚拟机(JVM)及其优化策略
38 1
|
1月前
|
消息中间件 存储 Java
大数据-58 Kafka 高级特性 消息发送02-自定义序列化器、自定义分区器 Java代码实现
大数据-58 Kafka 高级特性 消息发送02-自定义序列化器、自定义分区器 Java代码实现
41 3
|
1月前
|
分布式计算 Java 大数据
大数据-147 Apache Kudu 常用 Java API 增删改查
大数据-147 Apache Kudu 常用 Java API 增删改查
25 1
|
1月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
从Java环境的搭建到实际代码的编写,从基本用法的讲解到底层原理的剖析,深度解析Java基础知识。本文是《Java学习路线》专栏的起始文章,旨在提供一套完整的Java学习路线,覆盖Java基础知识、数据库、SSM/SpringBoot等框架、Redis/MQ等中间件、设计模式、架构设计、性能调优、源码解读、核心面试题等全面的知识点,并在未来不断更新和完善,帮助Java从业者在更短的时间内成长为高级开发。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(基础篇)
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
1月前
|
Java 数据安全/隐私保护
java学习笔记(基础习题)
java学习笔记(基础习题)
31 0
|
1月前
|
Java 程序员 开发工具
java学习笔记
java学习笔记
34 0
|
2月前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
本文是“Java学习路线”中Java基础知识的高级篇,主要对多线程和反射进行了深入浅出的介绍,在多线程部分,详细介绍了线程的概念、生命周期、多线程的线程安全、线程通信、线程同步,并对synchronized和Lock锁;反射部分对反射的特性、功能、优缺点、适用场景等进行了介绍。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
下一篇
无影云桌面