apache-spark - 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'
谢谢!
解决方案
你可以利用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 将是免费的,可用于后台进程。
推荐阅读
- python - Pandas:获取最后一个、倒数第二个、倒数第二个月份的值
- c++ - Unix域套接字和写缓冲区溢出
- c# - 实现分页用户的更好方法
- extjs - 经典和现代的煎茶套餐
- github - 从 Marketplace 中“取消发布”GitHub Action 是如何工作的?可能吗?发布的版本安全吗?
- azure-devops - 如何为 Azure DevOps 代理设置一个不过期的令牌?
- sql - 如何计算选择查询中的百分比变化
- php - CodeIgniter 使用 Gmail SMTP 发送电子邮件
- php - 如何从两个相关表中收集数据
- python - Optuna 超参数优化:定义目标函数之外的超参数空间