Hbase手动split、compact、merge、批量合并分区

本文介绍了如何使用HBase Shell命令手动执行Region的split、compact和merge操作,以及提供了一个Java代码示例,用于批量合并Region。通过调整Region的大小,可以有效地平衡HBase集群的负载,解决Region倾斜问题。此外,还提到了表的major_compact操作,用于压缩数据。

Hbase手动split、compact、merge、批量合并分区

hbase shell命令手动Split:
// 手动 split region
split 'TABLENAME'
split 'REGIONNAME'
split 'ENCODED_REGIONNAME'
split 'TABLENAME','splitKey'
split 'REGIONNAME','splitKey'
split 'ENCODED_REGIONNAME','splitKey'
hbase shell命令合并:
// 手动 merge region
// 合并相邻的两个Region
merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME'
// 强制合并两个Region
merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME', true
批量合并分区 merge_regions (java代码参考)
import java.io.IOException;
import java.net.URI;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.util.Bytes;
 
/**
 * 使用hbase java api对hbase的特定表按条件进行合并,由于未找到合适的api,所以hbase的region大小从hdfs上获取,如果有java api能实现该功能希望大家告知
 * 阀值:lower_size:小region,直接合并,默认100M
 *     upper_size:大region,按条件合并,默认5G
 *     region_max_size:最大region大小,建议和region split的阀值大小相同,默认10G
 *     least_region_count:最少region个数,默认10个
 * 算法:首先从hdfs的hbase存储路径获得table的region名称和size对应关系的map,然后通过api获取排序好的region实例List,然后遍历该List进行两两合并
 * 规则:(待合并的region定义为A,B两个region)
 * 当前region大小小于upper_size:
 * 如果A region为空,则将当前region赋值给A
 * 如果A region不为空,则将当前region赋值给B,则直接调用api对A,B进行合并,成功之后清空A,B继续遍历
 * 当前region大小大于upper_size:
 * 如果A region为空,放弃处理该region,直接继续遍历
 * 如果A region不为空,并且A的大小小于lower_size或者A+当前的大小小于region_max_size,则将当前region赋值给B,则直接调用api对A,B进行合并,成功之后清空A,B继续遍历
 * @author taochy
 * 
 *
 */
public class HBaseRegionMergeUtil {
   
   
	
	//小region,直接合并,默认100M
	private static long lower_size = 100 * 1024 * 1024L;
	//大region,按条件合并,默认5G
	private static long upper_size = 5 *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值