web-dev-qa-db-ja.com

Java

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をセットアップしなかったので、何がわからないのかわかりません。どんな助けでも大歓迎です。

8
gwg

これを試して:

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/ を参照してください。

同様の問題が解決されます。

14
java_bee

以下の構成も機能します!

Configuration conf = new Configuration();
conf.addResource(new Path("/usr/hdp/2.6.3.0-235/hadoop/etc/hadoop/core-site.xml"));
FileSystem fs = FileSystem.get(conf);
0
Sandeep Khot