热门标签 | 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

 


推荐阅读
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • Unity与MySQL连接过程中出现的新挑战及解决方案探析 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • Apache Hadoop HDFS QJournalProtocol 中 getJournalCTime 方法的应用与代码实例分析 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
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社区 版权所有