2016-06-16 52 views
0

time ../bin/spark-submit --master yarn --deploy-mode cluster --driver-memory 2g --executor-memory 3G --num-executors 100 /var/tmp/learning/Movie-Similarities-1m-hdfs.py 260星火可调专门执行内存

了:6m5.293s

time ../bin/spark-submit --master yarn --deploy-mode cluster --driver-memory 2g --executor-memory 2G --num-executors 100 /var/tmp/learning/Movie-Similarities-1m-hdfs.py 260

了:5m46.234s

time ../bin/spark-submit --master yarn --deploy-mode cluster --driver-memory 3g --executor-memory 4G --num-executors 100 /var/tmp/learning/Movie-Similarities-1m-hdfs.py 260​

了:9m35 .313s

我知道我(有意)超额订购了num-executors,那只是为了充分利用集群。

对这些结果有何看法?

+0

你跑了多少次才能得到结果? – giaosudau

回答

0

对这些结果有何看法?

与更少的执行器(内存更多)相比,您的代码运行速度更快,更多的执行器(内存更少)。通常会有一个最佳平衡,这取决于工作流程和群集的硬件。真正找到这个最佳点的唯一方法是通过试验和错误。

也就是说,我通常发现更少的执行者拥有更多的资源,通常表现更好。你没有试图控制的一件事是执行者将使用的CPU内核的数量。为了启动执行器,需要有足够的可用内存和足够的CPU内核。如果你的两个测试都是内存绑定的(例如,资源管理器在耗尽内核之前耗尽内存),那么2G执行器测试将使用两倍于4G测试的CPU内核。如果两个测试都是CPU核心绑定,那么4G测试将利用2G测试的两倍内存。长话短说,值得考虑每个执行者获得的核心数量。我创建了一个spreadsheet,它可以帮助您管理这些折衷。