You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java读取HDFS文件遇SLF4J冲突及FS路径错误求助

Java读取HDFS中CSV文件的问题排查

需求限定使用Java,不采用Python、Scala、Spark等其他语言,我尝试编写程序读取HDFS中的CSV文件,查阅多种资料仍无法解决问题,恳请帮助。

我编写的代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;


public class hadoop2 {

    public static void main(String[] args) throws IOException {
        Configuration conf = new Configuration();
        conf.addResource(new Path("/etc/hadoop/conf/core-site.xml"));
        conf.addResource(new Path("/etc/hadoop/conf/hdfs-site.xml"));

        Path file = new Path("/usr1/myFile0.csv");

            try (FileSystem hdfs = FileSystem.get(conf)) {

                FSDataInputStream is = hdfs.open(file);
                BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

                String lineRead = br.readLine();
                while (lineRead != null) {
                    System.out.println(lineRead);
                    lineRead = br.readLine();
                    //do what ever needed
                }

                br.close();
                hdfs.close();
            }
        }
}

初始运行错误信息

程序运行时输出以下错误:

SLF4J: 类路径包含多个SLF4J绑定。
SLF4J: 在[jar:file:/Users/sigmoid/.m2/repository/org/slf4j/slf4j-reload4j/1.7.36/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]中找到绑定
SLF4J: 在[jar:file:/Users/sigmoid/.m2/repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]中找到绑定
SLF4J: 请查看SLF4J文档了解解释。
SLF4J: 实际绑定类型为[org.slf4j.impl.Reload4jLoggerFactory]
log4j:WARN 无法为logger(org.apache.hadoop.metrics2.lib.MutableMetricsFactory)找到appender。
log4j:WARN 请正确初始化log4j系统。
log4j:WARN 查看log4j文档获取更多信息。
Exception in thread "main" java.io.FileNotFoundException: File /usr1/myFile0.csv does not exist
    at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:779)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:1100)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:769)
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:462)
    at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:160)
    at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:372)
    at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:976)
    at hadoop2.main(hadoop2.java:22)

程序提示文件/usr1/myFile0.csv不存在,但该文件实际存在(见截图)。尝试通过Maven引入SLF4J无效。

更新后的错误信息

移除Maven依赖中的两个SLF4J绑定并重新添加最新版后,SLF4J错误消除,但出现新错误:

2022年8月17日 凌晨1:40:35 org.apache.hadoop.util.NativeCodeLoader <clinit>
警告: 无法为你的平台加载native-hadoop库... 在适用情况下使用内置Java类
Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs:/usr1/myFile0.csv, expected: file:///
    at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:807)
    at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:105)
    at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:774)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:1100)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:769)
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:462)
    at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:160)
    at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:372)
    at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:976)
    at hadoop2.main(hadoop2.java:22)

内容的提问来源于stack exchange,提问作者User9123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:15:53