Spark显示的内核数量与使用spark-submit传递给它的内核数量不同

Gid*_*eon 5 apache-spark

TL; DR

Spark UI显示的核心和内存数量不同于我在使用spark-submit时所要求的数量

更多细节:

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

在此输入图像描述

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

spark.executor.memory 5g
spark.executor.cores 1
spark.executor.instances 1
spark.driver.cores 1
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢

Jon*_*aws 6

TL; DR

使用spark.cores.max而不是定义可用的内核总数,从而限制执行人的数量.


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

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

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

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

一些旁注:

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

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