本文主要是介绍MapReduce算法 – 反转排序(Order Inversion),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
译者注:在刚开始翻译的时候,我将Order Inversion按照字面意思翻译成“反序”或者“倒序”,但是翻译完整篇文章之后,我感觉到,将Order Inversion翻译成反序模式是不恰当的,根据本文的内容,很显然,Inversion并非是将顺序倒排的意思,而是如同Spring的IOC一样,表明的是一种控制权的反转。Spring将对象的实例化责任从业务代码反转给了框架,而在本文的模式中,在mapreduce的sorting过程中,原来由框架负责的数据的排序以及shuffle规则被用户定制化了,控制权从框架反转到了user,实际上这种模式就是由用户控制sorting过程的意思本文是一系列有关MapReduce算法的文章中的一篇,这些算法都在《Data-Intensive Text Processing with MapReduce》中提到过。这系列文章在本文之前已经发表的有 本地聚合, 本地聚合二 和 建立共生矩阵。在这篇文章里我们要讨论的是排序反转模式。这种模式利用MapReduce的排序(sorting)阶段,让一部分数据提前发送到reducer端以利于后续计算,如果你对MapReduce了解不多,我劝你读下去,因为我将展示给你如何使用排序(sorting)和partitioner来实现我们的目的,这将会大有益处。
尽管已经有许多MapReduce框架提供了高层次的抽象,例如Hive和Pig,理解底层是如何运行的仍然是有好处的。反序模式出现在《Data-Intensive Text Processing with MapReduce》这本书的第三章, 为了说明反序模式,我们要用共生矩阵模式中出现过的配对方法。建立共生矩阵的时候我们可以记录下词共同出现的次数,我门会对配对方法做一个小小的修改,mapper不止输出诸如(“foo”,”bar”) 这样的词对,还会额外输出(“foo”,”*”)这样的词对,对于每个词都依此法办理,这样可以很容易的得出左边的这个词的总共出现次数,用这个就可以计算出相对频率。这种方法会带来两个问题,首先我们需要想办法保证让 (“foo”,”*”) 成为reducer 的第一条记录,其次我们要保证左边的词相同的所有的词对都被同一个reducer所处理,我们先来看mapper代码再解决这两个问题。
这篇关于MapReduce算法 – 反转排序(Order Inversion)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!