微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何限制 EMR 集群中 Spark 作业的最大内存消耗?

如何解决如何限制 EMR 集群中 Spark 作业的最大内存消耗?

我在同一个 EMR 集群中运行了多个流式 Spark 作业和批处理 Spark 作业。最近,一个batch spark job写错了,消耗了很多内存。导致master节点无响应,其他spark作业卡住,整个EMR集群基本宕机。

有什么方法可以限制 Spark 作业可以消耗的最大内存吗?如果 spark 作业消耗太多内存,则可能会失败。但是,我们不希望整个 EMR 集群宕机。

spark 作业在客户端模式下运行,spark submit cmd 如下。

spark-submit --driver-memory 2G --num-executors 1 --executor-memory 2G --executor-cores 1 --class test.class s3://test-repo/mysparkjob.jar
 'Classification':'yarn-site','Properties':{
            'yarn.nodemanager.disk-health-checker.enable':'true','yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage':'95.0','yarn.nodemanager.localizer.cache.cleanup.interval-ms': '100000','yarn.nodemanager.localizer.cache.target-size-mb': '1024','yarn.nodemanager.pmem-check-enabled': 'false','yarn.nodemanager.vmem-check-enabled': 'false','yarn.log-aggregation.retain-seconds': '12000','yarn.log-aggregation-enable': 'true','yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds': '3600','yarn.resourcemanager.scheduler.class': 'org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.Fairscheduler'

enter image description here

谢谢!

解决方法

您可以使用 yarn.nodemanager.resource.memory-mb

The total amount of memory that YARN can use on a given node.

示例:如果您的机器有 16 GB Ram, 并且您将此属性设置为 12GB ,将启动最多 6 个执行程序或驱动程序(因为您使用每个执行程序/驱动程序 2gb)并且 4 GB 将是免费的,可用于后台进程。>

,

选项 1: 您可以在 spark-submit 模式而不是 cluster 模式下运行 client。这样,您的主人将始终可以自由地执行其他工作。如果您想节省成本,您可以选择较小的主实例。

优点:由于将在 CORE 上创建 Spark 驱动程序,因此您可以为其添加自动缩放功能。您将能够使用 100% 的集群资源。在这里阅读更多Spark yarn cluster vs client - how to choose which one to use?


选项 2: 您可以创建纱线队列,并将内存繁重的作业提交到单独的队列。

假设您配置了 2 个队列,Q1Q2。您将 Q1 配置为最多占用总资源的 80%,并向 Q2 提交正常作业,因为它没有最大限制。但在内存繁重的作业的情况下,您选择队列 Q1


看到您的要求,我认为选项 1 更适合您。并且易于实施,无需更改基础设施。
但是,当我们在 emr-5.26.0 中使用选项 2 时,我们在配置纱线队列时遇到了许多挑战。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?