假设我们的 YARN 系统中有 5 个容器。我们有两个工作要做。Job1 有 8 个映射任务和 2 个化简任务。Job2 有 4 个映射任务和 1 个归约任务。YARN 系统将如何决定首先运行哪些任务?以及将同时启动多少个映射器和减速器?
YARN 系统将如何决定首先运行哪些"任务"?这是一个地图缩减工作。因此,首先执行地图任务。现在,作业执行的顺序(我想这是您的真正问题)取决于所使用的调度程序。FIFO使用先进先出 - 这在生产环境中不再使用,因为我们有容量和公平调度程序等选项。这又是一个广泛的话题。https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/FairScheduler.html https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html 执行还取决于提交作业时可用的群集资源。
有多少个映射器和化简器将同时启动?化简器(至少是reduce方法)将仅在之后执行所有地图任务均已完成。您提到了容器的数量,但没有提到节点的数量。并发执行取决于您分配给映射和减少任务的内存。看看这些属性:yarn.scheduler.minimum-allocation-mb,yarn.scheduler.maximum-allocation-mb,yarn.nodemanager.resource.memory-mb,mapreduce.map.memory.mb,mapreduce.reduce.memory.mb。
更新 1:随机播放和排序将在其中一个地图任务完成的那一刻开始。这意味着当其他映射任务仍在执行时,分区(以及合并数据,如果运行合并器)映射器输出将被传输到化简器。但是,只有在完成此传输过程后才会调用reduce方法(对于完成后的所有映射任务)。是的,到那时容器分配已经发生。