`

[Binospace] HBase监控之Region空洞

阅读更多

Region是HBase的资源管理单位,在Region的生命周期内,一个Region迁移会发生在如下的情况下:
1)HMaster的Load Balance,造成部分Region在RS之间迁移。默认使用了
org.apache.hadoop.hbase.master.DefaultLoadBalancer,仅仅考虑RS上Region个数的分配的均衡性。

2)Region Split过程。这部分内容可以参考
http://blog.sina.com.cn/s/blog_4a1f59bf01018tu4.html

3) RS Offline过程-〉LOG Split过程-〉Region迁移。

在如上的过程中都会涉及到Region的迁移,那么Region的迁移又要经过哪些过程呢?
为了节省文章空间,我们以HMaster的Load Balancer为例来说明。
1)HMaster启动LoadBalancer线程。balancer的period由hbase.balancer.period控制,默认是300s。

?View Code JAVA
 
int balancerPeriod =
master.getConfiguration().getInt("hbase.balancer.period", 300000);

2)关闭了BalancerSwitch、有Region处于In-Transition状态、或者RS下线的处理流程还没有走完,在这三种情况下,HMaster会停止执行Balancer过程。
3)由AssignmentManager获取每个Table的分布关系,由balancer为Region制定RegionPlan。对于DefaultLoadBalancer的实现,基本思想就是按照Region个数对于RS进行排列,首先按照Region个数多少进行排列,计算出Overload的RS需要回收的Region的个数,然后取出underload的RS中Region的个数。为了保证随机性,采取了再次打散underload RS,重组成RegionPlan(Region, RS-src,RS-dest)。

4) AssignmentManager 按照RegionPlan的要求,会执行unassign过程。在AssignmentManager的设计中,是一个由Zookeeper上hbase Node为仲裁者,RS与HMaster状态共享的过程状态机。

在AssignmentManager上提供了对于unassigned、splitlog等zk路径的Watcher,在HMaster、RS对于相应的Region状态的操作(Split)和迁移操作时,会在相应阶段时,修改对应zk路径的状态,这种节点下路径状态的改变,会被AM捕获,并启动下一个处理过程,从而最终完成处理操作。下面,我们已balancer过程来分析一下:

  • HMaster 生成RegionPlan
  • AM在ZK下unassigned路径下新建节点A,并标识A的状态为M_ZK_REGION_CLOSING
  • AM通过RPC调用RS->CloseRegion
  • RS完成Region关闭之后,修改节点A的状态为M_ZK_REGION_CLOSED
  • AM的Zookeeper Watcher监听到Node A的变化,执行ClosedRegionHandler的处理
  • AM修改节点A的状态从M_ZK_REGION_CLOSED到M_ZK_REGION_OFFLINE,根据RegionPlan,执行assignRegion操作
  • AM通过RPC调用RS-〉openRegion操作
  • RS转换节点A的状态为RS_ZK_REGION_OPENING
  • RS执行openRegion操作
  • RS执行完毕之后,修改节点A的状态从RS_ZK_REGION_OPENING到RS_ZK_REGION_OPENED
  • AM执行OpenedRegionHandler处理,删除节点A。
  • 到此,整个操作结束。

通过上面的过程,我们可以看到一个Region迁移过程,涉及到多次与ZK的操作,并且如果RegionPlan涉及到RS-src和RS-dest出现问题时,还有复杂的容错逻辑。因此,不得不说AM是HBase稳定性的关键。

问题:

在我们的大规模的应用测试中,发现了个别异常的Region。

首先,介绍发现这个问题的来由。在线上读写请求出现个别操作失败,并且失败的请求指向同一个Region A,因此,检查该Region A的位置,指向了host1,然而进入host1的onlineRegion列表中,却没有发现该Region,因此,此时出现Region不匹配的问题。更名为Region空洞。

在互联网应用中,有一个共性是,找问题比解决问题要难。只要定位到了问题,根据上面对于AM、RS、HMaster之间Region迁移的理解,很容易发现是Region迁移过程中出现了一次事故,造成了空洞现象。

我的解决方法就是增加一个定时触发的监控程序,去检查.META.表中记录的Region位置(RS)是否与RS对应上,如果RS上onlineRegion,不存在该Region,则就报警,并尝试进行unassign操作。核心代码如下:

 

?View Code JAVA
 
HTable table = new HTable(HBaseConfiguration.create(), args[0]);
HBaseAdmin admin = new HBaseAdmin(HBaseConfiguration.create());
ClusterStatus cs = admin.getClusterStatus();
Map regions = table.getRegionLocations();
if (regions != null && regions.size() > 0) {
 
   for (Map.Entry hriEntry : regions.entrySet()) {
       HRegionInfo regionInfo = hriEntry.getKey();
       HServerLoad load = cs.getLoad(ServerName.parseServerName(hriEntry.getValue().getServerName()));
       if ( load != null && load.getRegionsLoad().get(regionInfo.getRegionName()) != null ) {
          System.err.println(Bytes.toStringBinary(regionInfo.getRegionName()) + " " +
              hriEntry.getValue().getServerName());
       }
       else {
 
         System.out.println(Bytes.toStringBinary(regionInfo
               .getRegionName()) + " is Region Hole, and try to reassign again.");
         RegionAssigner.assign(regionInfo.getRegionName());
       }
    }
 }

将该程序放入crontab中,定时检查监控,并有Region重新部署功能。

文章的脚注信息由WordPress的wp-posturl插件自动生成

分享到:
评论

相关推荐

    hbase监控工具hbtop CDH6.3.2版本

    hbase监控工具hbtop CDH6.3.2版本,用于监控表、namespace的访问情况,可快速定位问题

    hbase监控文件.zip

    你可以通过监控界面查看各项指标,如CPU利用率、内存使用情况、Region分布、运行时间等。 4. **报警设置**:为了确保及时发现异常,需要设置触发器。这些触发器基于监控项的值,当达到预设阈值时,Zabbix会发送报警...

    Hbase和Hadoop JMX监控实战

    在监控HBase时,我们可以通过JMX获取HMaster、RegionServer等组件的状态,包括 Region分布、内存使用情况、StoreFile数量、请求数量等。例如,可以使用JMX客户端工具如jconsole或jmxterm来连接到运行中的HBase集群,...

    监控HBase集群

    "监控HBase集群" HBase是一个分布式的NoSQL数据库,监控HBase集群对于确保系统的高可用性和性能非常重要。在这里,我们将讨论如何使用Java代码来实现HBase集群的监控。 监控HBase集群的重要性: 在生产系统中,...

    Hbase的region合并与拆分

    1、region 拆分机制 ...当region大小大于某个阈值(hbase.hregion.max.filesize=10G)之后就会触发切分,一个region等分为2个region。 但是在生产线上这种切分策略却有相当大的弊端:切分策略对于大表和小表没有

    HBASERegion数量增多问题描述及解决方案.docx

    【HBASERegion数量增多问题描述及解决方案】 在HBase分布式数据库中,Region是表数据的基本存储单元,它将表的数据按照ROWKEY的范围进行分割。...同时,监控和定期评估Region分布状况也是维护系统健康运行的关键。

    hbase-region-inspector, HBase区域统计信息的可视化仪表板.zip

    hbase-region-inspector, HBase区域统计信息的可视化仪表板 hbase-region-inspectorHBase区域统计信息的可视化仪表板。 用法下载与HBase集群版本匹配的可执行二进制插件,添加execute权限,并使用以下命令行参数启动...

    HBase官方文档中文版-HBase手册中文版

    HBase设计目标是提供大规模数据的实时读写能力,它运行在Hadoop之上,利用HDFS作为其底层存储系统。HBase的数据模型基于稀疏、多维度、排序的映射表,其中行键、列族、列限定符和时间戳构成数据的唯一标识。 二、...

    Hbase运维手册.pdf

    本文档将为您提供Hbase运维手册,涵盖region情况检查、Region数量和大小调整、手动merge region和手动分配region等内容。 1. Region情况检查 在Hbase中,Region是存储数据的基本单位。Region的数量和大小对Hbase...

    Hbase 组件 、架构

    HBase中的Region分割(Region Split)是一个关键特性,它允许HBase在表数据量增大时,自动将一个Region分割成两个,从而保证每个Region的大小都保持在一个合理的范围。这是实现HBase高扩展性和高性能的关键机制之一...

    hbase安装,节点添加,移除,常见问题解决

    2. 移除节点:在HBase的`regionservers`文件中移除节点的主机名,然后停止该节点上的HBase服务。HBase会自动重新平衡负载到其他节点。 在运行过程中,可能会遇到各种问题,这里列举一些常见的异常处理方法: 1. **...

    HbaseTemplate 操作hbase

    HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data Hadoop是Spring框架的一部分,它提供了与Hadoop生态系统集成的工具,包括对HBase的操作支持。本篇文章...

    CDH-Hbase的安装1

    在生产环境中,还需要关注HBase的监控和维护,包括性能调优、故障排查和扩展性考虑。 总的来说,HBase在CDH中的安装是一个相对简单的流程,它依赖于已有的HDFS和Zookeeper服务。一旦安装完成,HBase就可以作为一个...

    大数据云计算技术系列 Hadoop之Hbase简介(共19页).pdf

    2. Zookeeper:Hbase依赖Zookeeper进行协调和管理,包括Master选举、Region Server状态监控和Region定位等关键任务。 3. Master:Hbase Master负责Region的分配和负载均衡,元数据的管理,以及Region Server的监控...

    hbase-2.4.17-bin 安装包

    1. 使用HBase自带的JMX监控工具或第三方监控工具(如Ambari、Grafana)监控HBase集群的性能指标。 2. 定期进行健康检查,排查可能存在的问题,如Region不均、内存溢出等。 3. 对HBase进行定期备份,以防数据丢失。...

    HBase 应用平台 balancer 功能

    HBase 是一个分布式、版本化的NoSQL数据库,它构建在Hadoop之上,专门设计用于处理大规模数据。在HBase应用平台中,`balancer`功能是至关重要的,它确保了集群中的Region分布均衡,从而优化读写性能并提高系统的整体...

    hbase安装包

    HBase,全称为Hadoop Distributed File System上的基础结构(HBase on Hadoop Distributed File System),是一种分布式的、面向列的开源数据库,它构建在Apache Hadoop文件系统(HDFS)之上,提供高可靠性、高性能...

    hbase1.0.3_part2

    6. **HBase的监控与调优**:HBase内置了丰富的监控指标,如RegionServer状态、内存使用、请求数量等,可以通过JMX、HBase Web UI或Ambari等工具进行监控。根据这些指标,可以进行性能调优,比如调整Region大小、增加...

    Hbase

    HBase 是一个分布式的、基于列族的开源数据库,它运行在 Apache Hadoop 文件系统(HDFS)之上。HBase 提供了对大规模数据集的实时读写访问,是大数据领域的重要组件。它设计用于处理PB级别的数据,适合于拥有数十亿...

    HBase源代码 hbase-0.98.23

    此外,HBase的Master节点是整个系统的管理者,`org.apache.hadoop.hbase.master.HMaster`类负责Region的分配、RegionServer的监控和故障恢复。通过分析`org.apache.hadoop.hbase.masterAssignment.RegionStates`和`...

Global site tag (gtag.js) - Google Analytics