我正在使用cloudera hadoop。我能够运行简单的mapreduce程序,在这里我提供一个文件作为mapreduce程序的输入。
此文件包含Map器函数要处理的所有其他文件。
但是,我有一次被困住了。
/folder1
- file1.txt
- file2.txt
- file3.txt
如何将mapreduce程序的输入路径指定为 "/folder1"
,以便它可以开始处理该目录中的每个文件?
有什么想法吗?
编辑:
1) 最初,我提供inputfile.txt作为mapreduce程序的输入。它工作得很好。
>inputFile.txt
file1.txt
file2.txt
file3.txt
2) 但是现在,我想在命令行上提供一个输入目录arg[0],而不是提供一个输入文件。
hadoop jar ABC.jar /folder1 /output
4条答案
按热度按时间daolsyd01#
问题是fileinputformat不能递归地读取输入路径dir中的文件。
解决方案:使用以下代码
FileInputFormat.setInputDirRecursive(job, true);
在Map的下面一行之前减少代码FileInputFormat.addInputPath(job, new Path(args[0]));
你可以在这里检查它被修复的版本。h6my8fg22#
使用multipleinputs类。
看看工作代码
r6hnlfcb3#
您可以使用filesystem.liststatus从给定的dir获取文件列表,代码如下:
ecbunoof4#
您可以使用hdfs通配符来提供多个文件
所以,解决方案是:
或