首页 文章

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

提问于
浏览
2

我启动了这样的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 回答

  • 1

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

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

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

相关问题