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

时间:2015-11-08 21:37:11

标签: 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'.

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

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

即。这只是配置内存高于纱线默认允许的节点的问题。

1 个答案:

答案 0 :(得分:7)

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

目前有两种解决方法:

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

    spark-shell --conf spark.executor.memory=4g --conf spark.executor.cores=2
    

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

    gcloud beta dataproc jobs submit spark --properties spark.executor.memory=4g,spark.executor.cores=2
    
  3. 您可以根据需要调整每个执行程序的核心数/内存数;尽管你可以通过将spark.executor.memory设置为每个YARN容器中可用的完整大小来节省一些执行程序开销,但是在较小的执行程序方面犯错并让YARN将大量执行程序包装到每个工作程序上都没问题。和spark.executor.cores到每个worker中的所有核心。

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