在 YARN 中,应用程序主机向资源管理器请求资源,以便可以启动该应用程序的容器。
-
应用程序主节点是否在启动第一个容器之前等待分配所有资源,或者它为每个容器请求,并在获取容器的资源时开始启动该特定容器?即当只有部分资源可用时的情况如何?它是否等待资源被释放?还是根据可用资源继续?
MR 应用程序主机如何确定 MR 作业的资源要求?YARN MR 客户端是否确定这一点并将其发送到 AM 或 AM 找到它?如果是这样,这是基于什么?我相信这是可配置的,但我可能正在谈论未提供内存、CPU 的默认情况。
不,AM 不会等待分配所有资源。相反,它会在资源管理器向其提供资源时调度/启动容器。
驱动程序创建作业时,在作业配置中定义每个容器请求的大小。如果未为作业显式设置值,则使用 mapred-site 和 mapred-default 中的值(请参阅 https://hadoop.apache.org/docs/r2.7.1/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml)作为 mapreduce.map.memory.mb、mapreduce.reduce.memory.mb mapreduce.map.cpu.vcores 和 mapreduce.reduce.cpu.vcore 的默认值。如何将这些值转换为授予的资源有点复杂,并且基于正在使用的调度程序、最小容器分配设置等。
我不确定 MR 应用程序主机是否会请求的最大容器数,而不是(映射器的输入拆分 #)+(化简器的数量)。MR 应用程序主数据将在处理完容器后释放容器(例如,如果您有 1,000 个映射器容器,但只有 20 个化简器,则一旦不再需要其他 980 个容器,它将释放它们)。