欢迎投稿

今日深度:

Hbase异常处理,

Hbase异常处理,


1.No lease on file (inode 5425306): File does not exist. [Lease. Holder: DFSClient_NONMAPREDUCE_-247167534_42, pendingcreates: 1]

org.apache.hadoop.ipc.RemoteException: No lease on /user/test/xxx/ccc/bbb/value_fct_archive.csv (inode 5425306): File does not exist. [Lease.  Holder: DFSClient_NONMAPREDUCE_-247167534_42, pendingcreates: 1]
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:3521)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.analyzeFileState(FSNamesystem.java:3324)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNewBlockTargets(FSNamesystem.java:3162)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3122)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:843)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:500)

两个解决方案:

解决方案1:如果您的案例是多个线程,那么将'overwrite'标志设置为false将解决问题。

解决方案2:如果您的案例不是在多个线程中创建文件,请检查其他客户端是否正在删除文件/父目录。

如果在创建文件时将overwrite标志设置为true,则可能是多线程尝试写入同一文件的问题

如果第一个线程创建的文件被第二个线程覆盖,那么第一个线程将遇到上述异常。

我遇到的是第二种情况,在集群正常工作过程中,我将其openwrite的文件删除掉,就出现了该问题,目前通过修改代码解决。

2.org.apache.hadoop.hbase.exceptions.RegionOpeningException:  Region XXX

org.apache.hadoop.hbase.exceptions.RegionOpeningException: Region STOCKDIARY_INDEX_2,\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,1527595214520.356bf32cca660d985087a0041b70129d. is opening on datanode158,16020,1545498423482
        at org.apache.hadoop.hbase.regionserver.HRegionServer.getRegionByEncodedName(HRegionServer.java:2895)
        at org.apache.hadoop.hbase.regionserver.RSRpcServices.getRegion(RSRpcServices.java:947)
        at org.apache.hadoop.hbase.regionserver.RSRpcServices.multi(RSRpcServices.java:1991)
        at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:32213)
        at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2114)
        at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:101)
        at org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:130)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:107)
        at java.lang.Thread.run(Thread.java:745)

修复方案:因为HDFS上并未发现数据块丢失的情况,所以用hbase hbck等命令修复均尝试失败。通过查找HDP官网发现类似案例(案例环境与集群完全类似),是因为open region的线程出现死锁导致,可以通过提高线程数来解决,修改配置并重启HBase集群后恢复正常。

修改配置hbase-site.xml:

<property>
     <name>hbase.regionserver.executor.openregion.threads</name> 
     <value>100</value> 
</property>

 3.org.apache.hadoop.hbase.util.FileSystemVersionException

master.HMaster: Failed to become active master
org.apache.hadoop.hbase.util.FileSystemVersionException: HBase file layout needs to be upgraded. You have version null and I want version 8. Consult http://hbase.apache.org/book.html for further information about upgrading HBase. Is your hbase.rootdir valid? If so, you may need to run 'hbase hbck -fixVersionFile'.
        at org.apache.hadoop.hbase.util.FSUtils.checkVersion(FSUtils.java:678)
        at org.apache.hadoop.hbase.master.MasterFileSystem.checkRootDir(MasterFileSystem.java:466)
        at org.apache.hadoop.hbase.master.MasterFileSystem.createInitialFileSystemLayout(MasterFileSystem.java:152)
        at org.apache.hadoop.hbase.master.MasterFileSystem.<init>(MasterFileSystem.java:127)
        at org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:714)
        at org.apache.hadoop.hbase.master.HMaster.access$600(HMaster.java:198)
        at org.apache.hadoop.hbase.master.HMaster$2.run(HMaster.java:1868)
        at java.lang.Thread.run(Thread.java:748)

 造成该原因是因为hbase.rootdir目录下的hbase.version文件被丢失导致的。

我这里可能是因为在执行./hdfs fsck -delete操作时,被认为是missing block将其删掉,从而导致该问题。

解决办法:可以提前准备hbase.version文件,比如在集群正常时,先拷贝一份做备份,当出现该问题时,直接使用put命令将该文件导入进去,再重启hbase解决。

4.DataXceiver error processing WRITE_BLOCK operation src: /x.x.x.x:50373 dest: /x.x.x.x:50010

在linux系统中,/etc/security/limits.conf对最大文件打开数满足的条件下。修改hdfs-site.xml配置:

<property>
    <name>dfs.datanode.max.transfer.threads</name>
    <value>8192</value>
    <description>
        Specifies the maximum number of threads to use for transferring data
        in and out of the DN.
    </description>
</property>

5.org.apache.hadoop.hbase.NotServingRegionException:

org.apache.hadoop.hbase.NotServingRegionException: Region harve_visited_user,7fceca2e-f5a1-4392-8f79-7ef3162f3421,1487091257232.fd14bb2aa7e374ff1338594a118652b0. is not online on z1,60040,1488419186595

 出现该问题有两种情况:

1.region正在分裂时对数据的操作会抛此异常

2.region数据损坏时

我这里是第二种情况,当正在进行写数据操作时,机房突然断电,导致数据损坏。

目前是使用./hdfs fsck /  查看损坏的块,再通过 ./hdfs fsck -delete来将损坏的块删除掉,再重启hbase解决。

6.client.RpcRetryingCaller: Call exception, tries=xxx

client.RpcRetryingCaller: Call exception, tries=24, retries=35, started=1705734 ms ago, cancelled=false, msg=row '' on table 'ebay_product_info_detail' at region=ebay_product_info_detail,,1542955264874.94f64f801f2017fe407c087284c826e5., hostname=cdh-005,60020,1542952701760, seqNum=2

网上找到的答案主要有下面三种:

 1. 主机配置错误,找不到hbase的region-server服务器
 2. Hbase表中Hfile损坏,需要修复表
 3. zookeeper配置问题

我这里是第二种,通过 ./hdfs fsck -delete基本能解决。

但是也会出现,在删除了missing block后,使用fsck查看status为HEALTHY的情况下,还是报错误,同时在hbase的WEB UI中,能看到有region in transition(RIT) 超时,将该region识别为failed region。这种情况下,基本是该region已经损坏了。

我这里暂时解决办法是,通过drop命令将该region所属的表给删除。

7.java.io.IOException: Cannot obtain block length for LocatedBlock

Caused by: java.io.IOException: Cannot obtain block length for LocatedBlock{BP-739651031-192.168.1.50-1452872943245:blk_1329315607_256707953; getBlockSize()=6604762; corrupt=false; offset=0; locs=[192.168.1.55:50010, 192.168.1.56:50010, 192.168.1.53:50010, 192.168.1.71:50010]; storageIDs=[DS-52f0d1de-8124-4ce1-a452-028474f3beee, DS-be33d88c-3d30-4b5f-816c-e7e8344fd573, DS-3d2fd42f-912b-4805-b7a5-e05f99caa6ff, DS-6b4a5d88-d23e-4348-a6e0-7869cef21277]; storageTypes=[DISK, DISK, DISK, DISK]}

解决方法: 
1.首先使用fsck检查一下 
  hdfs fsck / 
当然也可以指定具体的hdfs路径。检查完打印结果没发现任何异常,没发现任何损坏或CORRUPT的block,继续排查。 
2.加上其他参数细查 
  hdfs fsck / -openforwrite (-locations -blocks -files -racks)
这次检查出来不少文件打印显示都是 openforwrite状态,而且Status为CORRUPT。经测试发现,这些文件无法get和cat。所以这里的“ Cannot obtain block length for LocatedBlock ”结合字面意思讲应该是当前有文件处于写入状态尚未关闭,无法与对应的datanode通信来成功标识其block长度。

如果文件不重要,可以根据其指定路径删除这些文件。执行命令:

hdfs dfs -rm -r path

如果文件重要,则修复,执行修复命令:

hdfs debug recoverLease -path <path-of-the-file> -retries <retry times>

那么分析其产生的可能性,举例子如下 :

  • 客户端写入hdfs文件时的网络连接被不正常的关闭了 ;
  • 客户端写入hdfs失败了,而且其replication副本也丢失了 。

总结一下就是client端写入的hdfs文件由于什么原因没有被正常close,导致文件仍处于正在写入状态,即它尚未关闭,并且读取器无法通过与相应的DataNode通信来成功识别其当前长度。

推断:HDFS文件租约未释放。可以通过以上两种方式进行解决。

8.hbase.HBaseConfiguration: Config option "hbase.regionserver.lease.period" is deprecated. Instead, use "hbase.client.scanner.timeout.period"

描述:配置项hbase.regionserver.lease.period的写法不推荐,推荐hbase.client.scanner.timeout.period

解决:修改hbase-site.xml把相应的改过来。

                                                                                                                                                                                                           

参考博客地址如下:

http://www.cnblogs.com/colorfulkoala/archive/2013/03/25/2980628.html

https://blog.csdn.net/chengtanyong4777/article/details/87917569

https://blog.csdn.net/B11050101/article/details/78519324

https://blog.csdn.net/high2011/article/details/72461376

https://blog.csdn.net/qq_22195987/article/details/80761108

www.htsjk.Com true http://www.htsjk.com/hbase/40499.html NewsArticle Hbase异常处理, 1.No lease on file (inode 5425306): File does not exist. [Lease. Holder: DFSClient_NONMAPREDUCE_-247167534_42, pendingcreates: 1] org.apache.hadoop.ipc.RemoteException: No lease on /user/test/xxx/ccc/bbb/value_fct_archi...
相关文章
    暂无相关文章
评论暂时关闭