【问题标题】:Not able to open HDFS file from mapper Hadoop无法从映射器 Hadoop 打开 HDFS 文件
【发布时间】:2012-02-07 17:40:00
【问题描述】:

我进行了很多搜索,但未能找到解决此问题的方法。 实际上我要访问的文件在 HDFS 中,但不在输入路径中(输入到 map/reduce 作业的路径)。我想从映射器访问它。 输入路径中指定的 hdfs 路径可以从 mapper 完全访问,但其他 hdfs 文件不能。

INside 映射器:-

FileSystem FS1=FileSystem.get(conf);
Path path=new Path(""+FS1.getHomeDirectory());
FSDataInputStream fsdis=FS1.open(path);

导致以下错误: java.io.IOException : 无法打开文件名 /user/hadoop

提前致谢, 苛刻

【问题讨论】:

  • 你检查过 /user/hadoop 是否有读权限吗?
  • 是的,它对所有三个都具有读取权限。
  • /user/hadoop 应该是一个目录,所以我认为FileSystem.open() 不会像文件一样发挥作用。

标签: java hadoop mapreduce


【解决方案1】:

我记得使用this tutorial 来获得类似的工作。你可以试一试,它和你写的只有一点点不同,但它仍然可能会有所帮助......

@Edit:啊,我刚刚注意到(在阅读 cmets 之后)您正在尝试打开 FS1.getHomeDirectory(),这是一个目录。我认为您应该指出一个文件而不是一个目录(您可以在“从文件中读取数据”下的链接教程中查看它)。

【讨论】:

    【解决方案2】:

    你可以试试这个吗

    try {
        FileSystem fs = FileSystem.get (new Configuration ());
        FileStatus[] status = fs.listStatus (new Path ("hdfs://jp.seka.com:9000/user/jeka/in"));
        for (int i=0;i < status.length;i++) {
           BufferedReader br = new BufferedReader (new InputStreamReader (fs.open (status[i].getPath())));
           String line;
           line = br.readLine();
           while (line != null) {
               System.out.println (line);
               line=br.readLine ();
           }
        }
    } catch (Exception e) {
          System.out.println("File not found");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 2015-07-17
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      相关资源
      最近更新 更多