2011-12-27 27 views

回答

6

为了做到这一点,你应该基本上寻找4件事:CPU,RAM,磁盘和网络。如果您的设置超出了这些指标的阈值,您可以推断出您正在推动限制。例如,如果您已将“mapred.reduce.parallel.copies”的值设置为远高于可用内核数的值,则基于此属性,您将等待处于等待状态的线程太多。线程将被创建以获取Map输出。除此之外,该网络可能会不堪重负。或者,如果有太多的中间输出需要洗牌,那么您的工作将会变慢,因为在这种情况下您将需要基于磁盘的洗牌,这将比基于RAM的洗牌慢。根据你的RAM选择一个明智的“mapred.job.shuffle.input.buffer.percent”值(默认为Reducer堆的70%,这通常很好)。所以,这些都会告诉你是否过度平行化。还有很多其他的事情你应该考虑。我建议您阅读“Hadoop Definitve Guide”第6章。

其中一些你可以采取,以使您的工作效率的措施,就像用组合来限制数据传输,使中间压缩等

HTH

PS:答案对于“mapred.reduce.parallel.copies”不是很具体。它会告诉你一般调整你的工作。其实说只设置这个属性是不会帮助你很多。你也应该考虑其他重要的属性。

+1

感谢您的见解! – 2013-04-30 13:59:45

1

实现“甜蜜点”实际上就是找到一个参数,使您可以根据您认为最重要(通常是整个工作时间)的任何度量标准获得最佳结果。要确定哪些参数正在工作,我建议使用Hadoop自带的以下分析工具,MrBench,TestDFSIO和NNBench。这些可以在hadoop-mapreduce-client-jobclient - *。jar中找到。

通过运行此命令,您将看到一长串基准程序,除了上面提到的基准程序外,您还可以使用它们。

的Hadoop ./share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*.jar

我会建议使用默认参数运行,运行测试,为了让基线基准,然后改变一个参数并重新运行。有点耗时,但值得,尤其是如果你使用脚本来改变参数和运行基准。

+0

使用此工具,是否有可能对hadoop流式作业进行基准测试? – 2013-04-29 08:35:29

+0

不直接没有。其中每一个都是完整的map/reduce程序,Hadoop Streaming需要指定的映射器和reducer。话虽如此,如果您查看代码并直接从罐中指定mapper和reducer类,那么仍然可以使用这些程序之一。我希望这样做的结果几乎与直接运行程序相同,但你必须尝试确定。 – greedybuddha 2013-04-29 14:27:18