Hadoop - LeaseExpiredException

标签 hadoop mapreduce hdfs

我有多个压缩文件,每个压缩文件包含 8 个大小为 5-10kb 的 xml 文件。我将此数据用于测试目的,否则实时数据有 1000 个 xml 文件。我写了 map only 程序来解压缩压缩文件

        for(FileStatus status : status_list){
            this.unzip(status.getPath().toString() , DestPath, fs);
        }

此方法将创建文件并读取未压缩的数据

    FSDataOutputStream out = fs.create(new Path(filePath));
    byte[] bytesIn = new byte[BUFFER_SIZE];
    int read = 0;
    while ((read = zipIn.read(bytesIn)) != -1) {
        out.write(bytesIn, 0, read);
    }
    out.flush();
    out.close();

当 mapper 尝试写入多个不同名称的文件时,hadoop 返回 LeaseExpiredException。

15/09/26 19:53:46 INFO mapreduce.Job: Task Id : attempt_1443265405944_0005_m_000000_0, Status : FAILED
Error: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException): No lease on /test_poc/x/injection_00001 (163rd copy).xml (inode 400006): File does not exist. [Lease.  Holder: DFSClient_attempt_1443265405944_0005_m_000000_0_-657768289_1, pendingcreates: 1]
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:3431)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.analyzeFileState(FSNamesystem.java:3236)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNewBlockTargets(FSNamesystem.java:3074)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3034)
    at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:723)
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:492)
    at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:969)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2049)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2045)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2043)

    at org.apache.hadoop.ipc.Client.call(Client.java:1476)
    at org.apache.hadoop.ipc.Client.call(Client.java:1407)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:229)
    at com.sun.proxy.$Proxy12.addBlock(Unknown Source)
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.addBlock(ClientNamenodeProtocolTranslatorPB.java:418)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187)
    at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
    at com.sun.proxy.$Proxy13.addBlock(Unknown Source)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.locateFollowingBlock(DFSOutputStream.java:1430)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1226)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:449)

我不知道如何在不使用循环的情况下处理多个压缩文件。 我在伪分布式模式下使用 MR2 API 和 Hadoop 2.7.1 编写了 map reduce 程序。有什么指点吗?

最佳答案

假设 zipIn 是一个 java.util.zip.ZipInputStream,您是否应该迭代调用 getNextEntry 而不是读取字节?

关于Hadoop - LeaseExpiredException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32799677/

相关文章:

hadoop - Hadoop UI未显示作业选项卡,作业进度和作业历史记录

hadoop - 如何访问桉树中的实例?

hadoop - 使用分布式缓存访问 Hadoop 中的 Maxmind Geo API

hadoop - 如何使用log或Eclipse-hdt调试mapreduce(hadoop-2.5.1)程序?

java - 使用 MapReduce 将数据批量插入 HBase

mongodb - 将 MongoDB 与 Hadoop 一起使用时的异常

java - 空指针异常-Eclipse远程Hadoop

hadoop - 使用 SAP HANA 和 Hadoop/HDFS 的传感器数据

hadoop - HBase 与 Java 8 和 zookeeper 有问题

hadoop - 如何加速 Pig MultiStorage