4.1.2 復制連接(Replication join)
復制連接是map端的連接。復制連接得名於它的具體實現:連接中最小的數據集將會被復制到所有的map主機節點。復制連接有一個假設前提:在被連接的數據集中,有一個數據集足夠小到可以緩存在內存中。
如圖4.5所示,MapReduce復制連接工作原理如下:
- 使用分布式緩存(Districubted cache)將這個小數據集復制到所有運行map任務的節點。
- 用各個map任務初始化方法將這個小數據集裝載到一個哈希表(hashtable)中。
- 逐條用大數據集中的記錄遍歷這個哈希表,逐個判斷是否符合連接條件。
- 輸出符合連接條件的結果。
復制連接的實現非常直接明了。更具體的內容可以參考《Hadoop in Action》。附錄D.2提供了一個通用的框架來實現復制連接(http://www.cnblogs.com/datacloud/p/3617078.html)。這個框架支持任意類型的InputFormat和OutputFormat的數據。(我們將在下一個技術中使用這個框架。)復制連接框架根據內存足跡的大小從分布式緩存的內容和輸入塊(input split)兩者中動態地決定需要緩存的對象。
如果所有的輸入數據集都不能夠小到可以放到緩存中,那有沒有辦法來優化map端連接呢?那就到了看半連接(semi-join)的時間了。