这里是Hadoop的新手。当作业在uber模式下运行时,ApplicationMaster不会从ResourceManager请求容器。相反,在单个节点上运行的AM只在自己的进程上执行整个作业。这是有利的,因为它减少了必须处理RM的开销。
我不明白:如果一份工作足够小,无法在一个节点上以合理的时间内完成,那么首先提交MapReduce工作有什么意义呢? MapReduce允许计算在多台机器上并行执行,从而加快了计算速度。如果我们只打算使用一个节点,为什么不编写一个常规程序并在我们的本地机器上运行它?
答案 0 :(得分:1)
也许有些原因可能是:
答案 1 :(得分:0)
我在Apache Crunch中遇到的一个特殊情况是,管道由多个DoFn(其中编写核心逻辑)的多个MapReduce(MR)作业组成,每个DoFn结果都是一个Map和/或者减少其输出的作业,通常存储在不可变的分布式对象(PTable / PCollection)中,在此场景中,基于在PTable / PCollection上运行的这些DoFn处理的数据量,框架决定是否运行每个MR作业在超级或正常模式的管道中。因此,当我们查看此管道的最终作业计数器时,它可以是超级和/或正常MR作业的混合。
考虑另一种情况,即M / R作业在增量和满载模式下运行,其中相同的逻辑可以输入较少的数据,可由最少数量的Mapper和Reducer处理,也可以满负荷供给需要大量Mapper和Reducers处理的历史数据,基本上逻辑仍然相同,但输入分数的数据和数量会发生变化,在这种情况下,您不希望进出Hadoop集群来处理数据根据大小,让框架决定模式(超级或正常)。