当前位置: 首页 > 面试题库 >

尝试从Java中的HDFS读取文件时出现“错误的FS…预期:file:///”

班经亘
2023-03-14
问题内容

我无法使用Java从HDFS读取文件:

String hdfsUrl = "hdfs://<ip>:<port>";
Configuration configuration = new Configuration();
configuration.set("fs.defaultFS", hdfsUrl);
FileSystem fs = FileSystem.get(configuration);
Path filePath = new Path(hdfsUrl + "/projects/harmonizome/data/achilles/attribute_list_entries.txt.gz");
FSDataInputStream fsDataInputStream = fs.open(filePath);

SEVERE: Servlet.service() for servlet [edu.mssm.pharm.maayanlab.Harmonizome.api.DownloadAPI] in context with path [/Harmonizome] threw exception
java.lang.IllegalArgumentException: Wrong FS: hdfs://146.203.54.165:8020/projects/harmonizome/data/achilles/attribute_list_entries.txt.gz, expected: file:///
    at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:310)
    at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:47)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:357)
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:245)
    at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:125)
    at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:283)
    at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:356)
    at edu.mssm.pharm.maayanlab.Harmonizome.api.DownloadAPI.readLines(DownloadAPI.java:37)
    at edu.mssm.pharm.maayanlab.Harmonizome.api.DownloadAPI.doGet(DownloadAPI.java:27)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
...

我没有设置我们的HDFS,所以我不知道我不知道的东西。任何帮助表示赞赏。


问题答案:

试试这个:

Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(new URI(<url:port>), configuration);
Path filePath = new Path(<path/to/file>);
FSDataInputStream fsDataInputStream = fs.open(filePath);
BufferedReader br = new BufferedReader(new InputStreamReader(fsDataInputStream));

请参考http://techidiocy.com/java-lang-illegalargumentexception-wrong-fs-
expected-file/

解决了类似的问题。



 类似资料:
  • 我试图读取xsd文件以验证模式。 我的架构位于位置 我的类读取这个文件也在< code > x/y/z/read schema . Java 中 它们都装在我的罐子里。 我试图在中读取这个文件,如下所示,其中名称是但url返回为null? 我做错什么了吗?

  • 需要帮助修复此错误。我试图打印出字符串国家名称的数组长度。 我从一个简历文件阅读,我一直得到上面的错误。下面是我的代码: 下面是我的TestCSV类文件: 我的csv文件如下所示:这是一个摘要,因为我不想打印出全部252个国家。基本上,我把252个国家的数据存储在一个字符串数组中,年份存储在一个整数数组中,每个国家的蜂窝数据统计数据存储在一个二维双数组中。我是编程新手,我想知道我的方向是否正确,如

  • 我正在为一个项目使用POS标记器,当它从我的计算机(项目文件夹)读取标记器文件时,它会成功工作。但是我需要先上传tagger文件,然后从URL读取tagger文件。为此,我上传了POS-tagger文件,并试图通过向MaxentTagger方法的构造函数提供URL来读取tagger文件:(我的代码是C#,我已经重写了MaxentTagger类,因此它的构造函数如下所示: 公共标记器(){ JAVA

  • 我试图将整个文件作为字符串对象加载到内存中。但是在应用程序结束后,我的内存不会被释放回垃圾收集器。我知道在内存中读取整个文件是不好的,但是我必须将数据发送到另一个类,有人能帮助我如何做这只是一个流,而不是将整个代码加载到内存中,如果没有,有人能说我现在的代码有什么问题吗

  • 我正在尝试创建一个程序,它可以读取一个。java文件然后将每一行放入ArrayList: 我一直收到以下错误消息: 线程“main”java中出现异常。lang.错误:未解决的编译问题: 未处理的异常类型FileNotFoundException at TextFile.createArray(H01_43将java文件放入txtfile.java:47) at H01_43.main(H01_4

  • 我正在使用Maven创建一个Selenium项目,其中我试图从Excel文件(xlsx)中读取“username”和“password”。 这是密码- 我得到的错误在这一行: Driver.FindElement(By.XPath(“//input[@type='text']”)).SendKeys(Sheet.GetRow(i).GetCell(j).GetStringCellValue());