Java Hbase表不一致[未在任何区域服务器上部署区域]

Java Hbase表不一致[未在任何区域服务器上部署区域],java,hadoop,hbase,cloudera,Java,Hadoop,Hbase,Cloudera,在一个小型HBase集群中,所有从节点都重新启动。当我启动HBase服务时,其中一个表(test)变得不一致 hbase(main):001:0> assign 'abcdef123456789abcdef12345678912' HDFS中缺少一些块(hbase块)。所以它处于安全模式。我发出了safemode-leave命令 然后HBase表(测试)变得不一致 我执行了以下提到的操作: 我执行了几次“hbase hbck”。2发现表“测试”不一致 错误:区域{meta=>测试,1m\

在一个小型HBase集群中,所有从节点都重新启动。当我启动HBase服务时,其中一个表(test)变得不一致

hbase(main):001:0> assign 'abcdef123456789abcdef12345678912'
HDFS中缺少一些块(hbase块)。所以它处于安全模式。我发出了
safemode-leave
命令

然后HBase表(测试)变得不一致

我执行了以下提到的操作:

  • 我执行了几次“hbase hbck”。2发现表“测试”不一致

    错误:区域{meta=>测试,1m\x00\x03\x1B\x15139349284371.4c213a47bba83c47075f21fec7c6d862.,hdfs=>hdfs://master:9000/hbase/test/4c213a47bba83c47075f21fec7c6d862,已部署=>}未部署在任何区域服务器上。

  • hbase-hbck-fixMeta-fixAssignmentsHBaseFsckRepair:区域仍处于转换中,等待分配:

    {NAME=>'test,1m\x00\x03\x1B\x15139349284371.4c213a47bba83c47075f21fec7c6d862',STARTKEY=>'1m\x00\x03\x1B\x15',ENDKEY=>'',ENCODED=>4c213a47bba83c47075f21fec7c6d862,}

  • hbase-hbck-repairhbase-fsckrepair:区域仍处于转换中,等待分配:

    {NAME=>'test,1m\x00\x03\x1B\x15139349284371.4c213a47bba83c47075f21fec7c6d862',STARTKEY=>'1m\x00\x03\x1B\x15',ENDKEY=>'',ENCODED=>4c213a47bba83c47075f21fec7c6d862,}

  • 我并行检查了数据节点日志

    日志:

    org.apache.hadoop.hdfs.server.datanode.datanode:opReadBlock BP-1015188871-192.168.1.11-1391187113543:blk_7616957984716737802_27846收到异常java.io.EOFException
    WARN org.apache.hadoop.hdfs.server.datanode.datanode:DatanodeRegistration(192.168.1.12,storageID=DS-831971799-192.168.1.12-50010-1391193910800,infoPort=50075,IPPort=50020,storageInfo=lv=-40;cid=cid-7f99a9de-258c-493c-9db0-46b9e84b4c12;nsid=1286773982;c=0):为BP-1015188871-192.168.1.11-1391187113543提供服务时出现异常:blk_7616957984716737802_27846至/192.168.1.12:36127

  • 已检查名称节点日志

    ERROR org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:ubuntu (auth:SIMPLE) cause:java.io.FileNotFoundException: File does not exist: /hbase/test/4c213a47bba83c47075f21fec7c6d862/C 2014-02-28 14:13:15,738 
    INFO org.apache.hadoop.ipc.Server: IPC Server handler 6 on 9000, call org.apache.hadoop.hdfs.protocol.ClientProtocol.getBlockLocations from
    10.10.242.31:42149: error: java.io.FileNotFoundException: File does not exist: /hbase/test/4c213a47bba83c47075f21fec7c6d862/C java.io.FileNotFoundException: File does not exist: /hbase/test/4c213a47bba83c47075f21fec7c6d862/C at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsUpdateTimes(FSNamesystem.java:1301)
    
  • 但是,我可以从HDFS浏览和下载该文件。如何恢复数据

    如何使“test”表保持一致?

    在HBase 2.0中(可能在以前的版本中),“未部署在任何区域服务器上”通常通过指定区域来解决

  • 如果您在安全群集上,请进行身份验证。您在一个受保护的群集上,不是吗?;)

  • 运行HBase检查以查看哪些区域是未指定的

    hbase hbck -details
    
  • 如果您看到这样的错误:

    ERROR: Region { 
        meta => my.tablename,,1500001112222.abcdef123456789abcdef12345678912., 
        hdfs => hdfs://cluster/apps/hbase/data/data/default/my.tablename/abcdef123456789abcdef12345678912,
        deployed => ,
        replicaId => 0 
    } not deployed on any region server.
    
    (密钥“未部署在任何区域服务器上”),则应分配区域。事实证明,这很简单。继续执行步骤4

  • 打开hbase外壳

    hbase shell
    
  • 通过将编码的regionname传递给Assign方法来分配区域。如帮助文档中所述,未经先前的尽职调查,不应调用此命令,因为此命令将执行强制重新分配。医生说,我警告说:仅限专家使用

    hbase(main):001:0> assign 'abcdef123456789abcdef12345678912'
    
  • 通过对包含未分配区域的表运行hbase检查,再次检查您的工作

    hbase hbck my.tablename 
    
    如果所有操作都正确,并且没有潜在的HDFS问题,则应在hbck输出的底部附近看到以下消息:

    0 inconsistencies detected.
    Status: OK
    

  • 在Hbase 2.0.2版本中,没有修复选项来恢复不一致

  • 运行hbase hbck命令
  • 如果错误消息如下所述:
  • 将此错误不一致性复制到一个文件中,并使用下面的命令提取字母数字值
  • 如果我们的不一致性计数较少,我们可以手动获取该值,如果该值较多,则检索整个值将非常困难。因此,请使用下面的命令将范围缩小到alphanemeric,它可以一次复制并放入hbase shell中

    cat incosistant.out | awk-F.“{print$2}”
    
  • 打开hbase hbase外壳并手动分配这些一致性。如下图所示:

  • 分配完成后,再次运行hbase hbck命令

    我也遇到了同样的问题。结果是有区域重叠。我如何修复:

  • 尝试分配未部署在hbase外壳中的区域:分配'Abcd…'
  • 检查HBase主日志中的错误分配管理器[类似于:尝试分配区域{ENCODED=>Abcd…,NAME=>,ts=1591351130943,server=server160201581641930622}]
  • 关闭服务器1上的区域服务器
  • 运行hbase hbck-修复我的表格
  • 对每个未部署的区域重复此操作

  • 或者您可以重新启动hbase并运行“hbase hbck-repair”

    是否检查了hdfs一致性(hadoop fsck/)?是的。它显示“/”文件系统已损坏。它显示为损坏的文件属于hbase。您需要首先修复HDFS-您可以从这里的答案开始,如果我的HDFS状态正常,但我仍然无法通过hbase选项修复hbase hbck不一致的问题,该怎么办?
    ERROR: Region { meta => EMP_NMAE,\x02\x00\x00\x00\x00,1571419090798.054b393c37a80563ae1aa60f29e3e4df., hdfs => hdfs://node1:8020/apps/hbase/data/data/LEVEL_RESULT/054b393c37a80563ae1aa60f29e3e4df, deployed => , replicaId => 0 } not deployed on any region server.
    ERROR: Region { meta => TABLE_3,\x02174\x0011100383\x00496\x001,1571324271429.6959c7157693956825be65676ced605c., hdfs => hdfs://node1:8020/apps/hbase/data/data/TABLE_NAME/6959c7157693956825be65676ced605c, deployed => , replicaId => 0 } not deployed on any region server.
    
    assign '054b393c37a80563ae1aa60f29e3e4df'
    assign '6959c7157693956825be65676ced605c'
    assign '7058dfe0da0699865a5b63be9d3799ab'
    assign 'd25529539bae49eb078c7d0ca6ce84e4'
    assign 'e4ad94f58e310a771a0f5a1eade884cc'