【问题标题】:How to abort/kill a procedure in HBase如何中止/终止 HBase 中的过程
【发布时间】:2019-05-27 07:26:24
【问题描述】:

我在尝试创建新表时遇到了 2 个卡住的 hbase 程序。我想可能是那个时候区域服务器出了点问题。

现在我找到一个标记为“WAITING”的父过程及其子过程标记为“WAITING_TIMEOUT”。

我想中止/杀死这两个过程,但我不知道该怎么做,而且似乎 hbase shell 的“杀死”操作不支持过程。

我的 hbase 版本是 2.0.2 并且在 yarn 上运行。

我尝试过重启hbase,但是程序还在,卡住了。

父程序

id:
54206

parent:
Empty, no parent

state: 
WAITING

type:
ServerCrashProcedure server=slave.server.com,16020,1558012223746, splitWal=true, meta=false

儿童程序

id:
54266

parent:
54206

state:
WAITING_TIMEOUT

type:
AssignProcedure table=my_namespace:my_table, region=18b04016f7b5619c9fbd6dfcdf72e9d4

【问题讨论】:

    标签: hbase


    【解决方案1】:

    我在运行 clone_snapshot 命令时遇到了同样的问题。 您可以使用 list_procedures 来运行 procs 并在 hbase shell 中使用 abort_procedure 命令。 但是在我们的 hbase 版本中,list_procedures 进入 OOM 并且 abort_procedure 不可用。 所以我停止了所有 hbase 服务,删除了 /hbase/MasterProcWALs/ 中的文件 目录并启动 hbase。这已经解决了问题。

    【讨论】:

      【解决方案2】:

      我偶然遇到了这个问题,我将发布解决方案,因为 HBase 2.x 仍然是当前的稳定版本。

      简介

      从 HBase2 开始,有一个名为“HBase Operator Tools”的单独工具,在处理任何严重的 HBase 集群问题时,它是您最好的朋友(在许多情况下也是唯一的选择)。它可以从 Apache HBase 站点下载。

      我的理解是,他们决定从 HBase 发行版中“移除”这个工具,以便让我们(用户/管理员)使用最新的管理工具,而无需升级 HBase 版本本身。

      如何安装和使用 HBCK2

      1. https://hbase.apache.org/downloads.html(HBase Operator Tools 部分)下载最新的 HBase Operator Tools 二进制文件(tar.gz 文件)
      2. 在集群的一个节点上提取它(我在 HBase 主服务器上),最好是在 hbase 或其他 HBase 管理员用户上。解压后你会发现一个名为 hbase-operator-tools-1.1.0/hbase-hbck2 的目录,里面有一堆罐子(1.1.0 是我写这篇文章时的最新版本回答)
      3. kinit 如果 Kerberos 已启用
      4. 运行hbase hbck -j hbase-operator-tools-1.1.0/hbase-hbck2/hbase-hbck2-1.1.0.jar,你会看到一堆解释得很清楚的选项,例如:addFsRegionsMissingInMetaassignssetRegionStatefixMeta 等等

      重要的是要认识到,这个工具也可以在 Zookeeper 级别上运行,所以即使 HBase 本身无法启动,它也会为您提供帮助,例如 HBase Master 启动由于某些区域正在转换而卡住

      终于解决了

      当你跑步时 hbase hbck -j hbase-operator-tools-1.1.0/hbase-hbck2/hbase-hbck2-1.1.0.jar --help 会有一个选项bypass,这正是你所需要的:

      bypass [OPTIONS] < PID >...
        Options:
          -o,--override   override if procedure is running/stuck
          -r,--recursive  bypass parent and its children. SLOW! EXPENSIVE!
          -w,--lockWait   milliseconds to wait before giving up; default=1    
       Pass one (or more) procedure 'pid's to skip to procedure finish.  Parent of bypassed procedure will also be skipped to the finish.  Entities will be left in an inconsistent state and will require manual fixup. May need Master restart to clear locks still held.  Bypass fails if procedure has children.  Add 'recursive' if all you have is a parent pid to finish parent and children. This is SLOW, and dangerous so use selectively. Does not always work.
      

      最后:

      hbase hbck -j hbase-operator-tools-1.1.0/hbase-hbck2/hbase-hbck2-1.1.0.jar bypass -o -r PROCEDURE_PID
      

      程序及其父进程应该被杀死。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-14
        • 1970-01-01
        • 2013-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-07
        相关资源
        最近更新 更多