hadoop - 在HDFS上,具有损坏区域文件的HBase群集

  显示原文与译文双语对照的内容
0 0

我们有这个HBase集群: 30 + 节点,48个表,在HDFS级别上的40个 +TB,复制因子 2. 由于两个节点上的磁盘故障,我们在HDFS上有一个损坏的文件。

当前HDFS状态

hdfs fsck/ 输出摘录,显示损坏的HBase区域 file:

/user/hbase/table_foo_bar/295cff9c67379c1204a6ddd15808af0b/n/ae0fdf7d0fa24ad1914ca934d3493e56: 
 CORRUPT blockpool BP-323062689-192.168.12.45-1357244568924 block blk_9209554458788732793
/user/hbase/table_foo_bar/295cff9c67379c1204a6ddd15808af0b/n/ae0fdf7d0fa24ad1914ca934d3493e56:
 MISSING 1 blocks of total size 134217728 B
 CORRUPT FILES: 1
 MISSING BLOCKS: 1
 MISSING SIZE: 134217728 B
 CORRUPT BLOCKS: 1
The filesystem under path '/' is CORRUPT

丢失的数据不可恢复( 磁盘坏了) 。

当前HBase状态

另一方面,据HBase说,一切都很好。

hbase hbck 说:

Version: 0.94.6-cdh4.4.0
...
 table_foo_bar is okay.
 Number of regions: 1425
 Deployed on:. . ..
...
0 inconsistencies detected.
Status: OK 

而且,我们仍然可以从损坏区域文件( 就我认为,我可以根据区域的开始和结束行键来检查)的非丢失块中查询数据。

下一步

  • 因为文件块数据不可以恢复,所以看起来唯一的选择是删除完整的损坏文件( hadoop fs -rm 或者 hadoop fsck -delete/ ) 。这将在HDFS级别出现"固定"损坏。
  • 但是,我担心移除HDFS文件将会在rtc级别上引入损坏,因为完整的区域文件将会被丢弃
  • 我认为 hadoop fsck -move/ 要将损坏的文件移动到 /lost+found 并查看HBase如何执行,但是移动到 /lost+found的过程并不像它看起来的那样可逆,所以我对这一点也不太犹豫

具体问题:

我是不是该把文件? ( 丢失对应于该区域的数据对我们是合理的) 。 它是否只删除数据,或者它将会引入ipqos中的恶意元数据损坏,而且必须处理?

或者我们可以实际保留这种情况,这似乎在( HBase没有抱怨/查看损坏)的时刻工作。

时间: 原作者:

0 0

注:我决定咬子弹,并手动从HDFS中删除损坏的文件:

hdfs dfs -rm/user/hbase/table_foo_bar/295cff9c67379c1204a6dd....

( hdfs fsck -move 没有为我工作,不确定为什么)

之后,我使用 hbck 检查了hbase的健康状况,但没有发现不一致

$ hbase hbck
...
0 inconsistencies detected.
Status: OK

因这里在我们的情况下,手动删除区域文件并没有引入kdb损坏,如果我理解,那很好,但是。 ( 我希望这不会适得其反,并且损坏不会在以后的某个时间点出现)

问题已经关闭

您的情况可能会有所不同。

原作者:
...