相比于傳統的MapReudce,MaxCompute提供的擴展MapReduce模型(簡稱MR2)改變了底層的調度和IO模型,可避免作業時冗余的IO操作。
與MaxCompute相比,MR2在Map、Reduce等函數編寫方式上基本一致,較大的不同點發生在執行作業時,示例請參見Pipeline示例。
MR2模型產生背景
傳統的MapReduce模型要求在經過每一輪MapReduce操作后,得到的數據結果必須存儲到分布式文件系統中(例如,HDFS或MaxCompute數據表)。MapReduce模型通常由多個MapReduce作業組成,每個作業執行完成后都需要將數據寫入磁盤,然而后續的Map任務很可能只需要讀取一遍這些數據,為之后的Shuffle階段做準備,這種情況就產生了冗余的磁盤IO操作。
MaxCompute的計算調度邏輯可以支持更復雜的編程模型, 針對上述情況,可以在Reduce后直接執行下一次的Reduce操作,而不需要中間插入一個Map操作。因此,MaxCompute提供了擴展的MapReduce模型,即可以支持Map后連接任意多個Reduce操作,例如Map>Reduce>Reduce。
與Hadoop Chain Mapper/Reducer對比
Hadoop Chain Mapper/Reducer也支持類似的串行化Map或Reduce操作,但和MaxCompute的擴展MapReduce(MR2)模型有本質的區別。
Chain Mapper/Reducer基于傳統的MapReduce模型,僅可以在原有的Mapper或Reducer后增加一個或多個Mapper操作(不允許增加Reducer)。這樣的優點是,您可以復用之前的Mapper業務邏輯,把一個Map或Reduce拆成多個Mapper階段,同時本質上并沒有改變底層的調度和I/O模型。