首页 文章

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

提问于
浏览
5

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

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

编辑:

在作业1(仅映射器阶段)中,输出在一行中包含20个字段,必须将其写入hdfs(file1) . 在Job 2(Mapper n reducer)中,Mapper从Job1输出中获取输入,删除几个字段以引入标准格式(仅10个字段)并将其传递给reducer,后者写入file2 .

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

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

1 回答

  • 2

    您也许可以使用MultipleOutputs类为映射器定义一个输出,并(可选)为reducer定义一个输出 . 对于映射器,您必须编写两次:一次用于输出文件(使用MultipleOutputs),一次用于将对发送到reducer(像往常一样) .

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

    Mapper 1(文件1) - > Mapper 2 - > Reducer(文件2)

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

相关问题