繁体   English   中英

提升spark.yarn.executor.memoryOverhead

[英]Boosting spark.yarn.executor.memoryOverhead

我正在尝试在EMR上运行一个处理大量数据的(py)Spark作业。 目前我的工作失败,出现以下错误消息:

Reason: Container killed by YARN for exceeding memory limits.
5.5 GB of 5.5 GB physical memory used.
Consider boosting spark.yarn.executor.memoryOverhead.

所以我谷歌如何做到这一点,并发现我应该使用--conf标志传递spark.yarn.executor.memoryOverhead参数。 我是这样做的:

aws emr add-steps\
--cluster-id %s\
--profile EMR\
--region us-west-2\
--steps Name=Spark,Jar=command-runner.jar,\
Args=[\
/usr/lib/spark/bin/spark-submit,\
--deploy-mode,client,\
/home/hadoop/%s,\
--executor-memory,100g,\
--num-executors,3,\
--total-executor-cores,1,\
--conf,'spark.python.worker.memory=1200m',\
--conf,'spark.yarn.executor.memoryOverhead=15300',\
],ActionOnFailure=CONTINUE" % (cluster_id,script_name)\

但是当我重新运行这个工作时,它一直给我同样的错误信息,使用5.5 GB of 5.5 GB physical memory used ,这意味着我的内存没有增加..任何关于我做错的提示?

编辑

以下是我最初如何创建群集的详细信息:

aws emr create-cluster\
--name "Spark"\
--release-label emr-4.7.0\
--applications Name=Spark\
--bootstrap-action Path=s3://emr-code-matgreen/bootstraps/install_python_modules.sh\
--ec2-attributes KeyName=EMR2,InstanceProfile=EMR_EC2_DefaultRole\
--log-uri s3://emr-logs-zerex\
--instance-type r3.xlarge\
--instance-count 4\
--profile EMR\
--service-role EMR_DefaultRole\
--region us-west-2'

谢谢。

如果您已登录到EMR节点并希望在不处理AWSCLI工具的情况下进一步更改Spark的默认设置,则可以在spark-defaults.conf文件中添加一行。 Spark位于EMR的/ etc目录中。 用户可以通过导航或编辑/etc/spark/conf/spark-defaults.conf直接访问该文件

所以在这种情况下,我们将spark.yarn.executor.memoryOverhead附加到spark-defaults文件的末尾。 该文件的结尾看起来与此示例非常相似:

spark.driver.memory              1024M
spark.executor.memory            4305M
spark.default.parallelism        8
spark.logConf                    true
spark.executorEnv.PYTHONPATH     /usr/lib/spark/python
spark.driver.maxResultSize       0
spark.worker.timeout             600
spark.storage.blockManagerSlaveTimeoutMs 600000
spark.executorEnv.PYTHONHASHSEED 0
spark.akka.timeout               600
spark.sql.shuffle.partitions     300
spark.yarn.executor.memoryOverhead 1000M

同样,可以使用--executor-memory=xg标志或spark.executor.memory property控制堆大小。

希望这可以帮助...

几个小时后,我找到了解决这个问题的方法。 在创建集群时,我需要将以下标志作为参数传递:

--configurations file://./sparkConfig.json\

使用包含以下内容的JSON文件:

[
    {
      "Classification": "spark-defaults",
      "Properties": {
        "spark.executor.memory": "10G"
      }
    }
  ]

这允许我使用最初发布的参数在下一步中增加memoryOverhead。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM