可以将任务和减少任务映射到同一节点吗?

时间:2014-02-20 09:30:44

标签: hadoop map reduce

我是关于Hadoop的新手,因为map节点和reduce节点之间的数据传输可能会降低MapReduce的效率,为什么不将map任务和reduce任务放在同一个节点中呢?

3 个答案:

答案 0 :(得分:2)

实际上,如果数据太小,你可以在同一个JVM中运行map和reduce。它可以在Hadoop 2.0(又名 YARN )中使用,现在称为 Ubertask

来自伟大的“Hadoop:The Definitive Guide”书:

  

如果作业很小,应用程序主机可以选择在与自身相同的JVM中运行任务。当它判断在新容器中分配和运行任务的开销超过并行运行它们时所获得的收益,而不是在一个节点上顺序运行它们时,就会发生这种情况。 (这与MapReduce 1不同,MapReduce 1中的小作业永远不会在单个任务跟踪器上运行。)据说这样的工作是超级的,或者作为一项超级任务运行。

答案 1 :(得分:1)

要处理的数据量太大,这就是我们在单独节点中进行map和reduce的原因。如果要处理的数据量很小,那么绝对可以在同一节点上使用Map和Reduce。

当数据量非常大时,通常会使用Hadoop,因为高可用性和并发性,map和reduce操作都需要单独的节点。

希望这能清除你的怀疑。

答案 2 :(得分:0)

当组合多个映射器和缩减器以在Application Master中执行时,会发生Uber作业。 假设,要执行的作业具有 MAX Mappers< = 9; MAX Reducers< = 1 ,然后资源管理器(RM)创建一个Application Master,并使用其自己的JVM在Application Master中很好地执行作业。

SET mapreduce.job.ubertask.enable = TRUE;

因此,使用Uberised作业的优势在于,应用程序主机执行的往返开销,通过向资源管理器(RM)请求容器以及RM将容器分配给应用程序主服务器来消除。