客快物流大数据项目(四十三):kudu的分区方式
Posted Lansonli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了客快物流大数据项目(四十三):kudu的分区方式相关的知识,希望对你有一定的参考价值。
目录
三、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博客🙉
- 📢大数据系列文章会每天更新,停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
以上是关于客快物流大数据项目(四十三):kudu的分区方式的主要内容,如果未能解决你的问题,请参考以下文章
客快物流大数据项目(四十六):Spark操作Kudu dataFrame操作kudu