1

对于我的 map reduce 工作,我正在读取输入文件中的行以获取外部文件路径。所以我用作输入的文件如下所示:

/user/local/myfiles/temp1.png

/user/local/myfiles/temp2.jpg

/user/local/myfiles/temp3.txt

/user/local/myfiles/temp4.txt

....

我想对这些文件执行一些操作。我需要从我在 map 函数中读取的字符串路径中获取文件对象。我的问题是:我将这些文件的实际副本放在哪里以便我可以获取它们?我把它们放在hadoop dfs上吗?当我把它们放在本地系统上时,我得到一个文件未找到错误,但是当我把它们放在 hadoop 文件系统上时,我得到了同样的错误(所以输入文件中的每一行都类似于“/user/hadoop/input/ temp1.txt")。我可以获取文件名,但我需要能够从输入文件中列出的路径中获取图像对象或文本文件对象。有没有什么方法可以从我的 map 函数中访问 dfs(或本地系统)上的文件,只要一个字符串路径?

4

1 回答 1

1

您需要将它们添加到 HDFS,以便所有映射器都可以访问它们。以下对我有用(在 0.20 上):

        FileSystem fs = FileSystem.get(context.getConfiguration());
        FSDataInputStream in = null;
        BufferedReader br = null;
        String line = null;

        String file = context.getConfiguration().get(Constants.INFILE); 
        in = fs.open(new Path(file));
        br = new BufferedReader(new InputStreamReader(in));
        while((line=br.readLine())!=null)

我在驱动程序中添加了 Constants.INFILE,以免将文件名硬编码到代码中。

于 2012-10-16T19:32:26.697 回答