我正在尝试从hdfs读取文件的内容。我的代码如下-
package gen;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class ReadFromHDFS {
public static void main(String[] args) throws Exception {
if (args.length < 1) {
System.out.println("Usage: ReadFromHDFS <hdfs-file-path-to-read-from>");
System.out.println("Example: ReadFromHDFS 'hdfs:/localhost:9000/myFirstSelfWriteFile'");
System.exit(-1);
}
try {
Path path = new Path(args[0]);
FileSystem fileSystem = FileSystem.get(new Configuration());
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileSystem.open(path)));
String line = bufferedReader.readLine();
while (line != null) {
System.out.println(line);
line = bufferedReader.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
但是,我不知道如何给这个程序提供hdfs目录的路径。我试过-
java -cp <hadoop jar:myjar> gen.ReadFromHDFS <path>
我尝试直接引用目录的路径(当我使用hadoop fs-ls时看到的),目录中的文件,添加hdfs:/localhost和hdfs:,它们都不起作用。有谁能帮我准确地将文件夹的路径传递给hdfs吗?例如,当我直接给出路径(没有前缀)时,它表示文件不存在。
编辑:到目前为止,没有一个解决方案对我有效。我总是有例外-
java.io.FileNotFoundExceptoin: File <filename> does not exist.
at org.apache.hadoop.fs.getFileSystem.getFileStatus(RawLocalFileSystem.java:361)
它似乎试图在本地找到文件。
3条答案
按热度按时间ghg1uchk1#
看起来您的路径中缺少一个/,应该在文件系统后面加两个/。尝试指定以下路径
3zwtqj6y2#
尝试
并将hdfs中的文件路径指定为(不带前缀)
不包括“hdfs:/localhost”
ct2axkht3#
您需要使用org.apache.hadoop.fs包中的类(filesystem、fsdatainputstream、fsdataoutputstream和path)。有好几篇文章,但我会用hadoopwiki上的这篇