使用 Google Cloud Dataproc 在 YARN 上启动意外数量的执行者

Spark on YARN unexpected number of executors with Google Cloud Dataproc

我正在尝试在集群上提交一个 spark 应用程序,在 GCP Dataproc 上具有以下规范:

根据我在 YARN 上找到的有关内存和执行程序调优的指南,我得出了以下应用程序参数值:

spark = SparkSession.builder \
    .appName("test") \
    .master("yarn")\
    .config('spark.submit.deployMode','client')\
    .config("spark.executor.instances", "3")\
    .config("spark.executor.memory","10g")\
    .config("spark.executor.cores","3")\
    .enableHiveSupport() \
    .getOrCreate()  

spark.executor.memory 而言,我应该完全符合限制,因为我为 OS 和 Hadoop 守护进程保留了 1gb RAM,因此考虑到内存开销,我的限制应该是

max(384MB, .07 * spark.executor.memory)---> max(384MB, .07*14GB)=max(384mb,0,98GB)= approx 1GB

所以 15-2GB=13GB,为了安全起见,我指定了 10GB。
可用内核为 4-1=3,因为正如我刚才所说,保留了 1 个内核。

我希望在应用程序中看到 UI 3 个执行程序,但我只得到 2 个,我也尝试通过指定 spark.executor.cores=2 而不是 2 无济于事。

我是不是漏掉了什么?

谢谢

Dataproc默认启用Spark动态分配,所以需要设置spark.dynamicAllocation.enabled=false使用静态分配。

另请注意,YARN NodeManager 不会获取所有工作节点内存,其中一部分 (~20%) 是为包括 NodeManager 本身在内的服务保留的。检查 YARN UI 或实际内存的配置。