火花中的执行程序内存设置

时间:2016-03-24 14:39:45

标签: apache-spark

我制作了独立群集,希望找到处理我的应用的最快方法。 我的机器有12g内存。这是我尝试过的一些结果。

Test A (took 15mins)
1 worker node
spark.executor.memory = 8g
spark.driver.memory = 6g

Test B(took 8mins)
2 worker nodes
spark.executor.memory = 4g
spark.driver.memory = 6g

Test C(took 6mins)
2 worker nodes
spark.executor.memory = 6g
spark.driver.memory = 6g

Test D(took 6mins)
3 worker nodes
spark.executor.memory = 4g
spark.driver.memory = 6g

Test E(took 6mins)
3 worker nodes
spark.executor.memory = 6g
spark.driver.memory = 6g
  1. 比较测试A,测试B只做了一个woker(但相同的内存花费4 * 2 = 8)但它使应用程序快。为什么会这样?
  2. 测试C,D,E试图花费比它更多的内存。但它工作甚至更快。是配置内存大小只是为了限制内存的边缘?
  3. 它不仅仅与添加工作节点一样快。我怎么知道工人的利润数和执行人的记忆大小?

1 个答案:

答案 0 :(得分:1)

在TestB上,您的应用程序在2个CPU上并行运行,因此总时间几乎为一半。

关于记忆 - 记忆设定定义上限设定少量会使你的记忆。应用程序执行更多GC,如果最终你的堆满了,你将收到OutOfMemoryException

关于最合适的配置 - 嗯,这取决于。如果您的任务不占用大量RAM - 将Spark配置为具有与CPU相同的执行程序。 否则,配置执行程序以匹配所需的适当RAM量。 请记住,这些限制不应该是不变的,并且可能会因您的应用程序要求而改变。