在Hadoop中超级模式的目的是什么?

时间:2016-07-07 16:32:50

标签: hadoop yarn

这里是Hadoop的新手。当作业在uber模式下运行时,ApplicationMaster不会从ResourceManager请求容器。相反,在单个节点上运行的AM只在自己的进程上执行整个作业。这是有利的,因为它减少了必须处理RM的开销。

我不明白:如果一份工作足够小,无法在一个节点上以合理的时间内完成,那么首先提交MapReduce工作有什么意义呢? MapReduce允许计算在多台机器上并行执行,从而加快了计算速度。如果我们只打算使用一个节点,为什么不编写一个常规程序并在我们的本地机器上运行它?

2 个答案:

答案 0 :(得分:1)

也许有些原因可能是:

  1. 您有一个可重复使用的进程,可以根据需要进行扩展,在这种情况下,它可能会开始使用更多的插槽而不是在超级模式下运行。
  2. 保持简单。你不太可能写一份工作,通常你会有许多处理不同数量的工作。为什么要改变事物并选择特定的工作来使用不同的方法来处理数据。
  3. 在MapReduce之外运行的程​​序可能会失去框架提供的许多额外好处,例如故障恢复。

答案 1 :(得分:0)

我在Apache Crunch中遇到的一个特殊情况是,管道由多个DoFn(其中编写核心逻辑)的多个MapReduce(MR)作业组成,每个DoFn结果都是一个Map和/或者减少其输出的作业,通常存储在不可变的分布式对象(PTable / PCollection)中,在此场景中,基于在PTable / PCollection上运行的这些DoFn处理的数据量,框架决定是否运行每个MR作业在超级或正常模式的管道中。因此,当我们查看此管道的最终作业计数器时,它可以是超级和/或正常MR作业的混合。

考虑另一种情况,即M / R作业在增量和满载模式下运行,其中相同的逻辑可以输入较少的数据,可由最少数量的Mapper和Reducer处理,也可以满负荷供给需要大量Mapper和Reducers处理的历史数据,基本上逻辑仍然相同,但输入分数的数据和数量会发生变化,在这种情况下,您不希望进出Hadoop集群来处理数据根据大小,让框架决定模式(超级或正常)。