AWS EMR 中的 Spark 物理内存问题

Posted

技术标签:

【中文标题】AWS EMR 中的 Spark 物理内存问题【英文标题】:Spark Physical memory issue in AWS EMR 【发布时间】:2018-07-12 22:51:44 【问题描述】:

我正在尝试使用 AWSEMR 中的默认设置执行 spark 作业,这意味着默认容器内存为 1.4GB。对于某些表,它工作正常,当我们处理大容量表时,我们会遇到错误。

诊断:应用程序 application_1527024725057_17128 失败 2 次,原因是用于 appattempt_1527024725057_17128_000002 的 AM 容器退出并退出代码:-104 有关更详细的输出,请查看应用程序跟踪页面:http://ip-10-179-106-153.us-west-2.compute.internal:8088/cluster/app/application_1527024725057_17128Then,单击指向每次尝试日志的链接。 诊断:容器 [pid=12379,containerID=container_1527024725057_17128_02_000001] 运行超出物理内存限制。当前使用情况:已使用 1.4 GB 的 1.4 GB 物理内存;使用了 3.7 GB 的 6.9 GB 虚拟内存。杀死容器。

当数据超过 1.4GB 时,YARN 资源管理器正在终止该作业并以失败状态执行。我需要一些帮助来解决上述问题。

更改 yarn-site.xml 中的任何属性值(“例如内存开销和容器内存”)也不起作用。除了最大化集群大小之外,当您处理大量数据时,理想的配置是什么。

【问题讨论】:

您为什么要尝试在 1.4 GB 内存中运行专为更大机器设计的大数据应用程序?今天 2 GB 的内存很小。在大数据世界中,它很小。我的 iPhone 有 3 GB 的内存。如果您有 1.4 的物理内存并且正在使用 3.7 GB 的虚拟内存,那么您的实例已经严重超载。您需要升级到至少 5.1 GB 的内存(这意味着 8GB 实例)。 我们使用 4 节点开发集群,总共 80 GB。在 QA/Prod 中,我们肯定会有更大的发展。因为我们只处理样本数据(总共不超过 30 GB),所以不需要更大的集群。不确定如何利用最大可用内存。正在寻找合适的配置。 【参考方案1】:

调整执行器和驱动程序内存对我有帮助

spark-submit --deploy-mode cluster --executor-memory 4g --driver-memory 4g s3://mybucket/myscript.py

【讨论】:

以上是关于AWS EMR 中的 Spark 物理内存问题的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 mapreduce/hive 作业中的物理内存?

在 AWS EMR 中使用 spark-submit 启动 Python 应用程序

AWS EMR 火花提交选项 - 失败

aws emr 上的 spark 集群找不到 spark-env.sh

AWS EMR 上的 Spark:使用更多执行器

Spark AWS emr 检查点位置