【发布时间】:2014-03-21 03:30:35
【问题描述】:
我是Hadoop新手,既然map节点和reduce节点之间的数据传输可能会降低MapReduce的效率,为什么不把map任务和reduce任务放在同一个节点呢?
【问题讨论】:
我是Hadoop新手,既然map节点和reduce节点之间的数据传输可能会降低MapReduce的效率,为什么不把map任务和reduce任务放在同一个节点呢?
【问题讨论】:
当多个 mapper 和 reducer 组合在 Application Master 中执行时,就会发生 Uber Job。 因此,假设要执行的作业具有 MAX Mappers ,然后资源管理器 (RM) 创建一个 Application Master 并使用它自己的 JVM 在 Application Master 内很好地执行作业。
SET mapreduce.job.ubertask.enable=TRUE;
因此,使用 Uberised 作业的优势在于,应用程序主机通过从资源管理器 (RM) 向容器请求作业以及 RM 将容器分配给应用程序主机而执行的往返开销被消除了。
【讨论】:
实际上,如果数据太“小”,您可以在同一个 JVM 中运行 map 和 reduce。这在 Hadoop 2.0(又名 YARN)中是可能的,现在称为 Ubertask。
来自伟大的“Hadoop:权威指南”一书:
如果作业很小,应用程序主控可以选择在与自己相同的 JVM 中运行任务。当它判断在新容器中分配和运行任务的开销超过了在一个节点上按顺序运行它们相比并行运行它们所获得的收益时,就会发生这种情况。 (这与 MapReduce 1 不同,在 MapReduce 1 中,小型作业永远不会在单个 tasktracker 上运行。)这样的作业被称为 uberized,或作为 uber 任务运行。
【讨论】:
要处理的数据量太大,这就是为什么我们在单独的节点中进行 map 和 reduce。如果要处理的数据量很小,那么绝对可以在同一个节点上使用 Map 和 Reduce。
Hadoop 通常在数据量非常大的情况下使用,在这种情况下,为了实现高可用性和并发性,map 和 reduce 操作都需要单独的节点。
希望这能消除您的疑虑。
【讨论】: