修复HBase表(转换中未分配的区域)

时间:2012-06-13 07:35:14

标签: hadoop hbase cloudera

我修复了一个有问题的表(在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几次,但它有所帮助。但这次, 不再了。

好的,所以这说明要做一个人工干预来解决这个问题。有人可以 指出我正确的方向如何做到这一点?食谱,网页,示例, 什么都有帮助。

谢谢, 马里奥

6 个答案:

答案 0 :(得分:13)

马里奥,

因此,区域在转换中陷入困境的原因之一是,当它跨区域服务器移动时,它从源区域服务器取消分配,但从未分配给另一个区域服务器。 一个始终适合我的修复方法是通过以下方式强制从hbase shell中分配它: -

assign regionName

答案 1 :(得分:1)

如果您的HBase版本足够新,您也可以尝试使用hbck -repairHoles而不仅仅是-repair。这对我来说是最近的诀窍"修复漏洞"问题

答案 2 :(得分:1)

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

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

如果转换区域没有这样的文件(它应该在/ hbase / data ///下),那么HBase认为该目录中该区域应该有一个有效的HFile,并且不会能够使用正常的修复命令修复它。

你应该在这里做一个最新的回复,并在你的hdfs中创建一个有效的HFile:

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

答案 3 :(得分:1)

我有同样的问题

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

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

“ hbase hbck-修复”

返回“错误:和之间的区域链中有一个洞。您需要在hdfs中创建一个新的.regioninfo和region dir才能插入该洞。”

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

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

答案 4 :(得分:0)

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

然后我尝试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

因此,在将自己和团队改为其他人之后解决了问题。 现在你将成功扫描表。

答案 5 :(得分:0)

我有同样的问题。 Region still in transition, waiting for it to become assigned:中停留了一个区域。 -repair选项均无效,因为所有选项均要求分配所有区域。

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

删除区域后,所有-repair选项均有效,但是由于动物园管理员缓存,报告该区域仍处于过渡状态。

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