提升 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.
所以我 google 知道如何做到这一点,发现我应该传递带有 --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'
谢谢。
几个小时后,我找到了这个问题的解决方案。创建集群时,我需要传递以下标志作为参数:
--configurations file://./sparkConfig.json\
JSON 文件包含:
[
{
"Classification": "spark-defaults",
"Properties": {
"spark.executor.memory": "10G"
}
}
]
这允许我在下一步中使用我最初发布的参数增加 memoryOverhead。
如果您登录到 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
来控制堆大小。
希望这对您有所帮助...
我正在尝试 运行 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.
所以我 google 知道如何做到这一点,发现我应该传递带有 --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'
谢谢。
几个小时后,我找到了这个问题的解决方案。创建集群时,我需要传递以下标志作为参数:
--configurations file://./sparkConfig.json\
JSON 文件包含:
[
{
"Classification": "spark-defaults",
"Properties": {
"spark.executor.memory": "10G"
}
}
]
这允许我在下一步中使用我最初发布的参数增加 memoryOverhead。
如果您登录到 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
来控制堆大小。
希望这对您有所帮助...