【问题标题】:Repair HBase table (unassigned region in transition)修复 HBase 表(过渡中的未分配区域)
【发布时间】:2012-06-16 03:11:00
【问题描述】:

我在修复故障表时有点卡住了(在 Hbase 0.92.1-cdh4.0.0、Hadoop 2.0.0-cdh4.0.0 上)

有一个未完成的过渡区域:

Region    State
bf2025f4bc154914b5942af4e72ea063 counter_traces,1329773878.35_766a0b4df75e4381a686fbc07db9e333,1339425291230.bf2025f4bc154914b5942af4e72ea063. state=OFFLINE, ts=Tue Jun 12 11:43:53 CEST 2012 (0s ago), server=null

当我运行 sudo -u hbase hbase hbck -repair 时,我得到了这个:

Number of empty REGIONINFO_QUALIFIER rows in .META.: 0
ERROR: Region { meta => counter_traces,1329773878.35_766a0b4df75e4381a686fbc07db9e333,1339425291230.bf2025f4bc154914b5942af4e72ea063., hdfs => hdfs://hbase001:8020/hbase/counter_traces/bf2025f4bc154914b5942af4e72ea063, deployed =>  } not deployed on any region server.
Trying to fix unassigned region...
12/06/12 11:44:40 INFO util.HBaseFsckRepair: Region still in transition, waiting for it to become assigned: {NAME => 'counter_traces,1329773878.35_766a0b4df75e4381a686fbc07db9e333,1339425291230.bf2025f4bc154914b5942af4e72ea063.', STARTKEY => '1329773878.35_766a0b4df75e4381a686fbc07db9e333', ENDKEY => '1329793347.58_163865765c0a11e184ab003048f0e77e', ENCODED => bf2025f4bc154914b5942af4e72ea063,}

它只是循环。

如果我不做-repair,我会得到这个:

Number of empty REGIONINFO_QUALIFIER rows in .META.: 0
ERROR: Region { meta => counter_traces,1329773878.35_766a0b4df75e4381a686fbc07db9e333,1339425291230.bf2025f4bc154914b5942af4e72ea063., hdfs => hdfs://hbase001:8020/hbase/counter_traces/bf2025f4bc154914b5942af4e72ea063, deployed =>  } not deployed on any region server.
ERROR: Region { meta => counter_traces,1329816776.95_95b5561f3c1e496598421359a19ac665,1339425297099.ee1fd808d954c9adc9ed95ec2f29d119., hdfs => hdfs://hbase001:8020/hbase/counter_traces/ee1fd808d954c9adc9ed95ec2f29d119, deployed =>  } not deployed on any region server.
12/06/12 11:45:59 DEBUG util.HBaseFsck: There are 134 region info entries
ERROR: There is a hole in the region chain between 1329773878.35_766a0b4df75e4381a686fbc07db9e333 and 1329793347.58_163865765c0a11e184ab003048f0e77e.  You need to create a new .regioninfo and region dir in hdfs to plug the hole.
ERROR: There is a hole in the region chain between 1329816776.95_95b5561f3c1e496598421359a19ac665 and 1329847231.75_b3c50776778b43e088dd7ed865e11331.  You need to create a new .regioninfo and region dir in hdfs to plug the hole.
ERROR: Found inconsistency in table counter_traces

我之前运行过-repair 几次,它有所帮助。但这一次, 没有了。

好的,所以这表明要进行手动干预来解决此问题。有人可以 指出我如何做到这一点的正确方向?食谱、网页、示例、 任何事情都会有所帮助。

谢谢, 马里奥

【问题讨论】:

    标签: hadoop hbase cloudera


    【解决方案1】:

    马里奥,

    所以一个区域卡在转换中的原因之一是,当它跨区域服务器移动时,它没有从源区域服务器分配,但从未分配给另一个区域服务器。 一个总是对我有用的修复方法是通过以下方式从 hbase shell 中强制分配它:-

    assign regionName
    

    【讨论】:

    • 这让我找到了正确的方向。直接评估没有用,但至少我现在找到了一些代码来帮助我填补区域链中的漏洞。
    • 你能分享一下代码吗?我有一个类似的问题,想解决这个问题。
    • 对不起,当时应该发帖的。我想我已经没有了。
    • 另见serverfault.com/questions/510290/… - 它修复了分配无法执行的卡住状态
    【解决方案2】:

    我尝试强制分配区域,但它对我不起作用。我尝试了以下方法并且成功了:

    步骤:

    • 从 hbase shell 禁用表
    • 使用以下命令运行 hbck 以修复问题

      sudo -u hbase hbase hbck -repair

    • 从 hbase shell 启用表

    【讨论】:

    • 从以上所有内容来看,这一项都有效。在这些步骤之前您可以做的一件事是运行 hbase hbck 以查看哪些表是 inconsistent 以便您知道应该禁用哪些表
    【解决方案3】:

    如果您的 HBase 版本足够新,您也可以尝试使用 hbck -repairHoles 而不是仅使用 -repair。这对我最近的一个“修复漏洞”问题起到了作用。

    【讨论】:

      【解决方案4】:

      首先,您应该检查您的 hdfs 中是否有该特定区域的文件。

      如果有,您应该单独使用 hbck -fixHdfsHoles -fixMeta 直到修复。 (可能需要尝试几次)。

      如果过渡中的区域没有这样的文件(它应该在 /hbase/data/// 下),那么 HBase 认为该目录中应该有该区域的有效 HFile 并且将无法用正常的修复命令修复它。

      您应该在此处执行最新响应之一中的内容,并在您的 hdfs 中创建一个有效的 HFile:

      http://comments.gmane.org/gmane.comp.java.hadoop.hbase.user/31308

      【讨论】:

        【解决方案5】:

        我有同样的问题

        • 通过 Ambari 启动所有服务时,HDFS 进入安全模式,并且很长时间没有恢复。
        • 其他服务未启动,因为 HFDS 处于安全模式的时间较长。我手动将 HDFS 从安全模式中移除并尝试启动服务,看起来这损坏了一些影响 hbase 的 HDFS 文件。
        • 扫描现有表返回“未知表错误”
        • 创建新命名空间返回以下错误:

        create_namespace 'tst1' 错误:java.io.IOException:表命名空间管理器未完全初始化,稍后再试

        “hbase hbck -修复”

        返回“错误:和 之间的区域链中有一个洞。您需要在 hdfs 中创建一个新的 .regioninfo 和区域目录来堵住这个洞”。

        运行“hbase hbck -repairHoles”解决了这个问题。 我也可以扫描以前存储的数据。

        注意:-hbase hbck 命令应该从 hbase 用户运行

        【讨论】:

          【解决方案6】:

          就我而言,我忘记更改从另一个集群复制的区域数据的所有者。

          然后我尝试做hbase hbck -repair 但得到INFO util.HBaseFsckRepair: Region still in transition, waiting for it to become assigned 然后出现错误Unable to complete check or repair the region, failed to move out of transition within timeout 120000ms

          我发现hbase:meta 已经有地区信息了。

          扫描表时,会出现这样的错误

          ERROR: No server address listed in hbase:meta for region X
          

          然后尝试hbase hbck -fixAssignments,但仍然像以前一样失败。

          然后我查看表区域数据,发现只有这个表自己和组是

          drwxr-xr-x   - hdfs  hbase
          

          但其他类似的

          drwxr-xr-x - hbase hbase

          所以在将自己和组更改为其他人后问题就解决了。 现在您将成功扫描表。

          【讨论】:

            【解决方案7】:

            我遇到了同样的问题。一个区域被困在Region still in transition, waiting for it to become assigned:-repair 选项都不起作用,因为所有选项都要求分配所有区域。

            我不得不从 hdfs 中删除该区域。 hdfs$ hdfs dfs -rm -r /hbase/data/default/<table>/<region>

            删除区域后,所有-repair 选项都有效,但由于zookeeper 缓存,报告该区域仍在转换中。

            作为How to get the region in HBASE which is struck in FAILED_OPEN state?,我从zookeeper中删除了过渡缓存,重新启动了HBASE master,一切正常

            【讨论】:

              猜你喜欢
              • 2019-06-29
              • 1970-01-01
              • 1970-01-01
              • 2016-03-08
              • 1970-01-01
              • 2011-12-14
              • 2012-03-12
              • 1970-01-01
              • 2013-09-21
              相关资源
              最近更新 更多