Amazon EMR 5.0上的spark-submit executor-memory问题

时间:2016-08-12 16:19:58

标签: apache-spark amazon-ec2 amazon-emr

我启动了这样的Python Spark程序:

/usr/lib/spark/bin/spark-submit \
  --master yarn \
  --executor-memory 2g \
  --driver-memory 2g \
  --num-executors 2 --executor-cores 4 \
    my_spark_program.py

我收到错误:

  

所需的执行程序内存(2048 + 4096 MB)高于最大阈值   (5760 MB)这个集群!请检查值   'yarn.scheduler.maximum-allocation-mb'和/或   'yarn.nodemanager.resource.memory-MB'。

这是一个全新的EMR 5集群,包含一个主m3.2xlarge系统和两个核心m3.xlarge系统。一切都应该设置为默认值。我目前是唯一在此群集上只运行一个作业的用户。

如果我将执行程序内存从2g降低到1500m,则可行。这看起来非常低。 EC2 m3.xlarge服务器有15GB的RAM。这些是Spark工作者/执行者机器,他们没有其他目的,所以我想尽可能多地使用Spark。

有人可以解释我如何从拥有15GB的EC2工作者实例到能够仅为1.5GB分配Spark工作者吗?

开[http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/TaskConfiguration_H2.html]我看到yarn.nodemanager.resource.memory-mb的EC2 m3.xlarge默认值默认为11520MB,安装了HBase时为5760MB。我没有使用HBase,但我相信它已安装在我的集群上。删除HBase会释放大量内存吗? yarn.nodemanager.resource.memory-mb是否为可用内存设置了最相关的设置?

当我告诉spark-submit --executor-memory是每个核心还是整个工人?

当我收到错误Required executor memory (2048+4096 MB)时,第一个值(2048)是我传递给--executor-memory的,我可以更改它并看到相应的错误消息更改。第二个4096MB的价值是多少?我怎么能改变呢?我应该改变吗?

我尝试将此问题发布到AWS开发人员论坛(https://forums.aws.amazon.com/forum.jspa?forumID=52),我收到错误消息“已达到您的消息配额。请稍后重试。”什么时候我还没发布任何东西?为什么我没有权限在那里发帖?

1 个答案:

答案 0 :(得分:1)

是的,如果安装了hbase,它将默认使用相当多的内存。除非您需要,否则不应将其放在群集上。

如果只有1个核心节点,那么您的错误就有意义了。 6G(2个执行器为4G,驱动程序为2G)将比资源管理器分配的内存更多。使用2节点核心,您实际上应该能够分配3个2G执行程序。 1在带有驱动程序的节点上,2在另一个节点上。

通常,this sheet可以帮助确保您充分利用群集。