hbase merge工具

在hbase中,表中可能会存在很多小的region,如果不需要那么多小的region,可以将他们就行合并。

代码的逻辑是将相邻的两个小region进行合并,需要注意以下几点

1、当个region不宜过大,如果两个合并后超过当个region 的最大值,比如7G+7G=14G,超过region配置的最大值10G,这样的话哪怕合并了,也会重新分裂。

2、必须要相邻的两个region,才可以执行命令,不明白原理,不可随意修改代码

复制代码
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.util.ArrayList;

public class HbaseMerge {
    public static void main(String[] args) throws Exception {
        Configuration config = HBaseConfiguration.create();
        config.set("hbase.zookeeper.property.clientPort", "2181");
        config.set("hbase.zookeeper.quorum", "h1,h2,h3");
        Connection connection = ConnectionFactory.createConnection(config);
        Table table = connection.getTable(TableName.valueOf("hbase:meta"));


        //merge表名
        String tableName = "库名:表名";

        Admin admin = connection.getAdmin();

        Scan scan = new Scan();
        scan.withStartRow(Bytes.toBytes(tableName));
        scan.withStopRow(Bytes.toBytes(tableName + "_"));

        ResultScanner scanner = table.getScanner(scan);

        ArrayList<String> regions = new ArrayList<>();


        for (Result result : scanner) {
            String[] split = result.toString().split("\\./");

            if (split.length > 1) {
                String s = split[0];
                String[] split1 = s.split("\\.");
                String region = split1[split1.length - 1];
                regions.add(region);

            }
        }

        System.out.println("共有region: " + regions.size() + "个-----------------");


        for (int i = 0; i < regions.size() - 1; i += 2) {
            String region1 = regions.get(i);
            String region2 = regions.get(i + 1);
            try {
                admin.mergeRegions(region1.getBytes(), region2.getBytes(), false);
                System.out.println(region1 + " - " + region2 + " merge is ok");
            } catch (Exception e) {

                System.out.println(region1 + " - " + region2 + " merge is fail fail fail");
            }
        }


        //admin.majorCompact(TableName.valueOf(tableName)); 执行major,看是否需要开启

        admin.close();
        connection.close();


    }
}
相关推荐
马尔代夫哈哈哈2 小时前
Spring IoC&DI
数据库·sql
液态不合群3 小时前
[特殊字符] MySQL 覆盖索引详解
数据库·mysql
计算机毕设VX:Fegn08954 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
瀚高PG实验室4 小时前
PostgreSQL到HighgoDB数据迁移
数据库·postgresql·瀚高数据库
打码人的日常分享5 小时前
智能制造数字化工厂解决方案
数据库·安全·web安全·云计算·制造
三水不滴5 小时前
Redis 过期删除与内存淘汰机制
数据库·经验分享·redis·笔记·后端·缓存
编程彩机5 小时前
互联网大厂Java面试:从Java SE到大数据场景的技术深度解析
java·大数据·spring boot·面试·spark·java se·互联网大厂
-孤存-6 小时前
MyBatis数据库配置与SQL操作全解析
数据库·mybatis
不是很大锅6 小时前
卸载TDengine
大数据·时序数据库·tdengine
qyr67896 小时前
深度解析:3D细胞培养透明化试剂供应链与主要制造商分布
大数据·人工智能·3d·市场分析·市场报告·3d细胞培养·细胞培养