HBase宕机的多种场景

2023-10-30

 异常导致的退出会通过接口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. checkFileSystemAvailablethis.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。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HBase宕机的多种场景 的相关文章

  • FATAL master.HMaster:意外状态:..无法将其转换为离线状态

    我遇到了严重的 Hbase 崩溃问题 我使用 HBase 0 94 7 和一台主服务器和两台区域服务器 HBase master 经常崩溃 我什至无法重新启动它 我的主日志如下 DEBUG master AssignmentManager
  • 调整使用底层 HBase 表的 Hive 查询

    我在 Hbase 中有一个表 比如说 tbl 我想使用它来查询它 蜂巢 因此我将一个表映射到 hive 如下所示 CREATE EXTERNAL TABLE tbl id string data map
  • Hbase 客户端因 /hbase 错误导致连接丢失

    我快要疯了 安装了Hadoop Hbase 一切都在运行 opt jdk1 6 0 24 bin jps 23261 ThriftServer 22582 QuorumPeerMain 21969 NameNode 23500 Jps 23
  • HBase - WAL 和 MemStore 之间有什么区别?

    我正在尝试理解HBase建筑学 我可以看到两个不同的术语用于同一目的 Write Ahead Logs and Memstore 两者都用于存储尚未持久化的新数据permanent storage 有什么区别WAL和内存存储 Update
  • Hbase 和 BigTable 有什么区别?

    谁能告诉我 Apache HBase 数据库和 Bigtable 之间有什么区别 或者它们是相同的吗 如果有的话 哪一个支持关系 如果他们是大搜索者 有什么区别 它们很相似 但又不一样 Bigtable 最初于 2005 年发布 但并未发布
  • 如何通过部分行键过滤HBase的Scan?

    我有带有行键的 HBase 表 其中包含文本 ID 和时间戳 如下所示 string id1 1470913344067 string id1 1470913345067 string id2 1470913344067 string id
  • 我想扫描大量数据(基于范围的查询),在写入数据时我可以做哪些优化以使扫描变得更快?

    I have billion我要扫描的 hbase 行数million一次行 什么是最好的优化技术我可以尽可能快地进行扫描 我们有类似的问题 我们需要通过键扫描数百万行 为此我们使用了映射缩减技术 对此没有标准的解决方案 因此我们编写了一个
  • HBase 扫描时出现 java.lang.NoClassDefFoundError

    我正在尝试运行 MapReduce 作业来扫描 HBase 表 目前我使用的是Cloudera 4 4附带的HBase 0 94 6版本 在我的程序中的某个时刻 我使用 Scan 并使用以下命令正确导入它 import org apache
  • 使用主机系统上的客户端访问在虚拟机中运行的 HBase

    我尝试使用客户端程序将一些数据写入hbase HBase Hadoop 在 Cloudera ubuntu 的预配置虚拟机中运行 客户端运行在托管虚拟机的系统上 并直接在虚拟机中运行客户端 所以现在想使用vm外的客户端来访问vm上的服务器
  • HBase:使用Java API创建表时指定版本

    我知道我们可以通过以下方式从 hbase shell 执行此操作 create t1 NAME gt f1 VERSIONS gt 5 我在中找不到任何相应的选项HTableDesctiptor在 Java API 中 知道如何做到这一点吗
  • 使用 Spark 和 Phoenix 将 CSV 文件保存到 hbase 表

    有人可以向我指出使用 Spark 将 csv 文件保存到 Hbase 表的工作示例吗2 2我尝试过但失败的选项 注意 它们都适用于我的 Spark 1 6 凤凰火花 hbase spark it nerdammer bigdata spar
  • Spark Streaming数据放入HBase的问题

    我是这个领域的初学者 所以我无法理解它 HBase 版本 0 98 24 hadoop2 火花版本 2 1 0 以下代码尝试将从 Spark Streming Kafka 生产者接收的数据放入 HBase 中 Kafka输入数据格式是这样的
  • security.UserGroupInformation:MR 的 PrivilegedgedActionException 错误

    每当我尝试执行映射缩减作业以写入 Hbase 表时 我都会在控制台中收到以下错误 我正在从用户帐户运行 MR 作业 错误 security UserGroupInformation PriviledgedActionException 为
  • hadoop和hbase的最新兼容版本

    我必须在4台机器上安装hadoop和hbase 我找到了最新版本hadoop 2 6 0 and hbase 0 98 9 hadoop2 bin 1 它们兼容吗 2 我应该如何在4台机器上安装hbase和hadoop 即有多少个maste
  • 如何在 hbase 中存储原始数据类型并检索

    如何使用 hbase api 存储和检索原始数据类型 我的任务是在 hbase 上保存随机事件 其中包含随机生成的不可预测的数据类型 并需要在我想要的时候取回它们 有人可以帮我解决这个问题吗 因为我对 hbase 和这些东西真的很陌生 这是
  • 使用 MultipleOutputs 写入 MapReduce 中的 HBase

    我目前有一个 MapReduce 作业 它使用 MultipleOutputs 将数据发送到多个 HDFS 位置 完成后 我使用 HBase 客户端调用 在 MR 之外 将一些相同的元素添加到一些 HBase 表中 使用 TableOutp
  • Hbase 列族

    Hbase 文档表示 避免创建超过 2 3 个列族 因为 Hbase 不能很好地处理超过 2 3 个列族 其原因在于压缩和刷新 以及 IO 但是 如果我的所有列总是填充 对于每一行 那么我认为这个推理并不那么重要 因此 考虑到我对列的访问是
  • HBase如何实现对HDFS的随机访问?

    鉴于HBase是一个数据库 其文件存储在HDFS中 那么它如何实现对HDFS中单个数据的随机访问呢 这是通过什么方法实现的呢 From Apache HBase 参考指南 http hbase apache org book archite
  • HBase 作为 Web 应用程序后端

    任何人都可以建议将 HBase 作为基于 Web 的应用程序的主要数据源是否是一个好主意 我主要关心的是 HBase 对查询的响应时间 是否有可能实现亚秒级响应 编辑 有关应用程序本身的更多详细信息 数据量 约500GB文本数据 预计很快将
  • 获取行 HBase 的特定列族中的列

    我正在编写一个应用程序 通过 JSP 显示 HBase 中特定表中的数据 我想获取一行的特定列族中的所有列 有什么办法可以做到这一点吗 public String getColumnsInColumnFamily Result r Stri

随机推荐

  • one大白陪你聊聊2021年总结

    我的2021 工作方面 感情方面 生理方面 心理方面 生活方面 重要的事情 工作方面 21年换了一份工作 薪资有了一点提升 技术方面提升有些缓慢 直到21年底才想起 察觉到自己对于技术方面今天没咋进步 开始每周的技术提升计划 一周学习8小时
  • 数据分析与挖掘(十八)------挖掘建模之时序模式

    一 引言 就餐饮企业而言 经常会碰到如下问题 由于餐饮行业是生产和销售同时进行 因此销售预测对于餐饮企业十分必要 如何基于菜品历史销售数据 做好餐饮销售预测 以便减少菜品脱销现象和避免因备料不足而造成的生产延误 从而减少菜品生产等待时间 提
  • 怎么彻底删除电脑上的软件_如何用一行代码彻底删除电脑捆绑的流氓软件!

    你是否有过这样的烦恼 只想下载软件A 一个不小心给我捆绑了B C D E F等等我不需要的流氓全家桶软件 那是相当的痛苦啊 删除又删除不干净 这可如何是好 今天我们一起来看如何一行代码就可以将这些流氓捆绑软件全部找出并彻底清理
  • 最小二乘法入门(Matlab直线和曲线拟合)

    参考博客 https blog csdn net wokaowokaowokao12345 article details 72850143 多的就不多说了 持续脱发中 最小二乘法历史起源之类的 https baike baidu com
  • 前端三剑客_CSS

    前端三剑客 CSS 1 CSS简介
  • span标签之间有空格怎么办

    span标签之间有空格 span标签之间有很大空格 代码如下
  • 脚手架创建的 ant-design-pro 6 mock接口404

    大家好 我是鱼尾 今天分享一个前端小知识 我在使用ant design pro脚手架创建项目碰到的一个问题 复现过程 使用 npm 初始化 创建项目 npm i ant design pro cli g pro create myproje
  • 网络安全公开数据集

    DARPA入侵检测数据集 DARPA 1998数据集 收集了9周的 TCPDUMP网络连接和系统审计数据 7周的训练数据 2周的测试数据 包含了Probe DoS R2L U2R四大类攻击 DARPA 1999数据集 DARPA 1999覆
  • .Net5 WebApi中使用Autofac作为IOC容器(已在生产环境中使用)

    本文讲解在 Net5 WebApi中使用Autofac作为IOC容器 已在生产环境中使用 安装Autofac 创建一个独立模块来实现动态依赖注入 也可以常规使用 我这里只讲解独立模块的依赖注入 修改Program类 使用Autofac容器
  • OpenAI Embedding:快速实现聊天机器人(四)

    theme orange 本文正在参加 金石计划 接上文OpenAI Embedding 快速实现聊天机器人 三 如何使用Python实现embedding相似度搜索 这篇文章继续讲如何将搜索到的相似文本进行提炼 并最终得出问题的答案 提炼
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 微信开发中遇到的access_token坑 ,access_token失效和刷新

    这真是一个巨大的坑 为了避免以后踩到同样的坑和帮助刚接触这块的同学快速脱坑 我花了些时间研究问题的来龙去脉 提供了一个不太完美的解决方案 以及未来规划的完美解决方案 问题现象 在开发微信jssdk的图像接口功能时 测试环境和回归环境都ok
  • LeetCode-动态规划

    文章目录 一 前言 二 动态规划 什么是动态规划 动态规划的求解过程 三 LeetCode 198 打家劫舍 四 LeetCode 213 打家劫舍 五 LeetCode 64 最小路径和 六 LeetCode 62 不同路径 七 Leet
  • SpringBoot去掉Druid监控页底部广告

    默认 Druid 的监控页面底部会有一块儿广告位 如图 我们如果不想显示这一块的话 可以对其进行过滤掉 具体配置如下 import com alibaba druid spring boot autoconfigure DruidDataS
  • coco数据集的评价指标

    Average Precision AP IoU 0 50 0 95 area all maxDets 100 0 000 Average Precision AP IoU 0 50 area all maxDets 100 0 000 A
  • 西瓜书 第6章、支持向量机 6.1-6.5

    支持向量机 一 间隔与支持向量 分类学习的基本思想就是基于训练集在样本空间找到一个划分超平面 将不同类别的样本分开 但是能将样本分开的有很多应该找那个最中间的超平面 因为其容忍度最好 如下图所示应该用最中间的红色面 线性超平面 超平面分为线
  • 华为OD机试 C++ 计算误码率

    题目 有时 当信息通过某种方式传输时 它会受到干扰 造成信息失真 现在 您需要帮助计算这种信息失真的程度 我们称之为误码率 简单地说 误码率就是传输过程中出错的信息部分所占的比例 具体内容 我们使用简化的方式表示信息 如 2A3B4D 指的
  • C#基础语法————变量

    1 变量的存储 一个变量只不过是一个供程序操作的存储区的名字 在 C 中 每个变量都有一个特定的类型 类型决定了变量的内存大小和布局 范围内的值可以存储在内存中 可以对变量进行一系列操作 存储变量的语法 变量类型 变量名 变量名 值 号 在
  • Spring IoC Bean-生命周期源码梳理分享

    Spring IoC Bean 生命周期 一 什么是Spring 1 Spring IoC a Dependency Injection DI 依赖注入 b Dependency Lookup DL 依赖查找 c Spring容器管理的对象
  • HBase宕机的多种场景

    异常导致的退出会通过接口Abortable定义的abort 方法实现 Abortable实现类如下 由以上类图可以看出HBaseAdmin的abort由于是client的访问 因此终止服务只需抛出异常即可 HConnection也是用于cl