当前位置: 首页 > article >正文

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();


    }
}


http://www.kler.cn/news/318258.html

相关文章:

  • 【C++】list容器的基本使用
  • 项目小总结
  • 后台管理系统开箱即用的组件库!!【送源码】
  • 在视频上绘制区域:使用Vue和JavaScript实现交互式画布
  • Leetcode 第 415 场周赛题解
  • 科大讯飞智能体Python SDK接入流程
  • 矩阵快速幂
  • 【Android】模糊搜索与数据处理
  • 鸿萌数据恢复服务: 修复 Windows, Mac, 手机中 “SD 卡无法读取”错误
  • Parallels Desktop 20(Mac虚拟机) v20.0.0 for Mac 最新破解版(支持M系列)
  • 江协科技STM32学习- P18 实验-PWM输入捕获测频率PWMI输入捕获模式测频率和占空比
  • QT Creator cmake 自定义项目结构, 编译输出目录指定
  • C++ STL容器(三) —— 迭代器底层剖析
  • BFS 解决最短路问题(C++)
  • Vue3操作DOM元素
  • C++信奥老师解一本通题 1164:digit函数
  • 【每日一题】LeetCode 2207.字符串中最多数目的子序列(贪心、字符串、前缀和)
  • 基于深度学习的能源消耗预测
  • linux-vim的使用
  • 【WebLogic】WebLogic 11g 控制台模式下安装记录
  • mysql中的json查询
  • 美业门店怎么提升业绩?连锁美业门店管理系统收银系统拓客系统源码
  • docker部署clickhouse
  • 计算机毕业设计之:基于微信小程序的疫苗预约系统的设计与实现(源码+文档+讲解)
  • 基于MTL的多任务视频推荐系统
  • Linux学习 重定向 管道 流
  • 前端组件库Element UI 的使用
  • 深入解析:Kubernetes 如何使用 etcd 作为配置中心和注册中心
  • 鸿蒙OpenHarmony【小型系统基础内核(进程管理调度器)】子系统开发
  • 【爬虫】PlayWright使用说明