我已经在一个节点上安装了,并且我遇到了十大问题。
假设我有一个10k对数据(键,值),并搜索具有最佳值的10个数据。
实际上,我创建了一个简单的项目来迭代整个数据,我只需要几分钟就能得到答案。
然后,我用十大设计模式创建mapreduce应用程序来解决同样的问题,我需要超过4个小时才能得到答案。(显然,我使用相同的机器和相同的算法进行排序)
我认为,这可能是因为mapreduce需要更多的服务来运行,需要更多的网络活动,需要更多的精力来读取和写入hdfs。还有其他因素可以证明mapreduce (在这种情况下)比不使用mapreduce慢吗?
发布于 2014-09-01 11:17:00
mapreduce在单个节点的设置上速度较慢,因为在任何给定的时间,只有一个映射器和一个还原器可以对其工作。mapper必须迭代每一个分块,而减速器同时工作于两个映射器输出,然后在两个这样的减速器上输出ans等等。
因此,就复杂性而言:
for normal project :t(n) = n => O(n)
for mapreduce:t(n) = (n/x)*t(n/2x) => O((n/x)log(n/x)) where x is the number of nodes你觉得哪个更大?对于单个节点和多个节点。
对mapreduce复杂性的解释:
一次迭代的时间:n
同时映射函数的数目:x,因为每个节点只有一个可以工作
映射完整数据所需的时间: n/x,因为n是映射器完成数据所需的时间。
对于减少作业,与以前的映射相比,需要一半时间,因为它同时工作在两个映射器输出上:时间= n/2x,用于x节点上的x减速器
因此,接下来的每一步都要比前一步花费一半的时间。
t(n) = (n/x)*t(n/2x)
通过求解这个递推,我们得到了O((n/x)log(n/x))。
这不应该是精确的,而是近似的。
https://stackoverflow.com/questions/25593533
复制相似问题