首页 > 解决方案 > EMR集群中如何限制spark job的最大内存消耗?

问题描述

我在同一个 EMR 集群中运行了多个流式 Spark 作业和批处理 Spark 作业。最近有一个batch的spark job编程错误,消耗了很多内存。导致主节点没有响应,其他所有的spark作业都卡住了,这意味着整个EMR集群基本宕机了。

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

火花作业在客户端模式下运行,火花提交 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'

在此处输入图像描述

谢谢!

标签: apache-sparkspark-streamingamazon-emr

解决方案


你可以利用yarn.nodemanager.resource.memory-mb

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

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


推荐阅读