Spark使用spark-submit

时间:2016-06-13 08:11:46

标签: apache-spark

TL; DR

Spark UI显示的内核和内存数量与我在使用spark-submit

时的要求不同

更多详情:

我在独立模式下运行Spark 1.6。 当我运行spark-submit时,我传递了1个执行程序实例,其中1个核心用于执行程序,还有1个核心用于驱动程序。 我期望发生的是我的应用程序将运行总共2个核心。 当我检查UI上的环境选项卡时,我看到它收到了我给它的正确参数,但它看起来仍然使用不同数量的核心。你可以在这里看到它:

enter image description here

这是我正在使用的spark-defaults.conf:

spark.executor.memory 5g
spark.executor.cores 1
spark.executor.instances 1
spark.driver.cores 1

检查Spark UI上的环境选项卡显示这些确实是收到的参数,但UI仍显示其他内容

有没有人知道什么可能导致Spark使用不同于我想要传递的内核数量的内核?我显然尝试使用谷歌搜索,但没有找到任何有用的主题

提前致谢

1 个答案:

答案 0 :(得分:6)

TL; DR

使用spark.cores.max来定义可用的核心总数,从而限制执行者的数量。

独立模式中,使用贪心策略,并且会创建尽可能多的执行程序,因为您的工作人员可以使用核心和内存。

在您的情况下,您为每个执行程序指定了1个内核和5GB内存。 以下内容将由Spark计算:

  • 由于有8个核可用,它将尝试创建8个执行程序。
  • 但是,由于只有30GB的可用内存,它只能创建6个执行程序:每个执行程序将有5GB内存,最多可增加30GB。
  • 因此,将创建6个执行程序,共使用6个内核和30GB内存。

Spark基本上满足了你的要求。为了实现您的目标,您可以使用spark.cores.max记录here选项,并指定所需的确切核心数。

一些附注:

  • spark.executor.instances是仅限YARN的配置
  • spark.driver.memory默认为1核

我也在努力简化独立模式下执行程序数量的概念,这可能会集成到Spark的下一个版本中,并希望能够帮助确定您将拥有的执行程序的数量,而无需计算它在旅途中。