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

标签 hadoop mapreduce

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

我能否将 mapper 和 reducer 输出都写在一个作业中?

编辑:

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

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

PS:截至目前,我正在使用 2 个具有链接机制的作业。第一个作业只包含 mapper,第二个作业包含 mapper 和 reducer。

最佳答案

你或许可以使用 MultipleOutputs类来定义映射器的一个输出和(可选的)缩减器的一个输出。对于映射器,您将不得不编写两次:一次用于输出文件(使用 MultipleOutputs),一次用于向 reducer 发射对(像往常一样)。

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

Mapper 1 (file 1) -> Mapper 2 -> Reducer (file 2)

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

关于hadoop - 是否可以在 Hadoop Mapreduce 中为单个作业打印 Mapper 和 reducer 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34471724/

相关文章:

c# - RavenDB Map Reduce Transform 折叠不同的字符串列表

hadoop - hbase和zookeeper的版本

java - Mapreduce Hadoop作业异常输出目录已存在

java - Namenode恶魔启动错误

带有分区的 Hadoop distcp

java - 如何将 Hadoop Reducer 的最终输出写入文本文件?

java - MapReduce编程

hadoop - java.io.IOException : invalid distance too far back in hadoop mapreduce 异常

hadoop - Apache Pig弃用错误

hadoop - MapReduce 2.0 YARN中的 namespace 和 block 池是什么意思?