热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

merge_region

一、merge_region的操作目的合并region主要是为了减少HBaseMaster的元数据管理代价。二、merge_region的操作BothMasterandRegi

一、merge_region的操作目的

合并region主要是为了减少HBase Master的元数据管理代价。

 


二、merge_region的操作

Both Master and RegionServer participate in the event of online region merges. Client sends merge RPC to the master, then the master moves the regions together to the RegionServer where the more heavily loaded region resided. Finally the master sends the merge request to this RegionServer which then runs the merge. Similar to process of region splitting, region merges run as a local transaction on the RegionServer. It offlines the regions and then merges two regions on the file system, atomically delete merging regions from hbase:meta and adds the merged region to hbase:meta, opens the merged region on the RegionServer and reports the merge to the Master.

An example of region merges in the HBase shell

 

$ hbase> merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME'

$ hbase> merge_region 'ENCODED_REGIONNAME', 'ENCODED_REGIONNAME', true

 

It’s an asynchronous operation and call returns immediately without waiting merge completed. Passing true as the optional third parameter will force a merge. Normally only adjacent regions can be merged. The force parameter overrides this behaviour and is for expert use only.

 


一般情况下不建议增加true参数“force a merge”


 

在发起merge_region之后,需要关注如下指标:

1.压缩队列

2.region数目

3.关注rit的状态

 


三、merge_region的时机

merge_region和major_compact一样,都会全量操作storefile。

但是merge_region我们选择的都是storefile大小很小的文件,因此总成的压力比major_compact要小。

 

什么情况下应该做merge_region(通过grafana:http://172.16.20.110:3000/dashboard/db/hbase-tableyun-xing-zhuang-kuang-jian-kong?orgId=1 可以看出):

1.一张表storefile总大小很小,但是region很多(多半是预分区不合理导致);


一般情况下,一个region的storefile大小在10G-50G之间,如果一个region很小,但是包含的region很多,那么就需要考虑合并region。

比如表:

gt_dw:profile_gid_app_active    大小:15G       Region数目:1321   每个region才有10M左右,明显不合理。


 

2.一张表的多个region读写很小,且region空间不大;

 


通过grafana监控可以获得每张表的平均region的大小。我们在巡检的时候发现不到1G大小的表,居然有1k+的region,这种情况应该合并。


 


四、加快region操作的办法

这里指的是快速生成merge_region命令的列表。

如果一次性需要合并1K+的region,手工拷贝将是一个非常痛苦的过程。

 

如下是用Python实现的快速生成操作命令列表的程序。

Step1:打开HBase Rest Server;

Step2:通过python语句生成merge_region的语句列表;

Step3:批量拷贝到HBase shell执行;

Step4:重复执行2和3,直到region的大小合理。

#!/usr/bin/python
# -*- coding : UTF-8 -*-
# -*-
# v1.0
# 本文档用于生成merge_region的语句,如果有N个region,结果会返回floor(N/2),直接拷贝输入hbase shell即可,可以让region数量减少一半。import requests
import jsonif __name__ == '__main__':HMasterIP = '' #设置HBase restful API Server的IPHMasterPort = '' #设置HBase restful API Server的端口HBaseTableName = '' #设置表名,需要包含namespacepre_region_id = '' # 不需要设置response = requests.get('http://{0}:{1}/{2}/regions'.format(HMasterIP, HMasterPort, HBaseTableName),headers={"Accept": "application/json"})jsoncontent = json.loads(response.content)regioncontent = jsoncontent['Region']i = 0for region in regioncontent:endKey = region['endKey']startKey = region['startKey']region_str = region['name'].decode('utf8')region_id = region_str[len(region_str) - 33:len(region_str) - 1]# print region_id,startKey.ljust(80),endKey.ljust(80)if (i % 2 == 1):print "merge_region '" + region_id + "','" + pre_region_id + "'"i = i + 1pre_region_id = region_idprint 'Region no:', i

 


推荐阅读
  • 深入解析Dubbo:使用与源码分析
    本文详细介绍了Dubbo的使用方法和源码分析,涵盖其架构设计、核心特性和调用流程。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • Logging all MySQL queries into the Slow Log
    MySQLoptionallylogsslowqueriesintotheSlowQueryLog–orjustSlowLog,asfriendscallit.However,Thereareseveralreasonstologallqueries.Thislistisnotexhaustive:Belowyoucanfindthevariablestochange,astheyshouldbewritteninth ... [详细]
author-avatar
zhanwang
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有