导语
EMR用户常常会将使用不同资源管理系统的组件混合部署在同一个集群,这样会出现资源竞争的情况。若各组件资源超额配置,可能有机器宕机的风险。本文将从案例分析来聊聊混部集群资源配置需要注意的事项
背景
EMR用户反馈多台机器发生了重启,影响集群使用,需要查明原因
定位分析及原因
1、从宕机机器选了一台,在EMR控制台查看该节点资源监控,可以看出机器宕机的直接原因是内存被打爆。什么原因导致的呢
2、继续查看宕机时间点前几分钟的节点监控发现,presto-server,yarn消耗内存占到了90%多,yarn还在不停的分配container资源。
3、查看yarn、presto组件的资源配置项,发现yarn可使用节点内存资源达90%,而presto-server可占用节点内存资源为48G,不算其他组件和机器操作系统的资源占用,这两项远远超出了机器内存的128G。到此定位这次宕机原因是组件资源超额配置。
扩展
EMR集群常用的计算组件比如hive,spark,flink可以使用yarn作为其资源管理系统,但假如集群部署了hbase,impala,presto,storm等组件,就有必要考虑集群资源使用分配的问题,以防超额配置导致节点宕机的风险。下面介绍下各组件与节点有关的资源配置项。
1、yarn 计算资源由yarn-site.xml
中的以下配置项决定
yarn.nodemanager.resource.memory-mb yarn最大可用节点内存
yarn.nodemanager.resource.cpu-vcores yarn最大可用节点vcore,默认情况和节点cpu相同
2、impala 内存资源由impalad.flgs
以下配置项决定
-mem_limit 单个Impalad节点上能用到的内存上限
3、presto 内存由config.properties
以下配置决定
query.max-memory-per-node 单个Query在单个Worker上允许的最大user memory
query.max-total-memory-per-node: 单个Query在单个Worker上允许的最大user memory system memory
4、hbase 需注意RegionServer的堆占用内存的大小,另外还需考虑到预留操作系统和datanode等其他进程内存