通过查找映射器正在处理的当前文件(以及其他一些内容),我可以获得少量的元数据。我需要将这个元数据发送到reducer。当然,我可以让映射器在<中显示它。密钥,值> 对生成<关键,价值+元数据> ,但我想避免它。
另外,限制自己多一点,我不想使用DistributedCahce。那么,我还有一些选择吗?更准确地说,我的问题是双重的
(1)我尝试通过在mapper的 configure(JobConf)中执行job.set(Prop,Value)并在reducer的配置(JobConf)。可悲的是,我发现它不起作用。除此之外,我有兴趣知道为什么会这样做。我的主要问题是
(2)如何以“干净的方式”将映射器中的值发送到reducer(如果可能,在我想要的约束内)。
编辑(鉴于Praveen Sripati的回应)
为了使它更具体,这就是我想要的。根据发出的数据类型,我们希望它存储在不同的文件下(比如数据d1最终在D1中,数据d2最终在D2中)。
可以在配置文件中读取值D1和D2,并确定哪里取决于 map.input.file 的值。也就是说,该对< k1,d1> 经过一些处理后应转到D1并且< k2,d2> 应该转到D2。我不想发出像<这样的东西。 k1,d1 + D1> 。可以,我以某种方式获得了没有发出D1或D2的关联,可能是巧妙地使用配置文件? k1,d1和k2,d2的输入源(即输入目录)是相同的,只能通过 map.input.file
再次看到它。如果你有时间,请告诉我。
问候
-Akash
答案 0 :(得分:0)
根据发出的数据类型,我们希望它存储在不同的目录下(比如数据d1在D1中结束,数据d2在D2中结束)。
通常,MR作业的o / p将转到单个输出文件夹。每个映射器/缩减器将写入单独的文件。我不知道如何在不对Hadoop框架进行任何更改的情况下将MR作业o / p输出写入不同的目录。
但是,根据mapper / reducer中的输出键/值类型,可以选择输出文件。使用MultipleOutputFormat的子类。必须实现MultipleOutputFormat#generateFileNameForKeyValue方法,根据输入键返回一个字符串。
了解如何在Hadoop的code - The Definitive Guide一书中实现PartitionByStationUsingMultipleOutputFormat。
完成作业后,可以使用hadoop命令轻松地将o / p移动到其他目录。