gpt4 book ai didi

hadoop - 手动修复Hbase表重叠(多区域具有相同的启动键)

转载 作者:可可西里 更新时间:2023-11-01 14:41:13 24 4
gpt4 key购买 nike

我是通过Java客户端将数据插入到Hbase中的。但是,区域服务器突然崩溃了。所以我重新启动了hbase,之后hmaster就不运行了。当我运行修复工具-hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair时,我得到了以下原因:

ERROR: (region TABLE_NAME, rowkey_value, region_name_1) Multiple regions have the same start key: rowkey_value 
ERROR: (region TABLE_NAME, rowkey_value, region_name_2) Multiple regions have the same start key: rowkey_value
ERROR: (regions Table_Name, rowkey_value, region_name_1 and Table_Name, rowkey_value, region_name_2) There is an overlap in the region chain.
ERROR: Found inconsistency in table TABLE_NAME

我无法运行hbck(联机修复/修复),因为我的主机不运行。我现在需要手动修复。现在有大量的数据,所以我不想丢失它们。
编辑:
我格式化了namenode并再次添加数据,瞧,同样的问题再次出现!!
这一次,我让老师跑了。所以我执行了 hbck -fixHdfsOverlaps命令,但是很长时间之后,我发现现在hmaster和namenode都没有运行。现在,由于nn也关闭了,我无法访问hdfs。
我不想丢失任何数据。我注意到其中一个区域在其区域的“.tmp”目录中有大量数据,wich也有待压缩。
那么,如何重新恢复hdfs和hbase?
namenode的日志信息:
2014-07-09 09:19:44,498 ERROR org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem initialization failed.
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /data/hdfstmp/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:288)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:97)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:386)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:360)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:276)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:496)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1279)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1288)
2014-07-09 09:19:44,500 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /data/hdfstmp/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:288)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:97)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:386)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:360)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:276)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:496)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1279)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1288)

2014-07-09 09:19:44,501 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ip-10-237-184-7.ec2.internal/10.237.184.7
************************************************************/

然后hdfs temp目录只包含dfs和mapred目录。缺少名称目录。在name dir中的图像和previous.checkpoint、edits等也一样。
现在,这是否意味着数据丢失了?还是无法恢复?
有办法备份数据吗?
编辑(2):
运行 hbck -fixHdfsOverlaps命令后,我看到数据目录是空的。或者在运行恢复时,hbck命令会临时将数据移动到其他位置吗?如果是,它在哪里以及如何在不丢失任何或最小数据的情况下恢复hdfs。

最佳答案

我们多次面对这个问题,并编写基于Java的程序来解决这个问题。它依赖于从同一个键开始合并两个区域。合并区域必须小心。幸运的是,具有相同密钥的多个区域共享一个独特的特征,只有一个区域的所有以相同密钥开始的区域中都有数据。因此合并操作变得便宜,并且数据丢失和合并失败的机会最小化。实用程序可用https://github.com/nabhosal/HBaseRecoveryTools

关于hadoop - 手动修复Hbase表重叠(多区域具有相同的启动键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24584174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com