2012-06-13 21 views
7

我有点卡住修复故障表(在HBase的0.92.1-cdh4.0.0,Hadoop的2.0.0-cdh4.0.0)维修HBase的表(在过渡分配区域)

有一个区域转型不完成:

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,它帮助。但这一次, 不再。

好的,所以这表明要做一个人工干预来解决这个问题。有人可以指导我如何做到这一点的正确方向吗?一个食谱,网页,例如, 任何事情都会有所帮助。

感谢, 马里奥

回答

12

马里奥,

那么为什么一个区域卡住转型的原因之一是因为,当它被跨越regionservers移动,这是从源头上RegionServer的未分配,但从未分配给其他区域服务器。 一个补丁修复总是对我的作品是由从HBase的外壳强行分配给它: -

assign regionName 
+0

这让我朝着正确的方向前进。直接抨击行不通,但至少我现在发现了一些代码,帮助我填补了区域链中的空白。 – Mario

+0

你可以分享代码吗?我有类似的问题,并希望解决这个问题。 –

+0

对不起,应该当时发布。我不认为我已经有了。 – Mario

0

如果您的HBase的版本足够,你也可以尝试hbck -repairHoles,而不是仅仅-Repair。这对我最近的一个“修补漏洞”问题有诀窍。

1

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

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

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

你应该做的是在这里的最新回应中的一个,并为您的HDFS有效HFILE:

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

0

我试图做区域的有力分配,但没有奏效为了我。我试过以下,它的工作:

步骤:

    从HBase的外壳
  • 禁用表
  • 运行hbck使用修复problmes以下命令

    sudo -u hbase hbase hbck -repair

  • 从HBase的启用表外壳

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

所以出现问题后改变自己和组作为得到解决其他。 现在您将成功扫描表。