对于给定的mr作业,我需要生成两个输出文件。一个文件应该是mapper的输出,另一个文件应该是reducer的输出(它只是上述mapper的聚合)
我可以在一个作业中同时编写mapper和reducer输出吗?
编辑:
在作业1(仅Map器阶段)中,输出在一行中包含20个字段,这些字段必须写入hdfs(file1)。在job2(mapper n reducer)中,mapper从job1输出中获取输入,删除几个字段以转换为标准格式(只有10个字段),并将其传递给写file2的reducer。
我需要hdfs中的file1和file2。。。现在我的疑问是,在job1 mapper中是否可以将数据作为file1写入hdfs,然后修改相同的数据并将其传递给reducer。
ps:到目前为止,我正在使用两个链接机制的工作。第一个作业只包含Map器,第二个作业包含Map器和缩减器。
1条答案
按热度按时间evrscar21#
您也许可以使用multipleoutputs类为Map器定义一个输出(可选)为reducer定义一个输出。对于mapper,您必须编写两次:一次用于输出文件(使用multipleoutputs),另一次用于向reducer发送对(与往常一样)。
然后,还可以利用chainmapper类在单个作业中定义以下工作流:
Map器1(文件1)->Map器2->还原器(文件2)
老实说,我从来没有用过这个逻辑,但你可以试试。祝你好运!