我启动了这样的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),我收到错误消息“已达到您的消息配额。请稍后重试。”什么时候我还没发布任何东西?为什么我没有权限在那里发帖?
答案 0 :(得分:1)
是的,如果安装了hbase,它将默认使用相当多的内存。除非您需要,否则不应将其放在群集上。
如果只有1个核心节点,那么您的错误就有意义了。 6G(2个执行器为4G,驱动程序为2G)将比资源管理器分配的内存更多。使用2节点核心,您实际上应该能够分配3个2G执行程序。 1在带有驱动程序的节点上,2在另一个节点上。
通常,this sheet可以帮助确保您充分利用群集。