since it is local.# This feature, known as data locality, is at the heart of MapReduce and
is the reason for its good performance. Recognizing that network bandwidth is the most
precious resource in a data center environment (it is easy to saturate network links by
copying data around), MapReduce implementations go to great lengths to conserve it
by explicitly modelling network topology. Notice that this arrangement does not preclude
high-CPU analyses in MapReduce.
Mapreduce尝试用计算机节点去收集数据,因此数据的访问就是很快的了,因为这些数据是本地的。(发腾添加:读到这句话就对一些问题很明白了,mapreduce是让每个计算机节点单独访问网络,获取每个节点要处理的数据,而不是根节点从网上获取数据,然后将数据、任务分派到每个节点。这样的话,就没有了根节点宽带瓶颈这么一说了。Ko,继续翻译)这个特点,称作数据本地化,是mapreduce的核心部分,并且是mapreduce性能优越的原因。意识到,在数据环境中,网络宽带是最珍贵的资源,(到处拷贝数据很容易就使网络上的链接饱和了),mapreduce依靠准确的模拟网络拓扑结构,需要更长的时间来保存他的数据。(笔者注:这里说的也即是高延时了)。
在一个大的分布式计算中协调多线程是一个挑战。最困难的方面是优雅的处理局部的失败,——当你不知道一个远程的处理是否失败的时候,——此时你还要让整个计算进度继续向前。
Mapreduce使程序员摆脱了关注处理的失败,因为mapreduce实现了检测失败的map或reduce任务,把他们从新部署到健康度机器上。Mapreduce能够做到这点是因为,他是一个分享nothing的架构,这意味着,每一个任务与其他的任务是没有依赖关系的。(这是一个轻微的过度简简单化,因为,mappers的输出时reducers的输入,但这是在mapreduce系统的控制下;在这种情况下,它需要更多的关心重新运行一个失败的reducer而不是一个失败的map计算,因为它需要确定它可以检索到需要的map计算的输出值,如果没有的话那么就运行相关的map计算来重新生成一次)。这样的话,从程序员的角度来讲,任务运行的顺序是不重要的。与mapreduce相比,MPI程序员就必须准确的管理他们自己的检查点和恢复,这样给了程序员更多的控制权,但,同时让程序员写代码更难了。