假设我们有一个带有很多文档的MongoDB集合。我需要在这个集合上执行MapReduce。 out 值为“inline”。 emit 的值有点大,可以在多个几乎相似的组上分开,例如:
{
teen_walk: 0, teen_car: 0, teen_bicycle: 0,
adult_walk: 0, adult_car: 0, adult_bicycle: 0, adult_plane: 0
}
还有更多的团体,我只是出于想象。问题是:收集这个数据集的方法更快:单个大发射值MapReduce或多个小发射值MapReduces?
两个具有条件的MR执行将在上面给出并发出值:
{walk, car, bicycle}
和
{walk, car, bicycle, plane}
收集结果更快?
编辑 BIRT报告中的mongodb-java-driver正在收集数据。
EDIT 2 一般来说,问题是:“哪种方式可以更快地收集所需的数据集:一个MapReduce执行具有单片发射值或多个MapReduces具有较小的发射值?”。但是可以考虑这些执行的可能相似之处。
答案 0 :(得分:0)
这完全取决于您的硬件/架构
通常,你在MR上工作的CPU越多,值就越小(这很明显:如果你有1000个CPU,但你只发出10个值,那么990个CPU将不会做任何事情)。 />
但是,如果您发出的值过多,则必须保持网络吞吐量。如果您的网络足够快(可能您有HPC群集或超级计算机),那么MR实际上比传统方法慢。
Google推出MR之所以是因为他们没有像超级计算机这样的东西,而是有很多分布式数据中心。
所以在这里你拥有它:在你的系统上进行测试,你就会知道:)。