dataproc 上的 spark 默认设置,尤其是 spark.yarn.am.memory

spark default settings on dataproc, especially spark.yarn.am.memory

关于 google dataproc,我想知道 spark 设置是如何确定的?就我而言,我是 运行 一个 3 节点 n1-standard-4 集群,自动生成的 spark-defaults.conf 看起来像这样:

    # User-supplied properties.
    #Fri Dec 16 12:01:47 UTC 2016
    spark.yarn.am.memoryOverhead=558
    spark.executor.memory=5586m
    spark.executor.cores=2
    spark.driver.memory=3840m
    spark.yarn.executor.memoryOverhead=558
    spark.driver.maxResultSize=1920m
    spark.yarn.am.memory=5586m

我想知道为什么要这样设置配置,尤其是为什么 spark.yarn.am.memory 设置得那么高?据我了解,此设置仅在客户端模式下生效,在客户端模式下,驱动程序在提交机器(主机)上运行。此外,AM "only" 负责为工作进程请求资源并协调这些资源。为什么 am.memory 应该那么高?在我的场景中,此默认设置实际上意味着我只能在客户端模式下启动一个 spark 进程,因为集群中的任何地方都没有可用的 RAM 用于第二个 AM。 (这实际上是我观察到的,也是我首先查看配置的原因)。

那么,我的问题又来了:dataproc 启动脚本如何决定如何设置这些值,其背后的合理性是什么,为什么 am.memory 应该特别高?

默认情况下,Dataproc 将分配给每个 NodeManager 的内存的一半分配给 Spark AppMaster 和 Executors(无论节点大小如何)。

为什么 AppMaster 这么大是个好问题。唯一真正的答案是在小型虚拟机上支持 YARN 集群模式。 Dataproc 还针对单租户临时集群进行了优化,因此如果没有其他小容器可以打包,缩小 AppMaster 也无济于事。

Dataproc 团队正在努力改进默认配置(在未来的映像版本中)。如果您有任何建议,非常欢迎您通过 cloud-dataproc-feedback@google.com.

与我们联系