我有~50M实体存储在数据存储区中。每个项目可以是总共7种类型中的一种。
接下来,我有一个简单的MapReduce作业,它计算每种类型的项目数。它是用python编写的,基于appengine-mapreduce库。 Mapper会发出(type, 1)
。 reducer只是添加了每种类型的1的数量。
当我用5000个分片运行这个作业时,map-stage运行正常。它根据我的任务队列配置使用总共20个实例,这是最大可能的。
但是,shuffle-hash阶段仅使用一个实例,并因内存不足错误而失败。我无法理解为什么只有一个实例用于散列,以及如何解决这个内存不足错误。
我尝试过编写一个合并器,但我从未在mapreduce状态页面或日志中看到过合成器阶段。
此外,github上的appengine-mapreduce wiki已经过时,我找不到一个活跃的社区,我可以在那里提问。
答案 0 :(得分:2)
你是正确的,Python shuffle是基于内存的,不能扩展。有一种方法可以使Python MR使用Java MR shuffle阶段(速度快且可扩展)。不幸的是,关于它的文档(设置和2个库如何通信)很差。有关详细信息,请参阅此issue。