`
无尘道长
  • 浏览: 157733 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

导致Hbase挂掉的场景

阅读更多

 异常导致的退出会通过接口Abortable定义的abort()方法实现,Abortable实现类如下:

 
由以上类图可以看出HBaseAdmin的abort由于是client的访问,因此终止服务只需抛出异常即可,HConnection也是用于client,因此只需关闭连接,如果是zk的异常会在后续的使用中重新连接zk而不用关闭连接,其中重点的是HMaster、HRegionServer和ZookeeperWatcher三个子类:

 

HMaster

HMaster会出现异常(执行abort())停止的场景如下:

1.zk异常导致的master停止服务是最常见的场景,涉及操作包含但不限于以下:

  a)Zk链接超时,超时时间通过zookeeper.session.timeout配置,默认为3分钟, 如果fail.fast.expired.active.master配置的值为false(默认为false),则不会立即abort,而是会尝试恢复zk的过期session;

  b)在打开region后,需要从zk中删除opened节点,如果zk有该节点,但是删除失败;

  c)在split region过程中,从zk删除split节点时;

  d)Master节点改变时;

  e)从zk中创建unassigned节点时;

  f)在下线disabled的regoin时,从zk中删除disabled的region如果发生zk异常;

  g)还有很多操作zk的节点时如果出现异常。

2.在assign时,如果设置region为offlined状态,但是region之前的状态不是closed或者offlined;

3.在assign时,如果无法从.META.表中读取region信息;

4.把新的hbase集群加入到正在运行的hbase集群时,如果zk的/hbase/unassigned节点没有数据;

5.使用线程池批量分配region时,如果出现未被捕获的异常,实现方式如下:

 

ThreadFactoryBuilder builder = new ThreadFactoryBuilder();

builder.setUncaughtExceptionHandler(getUncaughtExceptionHandler());

Executors.newFixedThreadPool(threadCount, builder.build());

protected UncaughtExceptionHandler getUncaughtExceptionHandler() {

    return new UncaughtExceptionHandler() {

      public void uncaughtException(Thread t, Throwable e) {

        server.abort("Uncaught exception in " + t.getName(), e);

      }

    };

  }

6.在启动master的服务线程时,出现了异常;

7.在hdfs中检查hbase日志路径时,发现了dead的server时,需从hdfs中读出log,如果出现io异常需要检查hdfs文件系统,如果fsOk状态为true,但是通过FSUtils工具类进行检查时出现io异常;

8.在校验并且分配-ROOT-的region时,如果zk异常,或者其它异常(其它异常会重试10次),比如:“-ROOT- is onlined on the dead server”。 

 

HRegionServer

HRegionServer会出现异常停止(执行abort())服务的场景如下:

1.在读写hdfs时如果出现IOException异常,此时会发起hdfs的文件系统检查(checkFileSystem)1.          

public boolean checkFileSystem() {

    if (this.fsOk && this.fs != null) {

      try {

        FSUtils.checkFileSystemAvailable(this.fs);

      } catch (IOException e) {

        abort("File System not available", e);

        this.fsOk = false;

      }

    }

    return this.fsOk;

        }

2.Regionserver的服务线程出现了未捕获异常;

3.在启动HRegionServer时出现异常;

4.在进行HLog回滚时,出现异常;

5.在flush memstore时,如果持久化失败,会重启RS,在重启中把hlog的内容重新加载到memstore;

6.出现zk异常,包括但不限于以下场景:

  a)Zk链接超时,超时时间通过zookeeper.session.timeout配置,默认为3分钟,与master不同,如果zk操作不会重试;

  b)启动HRegionServer时出现KeeperException异常; 

  c)在进行split操作时,如果出现异常会进行回滚操作,在回滚过程中需要从zk中删除region的spliting状态,如果删除时出现KeeperException或者回滚的其它操作出现异常;

  d)在打开region时,出现了KeeperException异常;

  e)在进行hbase集群复制时,很多与zk交互的操作出现KeeperException异常时均会导致abort;

7.在close region时,如果出现异常,比如:不能成功的flush memstore;

8.Flush memstore时,如果HLog发现该region已经在flush则会强制终止JVM,采用的是Runtime.getRuntime().halt(1)方法,该方法不会执行正常退出的关闭钩子,从而不会flush RS的所有region,也不会迁移region,只有等待ZK的session超时后master才会发现该RS不可用,做迁移工作。

 

总结

Hbase挂掉的可能性有很多,主要由zk或者hdfs的问题导致,因此zk、hdfs的可用对于hbase极其重要,关于zk:

1.zk如果停止了服务则在很多时候会导致master、rs挂掉,hbase集群基本上就失去了服务的能力,因此zk一定要是稳定可靠的,当client已经于rs建立了链接,这时zk挂掉,如果不进行split等小数与zk交互失败会导致触发rs的abort()的操作时rs还是可以提供服务的;

2.如果rs/master进行了长时间的gc或者改动了服务器时间,导致出现zk的session超时会导致rs/master停止服务,目前已经出现了2次因为服务器时间变化导致hbase停止服务的事故;

3.别轻易人为改变zk的hbase节点数据,master/rs在进行很多操作时会比较依赖zk的数据,如果发现不符合预期可能会导致master/rs停止服务,尤其是master。

 

    Master通过ZK知道RS是否可用,一般情况下RS在停止服务时均会正常退出,在正常退出时会从ZK中删除/hbase/rs/$regionserver的节点,Master会监听该节点的被删除,从而较快的(速度取决于所有region关闭时间)对该RS负责的region进行重新分配,如果是强制退出,比如 kill -9或者出现HRegionServer挂掉的第8条时则只有等待ZK的session超时时才会删除RS在ZK的节点(RS在ZK中添加节点时采用的是CreateMode.EPHEMERAL模式,该模式创建的节点会在session关闭时自动删除),那时Master才会进行重新assign。

    Kill RS的进程也是正常退出(不能使用kill -9强制退出),RS使用Runtime的addShutdownHook方法注册了jvm关闭钩子,在关闭钩子中会执行RS的退出逻辑,实际上hbase-daemon.sh的停止RS就是采用kill。

 

  • 大小: 34.2 KB
分享到:
评论

相关推荐

    大数据HBase的使用场景

    HBase不能取代RDBMS,因为二者的应用场景不同。HBase为了解决海量数据的扩展性,支持简单的增加节点来实现线性扩展,从而在集群上管理海量的非结构化或半结构化的稀疏数据。HBase仅能通过主键(row key)或主键的...

    云数据库HBase产品架构场景解析.pdf

    在2018年1月的数据库直播大讲堂峰会HBase专场,陆豪关于云数据库HBase产品架构场景解析的PPT。

    HBase应用场景及最佳实践

    介绍了HBase的使用场景和优化步骤以及最佳实践,对学习HBase还是有些帮助的

    HBASE基本概念以及使用场景

    根据个人的经验,总结出来的HBASE基本概念以及使用场景,原本用于内部分享

    Hbase的应用场景、原理及架构分析

    本文来自于csdn,文章主要从HBase概述以及数据模型基本架构,简单的介绍Hbase了,希望...但HDFS适合批处理场景,不支持数据随机查找,不适合增量数据处理且不支持数据更新。Hbase是列存储的非关系数据库。传统数据库Mys

    阿里hbase 使用场景

    在刚刚过去的2016年双11,**HBase承载访问量达到了上百GB/秒(写入)与上百GB/秒(读取),相当于全国人民一秒收发一条短信**,在业务记录、安全风控、实时计算、日志监控、消息聊天等多个场景发挥重要价值。面对如此...

    HbaseTemplate 操作hbase

    java 利用 sping-data-hadoop HbaseTemplate 操作hbase find get execute 等方法 可以直接运行

    HBase中Coprocessor的介绍以及实际业务场景中的使用.pdf

    讲师:陈杨——快手大数据高级研发工程师 ...内容概要:(1)讲解hbase coprocessor的原理以及使用场景,(2) coprocessor整个流程实战,包括开发,加载,运行以及管理(3)结合1,2分析coprocessor在rsgroup中的具体使用

    pinpoint的hbase初始化脚本hbase-create.hbase

    搭建pinpoint需要的hbase初始化脚本hbase-create.hbase

    HBase数据库设计.doc

    1. HBase有哪些基本的特征? 1 HBase特征: 1 2. HBase相对于关系数据库能解决的问题是什么? 2 HBase与关系数据的区别? 2 HBase与RDBMS的区别? 2 3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等 3 1...

    java大数据作业_3HBase

    2. 请简述HBase中数据写入最后导致Region分裂的全过程 3. 如果设计一个笔记的表,表中要求有笔记的属性和笔记的内容,怎么做 4. HBase部署时如何指定多个zookeeper 5. HBase shell是基于哪种JVM运行的语言实现的 6. ...

    HBase(hbase-2.4.9-bin.tar.gz)

    HBase(hbase-2.4.9-bin.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System...

    HBase应用场景原理与基本架构共40页.pdf.zip

    HBase应用场景原理与基本架构共40页.pdf.zip

    HBase学习利器:HBase实战

    HBase开发实战,HBase学习利器:HBase实战

    Hbase 使用场景及案例

    Hbase特点 1. 高速写入:高速写入,对读取需求比较小。 2.大数据:分布式存储,海量数据搞得定。不用担心无限增长的数据。 3. 可靠:写入的不是内存,是硬盘,高性能 4. 查询简单:不需要复杂...Hbase使用场景3:用户画

    Hbase资源整理集合

    HBase 官方文档.pdf HBase的操作和编程.pdf HBase Cpressr优化与实验 郭磊涛.pdf null【HBase】Data Migratin frm Gri t Clu Cmputing - Natural Sienes .pdf 分布式数据库HBase快照的设计与实现.pdf 【HBase】...

    hbase资料api

    HBASE

    HBase开启审计日志

    HBase开启审计日志

    FlinkSQL实战:HBase的结合应用

    HBase作为Google发表BigTable论文的开源实现版本,是一种分布式列式存储的数据库,...当然,本文假设用户有一定的HBase知识基础,不会详细去介绍HBase的架构和原理,本文着重介绍HBase和Flink在实际场景中的结合使用

    HBase海量数据存储实战视频教程

    4,企业级方案设计,完全匹配工作场景。 适用人群 1、对大数据感兴趣的在校生及应届毕业生。 2、对目前职业有进一步提升要求,希望从事大数据行业高薪工作的在职人员。 3、对大数据行业感兴趣的相关人员。 课程...

Global site tag (gtag.js) - Google Analytics