我正在尝试使用以下代码从HDFS读取文件:
final Configuration configuration = new Configuration();
configuration.set("fs.defaultFS", "hdfs://localhost:8020/user/training/");
FileSystem fileSystem = FileSystem.get(configuration);
String filePath = "hdfs" + "://" + "localhost:8020" + "/user/training/test.txt";
File fileToProcess = new File(filePath); // path of file
FileInputStream fis = new FileInputStream(fileToProcess);
该程序的最后一个语句在异常后返回:
Exception in thread "main" java.io.FileNotFoundException:
hdfs:/localhost:8020/user/training/test.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
知道可能存在什么问题?文件出现在该位置。 我唯一可以注意的区别是:虽然我在URL中加了“//”,但最后一个语句在创建输入流时省略了一个斜杠。
此代码是从MR Driver类调用的。
答案 0 :(得分:1)
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://localhost:8020"),
configuration);
Path path = new Path("hdfs://localhost:8020/user/training/test.txt");
System.out.println(fs.exists(path));
FSDataInputStream fin = fs.open(path);
答案 1 :(得分:0)
塔潘, 配置参数fs.defaultFS必须只表示Namenode主机名。为什么它具有HDFS目录本身的值。您可以尝试删除它吗?