从HDFS读取数据 - 我的程序无法找到路径

时间:2014-07-28 00:03:39

标签: java hadoop file-io

我试图从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 个答案:

答案 0 :(得分:2)

尝试

FileSystem fileSystem = FileSystem.get(new Configuration());
Path path = new Path(fileSystem.getName() + "/" + args[0]);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileSystem.open(path)));
String line = bufferedReader.readLine();

并将HDFS中的文件路径指定为(没有前缀)

"/myFirstSelfWriteFile"

不包含“hdfs:/ localhost”

答案 1 :(得分:0)

您需要使用包org.apache.hadoop.fs(FileSystem,FSDataInputStream,FSDataOutputStream和Path)中的类。有几篇文章,但我会使用Hadoop Wiki

中的这篇文章

答案 2 :(得分:0)

看起来你在路径中缺少一个/,在文件系统之后应该给两个/。尝试指定以下路径

hdfs://localhost:9000/myFirstSelfWriteFile