`
nanjingjiangbiao_T
  • 浏览: 2626713 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

HBase集群出现NotServingRegionException问题的排查及解决方法

 
阅读更多

HBase集群在读写过程中,可能由于Region Split或Region Blance等导致Region的短暂下线,此时客户端与HBase集群进行RPC操作时会抛出NotServingRegionException异常,从而导致读写操作失败。这里根据实际项目经验,详细描述这一问题的发现及排查解决过程。

1. 发现问题

在对HBase集群进行压力测试过程中发现,当实际写入HBase和从HBase查询的量是平时的若干倍时(集群规模10~20台,每秒读写数据量在几十万条记录的量级),导致集群的读写出现一定程度的波动。具体如下:

1)写端抛出以下异常信息:

org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException:Failed150actions:NotServingRegionException:150times,serverswithissues:

my161208.cm6:60020,atorg.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatchCallback(HConnectionManager.java:1600)atorg.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatch(HConnectionManager.java:1376)atorg.apache.hadoop.hbase.client.HTable.flushCommits(HTable.java:916)

2)读端也抛出类似异常信息:

org.apache.hadoop.hbase.client.RetriesExhaustedException:Failedafterattempts=10,exceptions:MonOct2914:03:09CST2012,org.apache.hadoop.hbase.client.ScannerCallable@3740fb20,

org.apache.hadoop.hbase.NotServingRegionException:org.apache.hadoop.hbase.NotServingRegionException: xxxxxx,\x0FP\x8D\xC3\xDB1053223266:\x00\x00V6,1351490475989.bd68113129f07163dc25e78fba17ad6c.isclosing

以上异常,在压测期间周期性地出现,HBase集群由此出现了短暂的不可服务期。

2. 排查问题

通 过查看HBase Master运行日志,结合客户端抛出异常的时刻,发现当时HBase集群内正在进行Region的Split和不同机器之间的Region Balance,那么,为什么会周期性频繁触发以上过程呢?而且是发生在压测期间(数据量与平时相比大几倍)。下面结合表的设计来分析一下:

1) 由于表中rowkey有时间字段,因此每天都需要新创建Region,同时由于写入数据量大,进一步触发了HBase的Region Split操作,这一过程一般耗时较长(测试时从线上日志来看,平均为10秒左右,Region大小为4GB),且Region Split操作触发较为频繁;

2)同时由于Region Split操作导致Region分布不均匀,进而触发HBase自动做Region Balance操作,Region迁移过程中也会导致Region下线,这一过程耗时较长(测试时从线上日志来看,平均为20秒左右)。

3. 解决问题

首先,从客户端考虑,其实就是要保证Region下线不可服务期间,读写请求能够在集群恢复后继续,具体可以采取如下措施:

1) 对于写端,可以将未写入成功的记录,添加到一个客户端缓存中,隔一段时间后交给一个后台线程统一重新提交一次;也可以通过 setAutoFlush(flase, false)保证提交失败的记录不被抛弃,留在客户端writeBuffer中等待下次writeBuffer满了后再次尝试提交,直到提交成功为止。

2)对于读端,捕获异常后,可以采取休眠一段时间后进行重试等方式。

3)当然,还可以根据实际情况合理调整hbase.client.retries.number和hbase.client.pause配置选项。

然后,从服务端考虑,需要分别针对Region Split和Region Balance进行解决:

1) 由于建表时,我们已经考虑到了数据在不同Region Server上的均匀分布,而且预先在不同Region Server上创建并分配了相同数目的Region,那么考虑到为了集群能够在实际线上环境下提供稳定的服务,可以选择关掉HBase的Region自动 Balance功能,当然关掉后可以选择在每天读写压力小的时候(如凌晨后)触发执行一次Balance操作即可。

2)接下来,Region总是被创建,不能被复用的问题该如何解决呢?根本原因是rowkey中包含了timestamp字段,而每时每刻timestamp总是 向上增长的。但是,使用方确实需要能够根据timestamp字段进行顺序scan操作,因此,timestamp字段必须保留。据此,这里给出两种解决 思路:

  • 一种常用方法是将表按照时间分表,例如按天进行分表,这样可以通过预先建表创建好Region分区,避免实际读写过程中频 繁触发Region Split等过程,但是这一方法的缺点是每天需要预先建好表,而这一DDL过程可能出现问题进而导致读写出现问题,同时跨天时读写端也需要做出适应,调整 为读写新创建的表。
  • 其实,我们可以换一种思路,通过修改表的rowkey结构,将timestamp字段改成一个周期循环的 timestamp,如取timestamp % TS_MODE后的值,其中TS_MODE须大于等于表的TTL时间周期,这样才能保证数据不会被覆盖掉。经过这样改造后,即可实现Region的复用, 避免Region的无限上涨。对于读写端的变更也较小,读写端操作时只需将timestamp字段取模后作为rowkey进行读写,另外,读端需要考虑能 适应scan扫描时处理[startTsMode, endTsMode]和[endTsMode, startTsMode]两种情况。

4. 总结的话

以上仅是本人结合实际项目中遇到的问题进行了概括总结,仅供参考。欢迎讨论交流。

原文链接: http://blog.linezing.com/2012/11/hbase-how-to-resolve-not-serving-region-exception

分享到:
评论

相关推荐

    监控HBase集群

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

    zookeeper+hbase集群搭建

    在本文中,我们将深入探讨如何搭建一个Zookeeper和HBase集群,以及在过程中可能遇到的常见问题和解决方案。Zookeeper和HBase都是大数据处理领域的关键组件,Zookeeper作为一个分布式协调服务,而HBase是一个基于...

    HBase集群搭建

    HBase集群搭建 HBase是一种分布式、面向列的NoSQL数据库,基于Hadoop和HDFS,能够存储大量数据。以下是HBase集群搭建的知识点: 1. 安装HBase HBase安装有三种模式:单机模式、伪分布模式和完全分布式模式。在...

    HBase集群环境搭建

    如果您在Hadoop集群上进行了HDFS客户端配置的更改,例如将副本系数dfs.replication设置成5,则必须使用以下方法之一来使HBase知道,否则HBase将依旧使用默认的副本系数3来创建文件: 1. Add a pointer to your ...

    搭建hbase集群

    搭建hbase集群的详细操作;搭建hbase集群的详细操作;

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

    hadoop-2.52-hbase-0.14-hadoop2 ha高可用安装,hbase动态添加删除节点,hbase集群正常状态及启动,hbase 问题汇总

    hbase集群的安装

    hbase需要搭建集群,这里详细的介绍了集群的安装方式以及配置文件的一些修改

    mongodb集群-hbase集群安装

    2. JDK安装部署 3. Zookeeper安装部署 4. Nginx安装部署 5. Hadoop安装部署 6. HBase安装部署 7. MongoDB数据库安装部署; 8. ElasticSearch集群安装部署; 9. 应用服务器的安装及部署

    Hbase完全分布式集群搭建(详细+,看完就会,).docx

    HBase 完全分布式集群搭建 ...搭建 HBase 完全分布式集群需要了解 HBase 的架构、组件和配置,并且需要注意一些常见的问题。通过本文,我们可以了解 HBase 的基本概念和搭建方法,从而更好地应用 HBase 到实际项目中。

    CYGWIN下搭建HBASE集群

    一步一步教你在WINDOW CYGWIN下完成HBASE集群环境搭建。

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

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

    hbase集群部署

    hbase集群部署文档,附带简单基本命令、!!!!!!!

    HBase2集群配置.pdf

    HBase2集群配置.pdf HBase2集群配置.pdf HBase2集群配置.pdf HBase2集群配置.pdf

    hadoop+hbase集群搭建 详细手册

    Hadoop+HBase集群搭建详细手册 本文将详细介绍如何搭建Hadoop+HBase集群,包括前提准备、机器集群结构分布、硬件环境、软件准备、操作步骤等。 一、前提准备 在搭建Hadoop+HBase集群之前,需要准备以下几个组件:...

    Ubuntu16.04下Hbase集群模式的本地安装与配置.docx

    "Hbase 集群模式的本地安装与配置" 本文档旨在指导用户在 Ubuntu 16.04 环境下安装和配置 Hbase 集群模式,以满足大数据学习爱好者的需求。下面是安装和配置 Hbase 集群模式的详细步骤和知识点: 系统环境 在安装...

    Hadoop_hbase集群搭建.docx

    新手Hadoop_hbase集群搭建,3台服务器节点Centos7,Hadoop2.7.4,HBase1.3.1,jdk8,zookpeer3.4.10 安装包也将上传,亲手搭建编写文档

    Hadoop hbase hive sqoop集群环境安装配置及使用文档

    大数据集群 Hadoop HBase Hive Sqoop 集群环境安装配置及使用文档 在本文档中,我们将详细介绍如何搭建一个大数据集群环境,包括 Hadoop、HBase、Hive 和 Sqoop 的安装配置及使用。该文档将分为四部分:Hadoop 集群...

    HBase集群环境搭建.pdf

    在本文中,我们将详细探讨如何搭建一个HBase集群环境,主要涉及两个关键组件:Zookeeper和HBase。HBase是一个基于Hadoop的分布式数据库,它提供高可靠性、高性能和可伸缩性,适用于处理大规模数据。HBase运行在...

    HBase集群环境安装

    HBase集群环境安装

    基于集群的HBase安装和配置

    文档是我自己一步步完成实验写成的,给初学大数据的朋友共享一下希望能有所帮助

Global site tag (gtag.js) - Google Analytics