从2个数据集中过滤AVRO数据

时间:2014-11-24 12:29:42

标签: hadoop mapreduce avro

用例:

我有2个数据集/文件集Machine(Parent)和Alerts(Child)。
他们的数据也存储在两个avro文件中,即machine.avro和alert.avro。

警报架构有machineId:列类型int。

如果对警报有依赖性,如何从机器过滤数据? (一到多)。

e.g。获取警报时间在2个时间戳之间的所有机器。

任何例如与来源将是很大的帮助...

提前致谢...

1 个答案:

答案 0 :(得分:0)

在另一个帖子中得到答案....

Mapping through two data sets with Hadoop

发布该帖子的评论......

根据文档,MapReduce框架包括以下步骤:

Map
Sort/Partition
Combine (optional)
Reduce

您已经描述了一种执行连接的方法:在每个Mapper中将所有Set A加载到内存中。你纠正这是低效的。

相反,如果两个集合都按键排序和分区,请注意可以将大型连接划分为任意多个较小的连接。 MapReduce在上面的步骤(2)中按键对每个Mapper的输出进行排序。然后按键对排序的映射输出进行分区,以便为每个Reducer创建一个分区。对于每个唯一键,Reducer将接收来自Set A和Set B的所有值。

要完成连接,Reducer只需输出密钥和Set B中的更新值(如果存在);否则,从Set A输出密钥和原始值。要区分Set A和Set B中的值,请尝试在Mapper的输出值上设置一个标志。