我启动了这样的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
是每个核心还是整个 Worker ?
当我收到错误 Required executor memory (2048+4096 MB)
时,第一个值(2048)是我传递给 --executor-memory
的内容,我可以更改它并看到相应的错误消息更改 . 第二个4096MB的 Value 是多少?我怎么能改变呢?我应该改变吗?
我试图将此问题发布到AWS开发人员论坛(https://forums.aws.amazon.com/forum.jspa?forumID=52),当我甚至没有发布任何内容时,我收到错误"Your message quota has been reached. Please try again later."?为什么我没有权限在那里发帖?
1 回答
是的,如果安装了hbase,它将默认使用相当多的内存 . 除非您需要,否则不应将其放在群集上 .
如果只有一个核心节点,那么您的错误就有意义了 . 6G(2个 Actuator 为4G,驱动程序为2G)将比资源管理器分配的内存更多 . 使用2节点核心,您实际上应该能够分配3个2G执行程序 . 1在带有驱动程序的节点上,2在另一个节点上 .
通常,this sheet可以帮助确保您充分利用群集 .