比较MapReduce性能



我已经在一个节点中安装了hadoop mapreduce,我遇到了十大问题。

假设我有一个10k对数据(关键字、值),并搜索10个具有最佳值的数据。

事实上,我创建了一个简单的项目来迭代整个数据,我只需要几分钟就可以得到答案。

然后,我创建了十大设计模式的mapreduce应用程序来解决同样的问题,我需要4个多小时才能得到答案。(很明显,我使用相同的机器和相同的算法进行排序)

我认为,发生这种情况可能是因为mapreduce需要更多的服务来运行,需要更多的网络活动,需要更多精力来读取和写入hdfs。有其他因素可以证明mapreduce(在这种情况下)比不使用mapreduce慢吗?

mapreduce在单节点设置上较慢,因为在任何给定时间只有一个映射器和一个reducer可以对其进行操作。映射器必须迭代每个拆分,reducer同时处理两个映射器输出,然后处理两个这样的reducer输出,依此类推。

所以就复杂性而言:

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是1个映射器对完整数据所花费的时间

与之前的映射相比,减少作业需要一半的时间,因为它同时在两个映射器输出上工作,因此:对于x个节点上的x个减少器,时间=n/2x

因此,每个下一步所花费的时间将是前一步的一半。

t(n)=(n/x)*t(n/2x)

求解这个递归,我们得到O(((n/x)log(n/x))。

这不应该是精确的,而是一个近似

相关内容

  • 没有找到相关文章

最新更新