自动设置Dataproc Cluster后,Yarn/Spark的内存分配不正确

hab*_*ats 10 hadoop google-cloud-platform google-cloud-dataproc

我正在尝试在Dataproc集群上运行Spark作业,但由于Yarn配置错误,Spark无法启动.

从shell(本地主服务器)运行"spark-shell"时,以及通过Web-GUI和本地计算机上的gcloud命令行实用程序上载作业时,我收到以下错误:

15/11/08 21:27:16 ERROR org.apache.spark.SparkContext: Error initializing     SparkContext.
java.lang.IllegalArgumentException: Required executor memory (38281+2679 MB) is above the max threshold (20480 MB) of this cluster! Please increase the value of 'yarn.s
cheduler.maximum-allocation-mb'.
Run Code Online (Sandbox Code Playgroud)

我尝试修改值,/etc/hadoop/conf/yarn-site.xml但它没有改变任何东西.我不认为它从该文件中提取配置.

我已尝试在多个站点(主要是欧洲)使用多个群集组合,而我只能使用低内存版本(4核,15 GB内存).

也就是说,这仅仅是配置为高于纱线默认允许的内存的节点上的问题.

Den*_*Huo 7

对于您遇到的这些问题,我们深表歉意!看起来这是已知问题的一部分,其中某些内存设置最终根据主机的大小而不是工作机的大小计算,我们希望很快就能在即将发布的版本中解决这个问题.

目前有两种解决方法:

  1. 使用内存等于或小于工作机类型的主机类型.
  2. --conf如果从SSH连接运行,则使用该标志显式设置spark.executor.memory和spark.executor.cores,如:

    spark-shell --conf spark.executor.memory=4g --conf spark.executor.cores=2
    
    Run Code Online (Sandbox Code Playgroud)

    或如果正在运行gcloud beta dataproc,请使用--properties:

    gcloud beta dataproc jobs submit spark --properties spark.executor.memory=4g,spark.executor.cores=2
    
    Run Code Online (Sandbox Code Playgroud)

您可以根据需要调整每个执行程序的核心数/内存数; 尽管你可以通过将spark.executor.memory设置为每个YARN容器和spark.executor中可用的完整大小来节省一些执行程序开销,但是在较小的执行程序上犯错并让YARN将大量执行程序包装到每个工作程序上都是错误的. .cores到每个工作者的所有核心.

编辑:截至1月27日,现在将为主/工作机器类型的任意组合正确配置新的Dataproc集群,如发行说明中所述.