Hbase Region合并

业务场景:

Kafka+SparkStreaming+Hbase
由于数据大量的迁移,再加上业务的改动,新增了很多表,导致rerigon总数接近4万(36个节点)

组件版本:

Kafka:2.1.1

Spark:2.2.0-cdh5.12.0

Hbase:1.2.0-cdh5.12.0

问题发现:

CDH界面较多关于web服务器相应时间过长,和队列刷新速度较慢。
streaming界面,每隔一段时间就会需要较长的处理时间

解决过程:

【1】

首先把一些业务不需要的表disable掉,region下线,最后还剩2.5万个线上region,随后CDH页面无异常信息了,并且streaming处理时间都比较正常了(四类业务表现都相同)

 

【2】

由于业务上每月都会有新表,所以以上的操作不能满足,经过研究,可以在保证表的请求量不高的情况下,把当前表的region合并,从而减少region数。而且Hbase集群目前已经停掉了region自动分裂,所以不会有在合并完之后再分裂的情况。

禁用分裂机制:

 集群配置:

  理论上讲,现在regionserver分配了64G内存,0.8的写入高水位线,也就是64*0.8=51.2G用作写,每个memstore占用128M,这么算的话理论上也就每个server400多个region的时候,不会造成过早的flush,总共下来400*36个,现在已经是超负荷运行了,所以还需要将Region进行合并。

合并代码:

public class Hbase_Merge {

    public static void main(String[] args) throws Exception {

        Configuration conf = HBaseConfiguration.create();

        conf.set("hbase.zookeeper.property.clientPort", "2181");

        conf.set("hbase.zookeeper.quorum", "zk1,zk2,zk3");

        HBaseAdmin admin = new HBaseAdmin(conf);

        List<HRegionInfo> regions = admin.getTableRegions(TableName.valueOf("TableName"));

        Collections.sort(regions, new Comparator<HRegionInfo>() {

            @Override

            public int compare(HRegionInfo o1, HRegionInfo o2) {

                return Bytes.compareTo(o1.getStartKey(),o2.getStartKey());

            }

        });

        HRegionInfo regionInfo =null;

        for (HRegionInfo r : regions){

            int index =regions.indexOf(r);

            if(index %2 == 0){

                regionInfo = r;

            }else{

                System.out.println("start to merge two regions,NUM:"+index+" and "+(index+1) );

                admin.mergeRegions(regionInfo.getEncodedNameAsBytes(),r.getEncodedNameAsBytes(),false);

                System.out.println("merge two regions finished");

            }

        }

        System.out.println("merge all regions finished");

    }

}

结果:

 最终Region数大量减少,Streaming任务也恢复正常。

后记:

IO高峰为合并region导致的,入Hbase的程序都将受到影响,Streaming批处理时间增长,中间还伴随着Region-In-Transition(此处影响不大)

建议:避开业务高峰期对Region合并
 

 

 

 

这些都是之前存到有道上了,搬到这里费了好大的劲,还得不断学习,哈哈

posted @   小跑、追幸福  阅读(1308)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示