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 :(得分:0)
对这些结果的任何观察?
与更少的执行程序(具有更多内存)相比,您的代码运行速度更快,执行程序更多(内存更少)。通常存在最佳平衡,这取决于工作流程和群集的硬件。真正找到这个最佳点的唯一方法是通过反复试验。
也就是说,我通常会发现更少的执行器具有更多的资源,通常表现更好。您未尝试控制的一件事是执行程序将使用的CPU核心数。为了启动执行程序,需要有足够的可用内存和足够的CPU内核。如果两个测试都受内存限制(例如,资源管理器在内核耗尽之前内存不足),则2G执行器测试将使用两倍于4G测试的CPU内核。如果两个测试都是CPU核心绑定,那么4G测试将使用2G测试的两倍内存。
长话短说,考虑每个执行者获得的核心数量是值得的。我创建了一个spreadsheet,可以帮助您管理这些权衡。