hbase merge工具

news/2024/9/24 22:12:22/

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.ppmy.cn/news/1529988.html

相关文章

2024全国研究生数学建模竞赛(数学建模研赛)ABCDEF题深度建模+全解全析+完整文章

全国研究生数学建模竞赛&#xff08;数学建模研赛&#xff09;于9月21日8时正式开赛&#xff0c;赛程4天半&#xff0c;咱这边会在开赛后第一时间给出对今年的6道赛题的评价、分析和解答。包括ABCDEF题深度建模全解全析完整文章&#xff0c;详情可以点击底部的卡片来获取哦。 …

数组中两个字符串的最小距离问题

目录 一题目&#xff1a; 二思路&#xff1a; 三代码&#xff1a; 一题目&#xff1a; 牛客网题目链接&#xff1a;数组中两个字符串的最小距离_牛客题霸_牛客网 二思路&#xff1a; 一开始就是二话没想看到时间复杂度是o(N)就想到肯定不能直接来回遍历去寻找&#xff0c…

【Kubernetes】日志平台EFK+Logstash+Kafka【理论】

一&#xff0c;日志处理方案 方案一&#xff0c;【EFK】&#xff1a;Elasticsearch Fluentd&#xff08;或Filebeat&#xff09; Kibana Elasticsearch&#xff08;简称&#xff1a;ES&#xff09;&#xff1a;实时&#xff0c;分布式存储&#xff0c;可扩展&#xff0c;日…

35岁程序员转行大模型岗位:详细学习路线,从零基础到精通2024最新

随着人工智能&#xff08;AI&#xff09;和深度学习技术的飞速发展&#xff0c;越来越多的技术人才开始考虑转向这一前沿领域。对于已经拥有丰富编程经验但希望转型到大模型开发领域的35岁程序员来说&#xff0c;虽然面临一定的挑战&#xff0c;但也具备了坚实的基础。本文将提…

【flex-shrink】计算 flex弹性盒子的子元素的宽度大小

计算以下两个子div的宽度大小&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

编译 Android 11源码

参考小米6 lineageos官方编译文档&#xff1a;https://wiki.lineageos.org/devices/sagit/build 单独编译 framework 以LineageOS18.1&#xff08;Android 11&#xff09;为例&#xff1a; 1、在源码根目录执行&#xff1a; make framework-minus-apex 2、用生成的framewo…

【Docker】如何让docker容器正常使用nvidia显卡

首先确保宿主机正常安装了显卡驱动 nvidia-smi打印显卡信息如下&#xff1a; 安装nvidia-container-toolkit工具 sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit sudo systemctl restart docker运行如下命令测试显卡是否在容器内可用 …

【ARM】A64指令介绍及内存屏障和寄存器

A64指令集介绍 ISA : Instruction System Architecture 指令集总结 跳转指令 使用跳转指令直接跳转&#xff0c;跳转指令有跳转指令B&#xff0c;带链接的跳转指令BL &#xff0c;带状态切换的跳转指令BX。 B 跳转指令&#xff0c;跳转到指定的地址执行程序。 BL 带链接的跳…