对于给定的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.
您也许可以使用MultipleOutputs类为映射器定义一个输出,并(可选)为化简器定义一个输出。对于映射器,您必须编写两次:一次用于输出文件(使用 MultipleOutputs),一次用于将对发送到减速器(像往常一样)。
然后,您还可以利用ChainMapper类在单个作业中定义以下工作流程:
映射器 1(文件 1)-> 映射器 2 -> 减速器(文件 2)
说实话,我从来没有用过这个逻辑,但是你可以尝试一下。祝你好运!
| 归档时间: |
|
| 查看次数: |
594 次 |
| 最近记录: |