簡體   English   中英

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

[英]NoSuchMethodError at org.apache.hadoop.hdfs.DFSInputStream

我在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>

有誰知道如何解決這個問題? 對於cource我可以更改catch(Exception e)catch(Error e) ,但它不是解決方法只是解決方法。

看起來在你的classpath中出現了幾個不同版本的“commons-io.jar”。 方法“closeQuietly(Ljava / io / Closeable;)”出現在2.0版本中。 有時首先加載舊版本的“commons-io.jar”,然后出現異常。 需要Classpath修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM