是否可以在 Hadoop Mapreduce 中为单个作业打印 Mapper 和 reducer 输出

Posted

技术标签:

【中文标题】是否可以在 Hadoop Mapreduce 中为单个作业打印 Mapper 和 reducer 输出【英文标题】:Is it to possible to print Mapper and reducer output for a single job in Hadoop Mapreduce 【发布时间】:2015-12-26 13:21:47 【问题描述】:

对于给定的 MR 作业,我需要生成两个输出文件。 一个文件应该是 Mapper 的输出 另一个文件应该是Reducer的输出(只是上面Mapper的一个聚合)

我可以将 mapper 和 reducer 输出都写在一个作业中吗?

编辑:

在 Job 1(仅 Mapper 阶段)输出包含单行中的 20 个字段,必须写入 hdfs(file1)。 在 Job 2(Mapper n reducer)中,Mapper 从 Job1 输出中获取输入,删除几个字段以引入标准格式(只有 10 个字段)并将其传递给写入 file2 的 reducer。

我需要 hdfs 中的 file1 和 file2... 现在我的疑问是,是否可以在 Job1 映射器中将数据作为 file1 写入 hdfs,然后修改相同的数据并将其传递给 reducer。

PS:到目前为止,我正在使用 2 个带有链接机制的作业。第一个作业只包含映射器,第二个作业包含映射器和减速器。

【问题讨论】:

我猜,您可以使用单个 MR 作业来生成结果。您是否在第二个作业的 Mapper 中进行任何转换,如果没有,则在单个 MR 作业中将 Mapper 的输出传递到 Reducer。 我是第二个映射器,我只是在修改单行的列数。例如:映射器(file1)的输出包含 20 列,mapper2 的输出包含 7 列。 mapper2 中的重复行将在 reducer 中删除。 如果你可以在第一个作业映射器中做到这一点,那么在那里执行并合并作业。否则,请提供有关这两项工作的详细信息。 在 Job 1 中(仅 Mapper)输出在单行中包含 20 个字段,必须写入 hdfs(file1).... 在 Job 2 中(Mapper n reducer)Mapper 从Job1 输出,删除几个字段以带入标准格式(只有 10 个字段)并将其传递给写入 file2 的 reducer。我需要 hdfs 中的 file1 和 file2 ......现在我的疑问是,是否可以在 Job1 映射器中将数据作为 file1 写入 hdfs,然后对其进行修改并将其发送到 reducer。 始终将信息添加到 OP 中。因为它易于阅读并且可供未来的读者直接使用。 【参考方案1】:

您也许可以使用MultipleOutputs 类为映射器定义一个输出,并且(可选地)为reducer 定义一个输出。对于映射器,您将不得不写两次:一次用于输出文件(使用 MultipleOutputs),一次用于将对发送到减速器(像往常一样)。

然后,您还可以利用ChainMapper 类,在单个作业中定义以下工作流:

映射器 1(文件 1)-> 映射器 2-> 还原器(文件 2)

说实话,我从来没有使用过这个逻辑,但你可以试一试。祝你好运!

【讨论】:

谢谢你。我不知道多输出..我使用了这个概念。我在mapper中使用了multipleoutput,将数据写入hdfs,并将数据作为中间数据传递给reducer。现在我的 mapper 和 reducer 都在写入 hdfs。

以上是关于是否可以在 Hadoop Mapreduce 中为单个作业打印 Mapper 和 reducer 输出的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中为Hadoop Map Reduce作业编写组合器和分区器?我如何在Hadoop Job中调用它

在 Pail Tap Hadoop 作业中为输入指定多个文件夹

我们可以使用 Hadoop MapReduce 进行实时数据处理吗?

WordCount示例深度学习MapReduce过程

hadoop mapreduce 分桶

Hadoop基础(十七):MapReduce框架原理切片机制