MapReduce:大型集群上的简化数据处理
MapReduce适应于大规模的worker故障。例如,在一个MapReduce操作中,在运行中的集群上的网络维护导致了一组80台机器在几分钟内无法到达。MapReduce master简单地重新执行无法到达的worker机器的工作且继续前进,最终完成MapReduce操作。
当用户提供的map和reduce操作是它们他们的输入值的特定函数时,我们的分布式实现生成的输出将与整个程序的无错顺序执行生成的输出相同。 我们依靠map和reduce任务输出的原子的提交来实现这一性质。每个正在进行的task将其输出写入私有临时文件中。一个reduce task生成一个这样的文件,map task生成R个这样的文件(每个reduce task一个)。当一个map task完成后,worker发送一条消息给master,这条消息中包含了R个临时文件的名字。如果master接收到了来自一个已完成的map task的完成消息,它将忽略这条消息。否则,它将这R个文件名记录到master数据结构中。 当一个reduce task完成后,reduce worker自动重命名其临时输出文件为最终输出文件。如果同一个reduce task在多台机器上执行,同一个最终输出文件的多个重命名调用将被执行。我们依靠由底层文件系统提供的原子的重命名操作来保证最终文件系统状态仅包含来自一个reduce任务执行生成的数据。 绝大多数的map和reduce操作是确定的,事实上,我们的语义等价于这种情况下的一次顺序执行,这使得程序员能够非常容易地推断程序的行为。当 map 和/或 reduce 操作不确定时,我们提供了较弱但仍然合理的语义。在不确定操作存在时,一个特定reduce task R1的输出等价于由非确定性程序的一次顺序执行R1生成的输出。然而,另一个不同的reduce task R2的输出可能对应该非确定性程序的另一个不同顺序执行R2的输出。 考虑map task M和reduce task R1和R2。令 e(Ri) 作为作为R1的执行(这确实是一个这样的执行)。较弱的语义出现因为 e(R1) 可能读取了M的一次执行生成的输出,e(R2)可能读取了M的另一次执行生成的输出。 3.4 局部性 (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |