客快物流大数据项目(四十三):kudu的分区方式(代码片段)

Lansonli Lansonli     2022-12-01     772

关键词:

目录

kudu的分区方式

一、Hash Partitioning (哈希分区)

二、Range Partitioning (范围分区) 

三、​​​​​​​Multilevel Partitioning (多级分区)


kudu的分区方式

为了提供可扩展性,Kudu 表被划分为称为 tablets 的单元,并分布在许多 tablet servers 上。行总是属于单个tablet 。将行分配给 tablet 的方法由在表创建期间设置的表的分区决定。

kudu提供了3种分区方式。

一、​​​​​​​Hash Partitioning (哈希分区)

哈希分区通过哈希值将行分配到许多 buckets ( 存储桶 )之一; 哈希分区是一种有效的策略,当不需要对表进行有序访问时。哈希分区对于在 tablet 之间随机散布这些功能是有效的,这有助于减轻热点和 tablet 大小不均匀。

/**
 * 测试分区:
 * hash分区
 */
@Test
public void testHashPartition() throws KuduException 
    //设置表的schema
    LinkedList<ColumnSchema> columnSchemas = new LinkedList<ColumnSchema>();
    columnSchemas.add(newColumn("CompanyId", Type.INT32,true));
    columnSchemas.add(newColumn("WorkId", Type.INT32,false));
    columnSchemas.add(newColumn("Name", Type.STRING,false));
    columnSchemas.add(newColumn("Gender", Type.STRING,false));
    columnSchemas.add(newColumn("Photo", Type.STRING,false));
    //创建schema
    Schema schema = new Schema(columnSchemas);
    //创建表时提供的所有选项
    CreateTableOptions tableOptions = new CreateTableOptions();
    //设置副本数
    tableOptions.setNumReplicas(1);
    //设置范围分区的规则
    LinkedList<String> parcols = new LinkedList<String>();
    parcols.add("CompanyId");
    //设置按照那个字段进行range分区
    tableOptions.addHashPartitions(parcols,6);
    try 
        kuduClient.createTable("dog",schema,tableOptions);
     catch (KuduException e) 
        e.printStackTrace();
    
    kuduClient.close();

二、Range Partitioning (范围分区) 

范围分区可以根据存入数据的数据量,均衡的存储到各个机器上,防止机器出现负载不均衡现象

 * 测试分区:
 * RangePartition
 */
@Test
public void testRangePartition() throws KuduException 
    //设置表的schema
    LinkedList<ColumnSchema> columnSchemas = new LinkedList<ColumnSchema>();
    columnSchemas.add(newColumn("CompanyId", Type.INT32,true));
    columnSchemas.add(newColumn("WorkId", Type.INT32,false));
    columnSchemas.add(newColumn("Name", Type.STRING,false));
    columnSchemas.add(newColumn("Gender", Type.STRING,false));
    columnSchemas.add(newColumn("Photo", Type.STRING,false));
    //创建schema
    Schema schema = new Schema(columnSchemas);
    //创建表时提供的所有选项
    CreateTableOptions tableOptions = new CreateTableOptions();
    //设置副本数
    tableOptions.setNumReplicas(1);
    //设置范围分区的规则
    LinkedList<String> parcols = new LinkedList<String>();
    parcols.add("CompanyId");
    //设置按照那个字段进行range分区
    tableOptions.setRangePartitionColumns(parcols);
    /**
     * range
     *  0 < value < 10
     * 10 <= value < 20
     * 20 <= value < 30
     * ........
     * 80 <= value < 90
     * */
    int count=0;
    for(int i =0;i<10;i++)
        //范围开始
        PartialRow lower = schema.newPartialRow();
        lower.addInt("CompanyId",count);
        //范围结束
        PartialRow upper = schema.newPartialRow();
        count +=10;
        upper.addInt("CompanyId",count);
        //设置每一个分区的范围
        tableOptions.addRangePartition(lower,upper);
    
    try 
        kuduClient.createTable("student",schema,tableOptions);
     catch (KuduException e) 
        e.printStackTrace();
    
    kuduClient.close();

三、​​​​​​​Multilevel Partitioning (多级分区)

Kudu 允许一个表在单个表上组合多级分区。

当正确使用时,多级分区可以保留各个分区类型的优点,同时减少每个分区的缺点 需求.

/**
 * 测试分区:
 * 多级分区
 * Multilevel Partition
 * 混合使用hash分区和range分区
 *
 * 哈希分区有利于提高写入数据的吞吐量,而范围分区可以避免tablet无限增长问题,
 * hash分区和range分区结合,可以极大的提升kudu的性能
 */
@Test
public void testMultilevelPartition() throws KuduException 
    //设置表的schema
    LinkedList<ColumnSchema> columnSchemas = new LinkedList<ColumnSchema>();
    columnSchemas.add(newColumn("CompanyId", Type.INT32,true));
    columnSchemas.add(newColumn("WorkId", Type.INT32,false));
    columnSchemas.add(newColumn("Name", Type.STRING,false));
    columnSchemas.add(newColumn("Gender", Type.STRING,false));
    columnSchemas.add(newColumn("Photo", Type.STRING,false));
    //创建schema
    Schema schema = new Schema(columnSchemas);
    //创建表时提供的所有选项
    CreateTableOptions tableOptions = new CreateTableOptions();
    //设置副本数
    tableOptions.setNumReplicas(1);
    //设置范围分区的规则
    LinkedList<String> parcols = new LinkedList<String>();
    parcols.add("CompanyId");
    //hash分区
    tableOptions.addHashPartitions(parcols,5);
    //range分区
    int count=0;
    for(int i=0;i<10;i++)
        PartialRow lower = schema.newPartialRow();
        lower.addInt("CompanyId",count);
        count+=10;
        PartialRow upper = schema.newPartialRow();
        upper.addInt("CompanyId",count);
        tableOptions.addRangePartition(lower,upper);
    
    try 
        kuduClient.createTable("cat",schema,tableOptions);
     catch (KuduException e) 
        e.printStackTrace();
    
    kuduClient.close();

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢大数据系列文章会每天更新,停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

客快物流大数据项目(四十二):java代码操作kudu(代码片段)

目录Java代码操作Kudu一、构建maven工程二、导入依赖三、​​​​​​​创建包结构四、​​​​​​​初始化方法五、​​​​​​​创建表六、​​​​​​​插入数据七、​​​​​​​查询数据八、修改数据九、​​​... 查看详情

客快物流大数据项目(七十三):impala数据导入方式

文章目录Impala数据导入方式一、loaddata二、insertintovalues三、insertintoselect四、createasselectImpala数据导入方式一、loaddata 查看详情

客快物流大数据项目(七十六):使用impala对kudu进行dml操作

文章目录使用Impala对kudu进行DML操作一、将数据插入Kudu表 查看详情

客快物流大数据项目(九十三):clickhouse的replacingmergetree深入了解

文章目录ClickHouse的ReplacingMergeTree深入了解一、创建ReplacingMergeTree表的说明二、创建ReplacingMergeTree引擎的表 查看详情

客快物流大数据项目(七十九):impala映射kudu表(代码片段)

文章目录Impala映射kudu表一、​​​​​​​​​​​​​​登录Hue页面1、选择Impala2、登录Hue页面二、选择Impala执行引擎1、选择Impala执行引擎2、进入编写执行sql语句窗口三、执行sql语句映射Kudu表Impala映射kudu表一、​​​​​... 查看详情

客快物流大数据项目(七十七):使用impala对kudu更改表属性操作(代码片段)

文字目录使用Impala对kudu更改表属性操作一、重命名Impala映射表二、重新命名内部表的基础Kudu表三、​​​​​​​将外部表重新映射到不同的Kudu表四、更改KuduMaster地址五、将内部管理的表更改为外部使用Impala对kudu更改表属性... 查看详情

客快物流大数据项目(八十二):kudu的读写原理

Kudu的读写原理一、​​​​​​​工作模式Kudu的工作模式如下图,有些在上面的内容中已经介绍了,这里简单标注一下:每个kudutable按照hash或range分区为多个tablet;每个tablet中包含一个MemRowSet以及多个DiskRowSet... 查看详情

客快物流大数据项目(七十五):使用impala创建kudu表(代码片段)

文章目录使用impala创建kudu表一、impala操作kudu前的准备二、创建kudu内部表三、​​​​​​​创建kudu外部表使用impala创建kudu表一、impala操作kudu前的准备需要先启动hdfs、hive、kudu、impala使用impala的shell控制台执行命令impala-shell1、... 查看详情

客快物流大数据项目(一百):clickhouse的使用

文章目录ClickHouse的使用一、使用Java操作ClickHouse1、构建maven工程 查看详情

客快物流大数据项目学习框架

文章目录客快物流大数据项目学习框架前言一、项目简介二、功能介绍三、项目背景四、服务器资源规划五、技术亮点及价值六、智慧物流大数据平台客快物流大数据项目学习框架前言利用框架的力量,看懂游戏规则,... 查看详情

客快物流大数据项目(七十八):hue简介

文章目录Hue简介一、Hue介绍二、Hue整合大数据技术栈架构三、支持连接到的数据库四、 ​​​​​​​​​​​​​​官方网址Hue简介一、​​​​​​​Hue介绍HUE是一个开源的ApacheHadoopUI系统,早期由Cloudera开发,后... 查看详情

客快物流大数据项目(九十八):clickhouse的sql函数

文章目录ClickHouse的SQL函数一、​​​​​​​​​​​​​​类型检测函数 查看详情

客快物流大数据项目(七十四):impala的java开发

文章目录Impala的java开发一、下载impalajdbc依赖二、创建java工程三、导入pom依赖 查看详情

客快物流大数据项目(三十三):安装server和agent

安装Server和Agent一、安装Server服务yuminstall-yoracle-j2sdk1.8-1.8.0+update181-1.x86_64yuminstall-yenterprise-debuginfo-6.2.1-1426065.el7.x86_64yuminstall-ycloudera-manager-server-6.2.1-1426065.el7.x86_64yuminstall-ycloudera-manager-server-db-2-6.2.1-1426065.el7.x86_64注意:如... 查看详情

客快物流大数据项目(十九):项目环境准备

目录项目环境准备一、服务器规划​​​​​​​二、安装CentOS-7项目环境准备​​​​​​​一、服务器规划在大数据物流系统中,一般先在确立一套通用的、可扩展的计算平台,然后基于该平台统一软件栈,最后... 查看详情

客快物流大数据项目(九十四):clickhouse的summingmergetree深入了解

文章目录ClickHouse的SummingMergeTree深入了解一、创建SummingMergeTree引擎表的的语法二、创建Su 查看详情

客快物流大数据项目(九十五):clickhouse的collapsingmergetree深入了解

文章目录ClickHouse的CollapsingMergeTree深入了解一、创建CollapsingMergeTree引擎表的语法二、创建CollapsingMergeTree引擎的表 查看详情

客快物流大数据项目(七十):impala入门介绍

文章目录Impala入门介绍一、impala基本介绍二、Impala与hive的关系三、​​​​​​​Impala与hive的异同四、​​​​​​​​​​​​​​Impala的优缺点1、​​​​​​​​​​​​​​优点2、​​​​​​​​​​​​​​缺... 查看详情