Spark调整工作

时间:2017-01-17 15:40:52

标签: apache-spark yarn

我在调整Yarn集群上执行的Spark作业时遇到问题。我有一种感觉,我没有得到我的大部分群集,此外,我的工作失败了(执行者一直被删除)。

我有以下设置:

  • 4台机器
  • 每台机器都有10GB的RAM
  • 每台机器有8个核心
  • 为纱线作业分配8GB的RAM
  • 为纱线作业分配14个(16个)虚拟核心

我使用不同的设置运行我的火花作业(实际连接到jupyter笔记本),例如。

pyspark --master yarn --num-executors 7 --executor-cores 4 --executor-memory 3G

pyspark --master yarn --num-executors 7 --executor-cores 7 --executor-memory 2G

pyspark --master yarn --num-executors 11 --executor-cores 4 --executor-memory 1G

我尝试了不同的组合,但是当我的遗嘱执行人员被摧毁时,他们似乎都没有工作。另外,我已经在某个地方读到,将spark.yarn.executor.memoryOverhead增加到600MB是一种很好的方法,可以放弃执行程序(我这样做了),但似乎并没有帮助。我该如何安排工作?

此外,当我查看ResourceManager UI时,它说我的工作vcores使用了8个vcores,共计56个。我觉得我每个执行器都使用一个核心,但我并不感到困惑。明白为什么?

还有一件事,当我设置我的工作时,当我从HDFS读取数据以获得最佳性能时,我应该指定多少个分区?

1 个答案:

答案 0 :(得分:0)

唐纳德克努特说过早优化是万恶之源。我确信更快的运行程序失败是没有用的。首先将所有内存提供给一个执行程序。说7GB / 8GB,只有1个核心。这是核心的完全浪费,但如果它有效,它证明您的应用程序可以在这个硬件上运行。即使这不起作用,你也应该尝试使用更大的机器。假设它有效,请尝试增加核心数量,直到它仍然有效。 参数的要点是:您的应用程序每个任务需要一定的内存。但每个执行程序运行的任务数量取决于核心数量。首先为您的应用程序找到每个内核的最坏情况内存,然后您可以将执行程序内存和内核设置为此数字的某个倍数。