java - org.apache.hadoop.hdfs.DFSInputStream 中的 NoSuchMethodError

标签 java hadoop

我有一个非常简单的 Java 代码,它从 hdfs

读取数据
try{
    InputStream s = new GzipCompressorInputStream(hdfsFileSystem.open(filePath), false);
    ByteStreams.copy(s, outputStream);
    s.close();
}
catch (Exception ex){
    logger.error("Problem with file "+ filePath,ex);
}

有时(不总是)它会抛出异常

java.lang.NoSuchMethodError: org.apache.commons.io.IOUtils.closeQuietly(Ljava/io/Closeable;)V
        at org.apache.hadoop.hdfs.DFSInputStream.getBlockReader(DFSInputStream.java:1099)
        at org.apache.hadoop.hdfs.DFSInputStream.blockSeekTo(DFSInputStream.java:533)
        at org.apache.hadoop.hdfs.DFSInputStream.readWithStrategy(DFSInputStream.java:749)
        at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:793)
        at java.io.DataInputStream.read(DataInputStream.java:149)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
        at org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream.init(GzipCompressorInputStream.java:136)
        at org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream.<init>(GzipCompressorInputStream.java:129)
        [...]

在线下行:

InputStream s = new GzipCompressorInputStream(hdfsFileSystem.open(filePath), false);

我正在使用 bellow maven 依赖项来加载 hadoop 客户端:

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>2.2.0</version>
    </dependency>

有人知道如何解决这个问题吗?当然,我可以将 catch(Exception e) 更改为 catch(Error e),但这不仅仅是解决方案。

最佳答案

看起来在你的类路径中出现了几个不同版本的“commons-io.jar”。 方法“closeQuietly(Ljava/io/Closeable;)”出现在2.0版本。 有时先加载旧版本的“commons-io.jar”,然后出现异常。 需要修复类路径。

关于java - org.apache.hadoop.hdfs.DFSInputStream 中的 NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23949574/

相关文章:

java - 在扩展泛型类的类中初始化实例变量

hadoop - Yarn 在一个节点上分配了太多的 vcores

hadoop - 大数据架构:带有Hive或Hadoop的Elasticsearch-Kibana

java - X12 解析使用 hadoop mapreduce

hadoop - 如何应用Hive爆炸/横向 View 多个阵列?

sql - 在SQL范围内选择

java - 从java文件写入xml

java - 等待图表刷新,selenium Java

java - 如何在 Java 中将 10 乘以 "Integer"对象?

java - 日语 "semi-voice"字符的转换