我有一个有趣的问题,我正在努力适应MapReduce。我有一堆日志条目。我需要做的是这样的事情:
检查给定IP的任何条目是否设置了特定标志。如果是,请将转换应用于具有该IP的所有条目,否则不进行转换。
执行此操作的最简单方法是关闭IP,然后在reducer中迭代一次,以检查是否有任何设置了该标志,并再次进行转换(如果需要)。不幸的是,似乎我只能迭代传递给reducer的Iterable一次。
我看到的可能解决方案是:
我想坚持使用标准MapReduce,以便能够在Amazon Elastic MapReduce上轻松运行。我觉得应该通过链式工作来做到这一点,但我似乎无法想出任何东西。有没有人对我如何做到这一点有任何提示?
答案 0 :(得分:2)
一种可能性:您的映射器可以输出复合键,其中包括IP地址和此特定标志的存在。然后,您需要确保在reducer中迭代的记录已排序,以便首先出现flag = true的记录。由于这些记录首先出现,因此您将知道将转换应用于该IP地址组中的所有记录。
以下是一篇博文,介绍了如何执行此操作:
http://www.riccomini.name/Topics/DistributedComputing/Hadoop/SortByValue/