【发布时间】:2016-05-14 17:16:56
【问题描述】:
在为我的 MapReduce 作业制作 Jar 时,我在输入文件中使用 Hadoop-local 命令。我想知道是否有一种方法,而不是专门指定输入文件夹中要在 MapReduce 作业中使用的每个文件的路径,我是否可以只指定并传递输入文件夹中的所有文件。这是因为文件的内容和数量可能会由于我正在尝试配置的 MapReduce 作业的性质而改变,并且由于我不知道文件的具体数量,除了这些文件的内容之外,有没有办法将输入文件夹中的所有文件传递到我的 MapReduce 程序中,然后遍历每个文件以计算某个函数,然后将结果发送到 Reducer。我只使用一个 Map/Reduce 程序,并且我正在使用 Java 进行编码。我可以使用 hadoop-moonshot 命令,但我目前正在使用 hadoop-local。
谢谢。
【问题讨论】:
-
如果您在作业中指定 HDFS 目录而不是文件,则应读取所有文件。您能否请edit您的问题包括您正在运行的命令?也可能是minimal reproducible example 中的一些代码?
-
谢谢@cricket_007 您能否提供一个调用 HDFS 目录而不是单个文件的示例。另外,我如何为每个输入创建一个单独的输出文件。我猜是通过某种方式使用 MultipleOutput 类,但我现在不知道如何。
-
我不记得如何输出多个文件,但mapreduce输出本身必须是一个目录。至于目录输入,wordcount example从一个目录读取两个文件
-
@Shah.1 你试过设置:
FileInputFormat.setInputDirRecursive(mapReduceJob, true);以便能够递归读取文件吗?