对于我的 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(或本地系统)上的文件,只给定一个字符串路径?
最佳答案
您需要将它们添加到 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,以免将文件名硬编码到代码中。
关于hadoop - 在 map reduce 中引用来自 hadoop dfs 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12922026/