AWS中YARN为Spark分配容器疑问:核心数超配问题
Spark UI展示的是资源请求值,而非实际分配值
Spark UI中显示的每个Executor核数、总核数,是你通过--executor-cores=5、--num-executors=6配置的资源请求参数,不是YARN实际分配给容器的资源。YARN的ResourceManager会严格根据集群可用资源调度,不可能分配超过集群总vCore的容器,所以你看到的25核只是作业声明的需求,不是实际运行的资源。集群资源不足以支撑配置的请求
你的EMR集群主节点是m5.xlarge(4vCore),核心节点是c5.2xlarge(8vCore),总可用vCore约12(需扣除YARN守护进程占用的少量资源)。你配置的6个Executor(含Driver)每个5核,总请求25核,远超集群可用资源。此时YARN只会分配当前能提供的最大资源,剩余Executor会处于Pending状态,但Spark UI会把所有配置的Executor(包括Pending的)都列出,导致总核数看起来远超集群。Spark UI与YARN历史服务器的统计维度差异
Hadoop历史服务器统计的是实际运行的容器资源,即YARN成功调度并运行的容器的核数和内存;而Spark UI统计的是作业提交时的资源请求声明,两者统计逻辑完全不同,因此数值出现矛盾。验证真实资源分配的方法
访问EMR主节点的YARN ResourceManager UI(默认端口8088),找到该Spark作业的详情页,查看实际分配的容器数量、每个容器的核数和内存,就能看到真实状态:要么部分Executor处于Pending,要么每个Executor实际分配的核数远小于配置的5核。
内容的提问来源于stack exchange,提问作者PSD

