鏈接預排序和預分區過的數據

    Map-side joins 是最有效的技術,前面的兩種 map-side 策略都要求其中有一個數據集可被加載到內存。可是,若是兩個數據集都很大且沒法」瘦身」而沒法作到這一點時,該怎麼辦?在這種狀況下,若是知足如下條件,則能夠使用複合的 map-side join:ide

  • 兩個數據集都沒法總體加載到內存中.orm

  • 兩個數據集都按 join key 排好了序blog

  • 每一個數據集都有相同的文件數.排序

  • 在每一個數據集中的 File N 都包含相同的 join key K.內存

  • 每一個文件的大小都小於一個 HDFS block,這樣分區時不會被 split者,或者用於該數據的 input split不會切分該文件。input

下圖顯示了一個排序的和分區的文件的例子,這些文件能夠用於複合鏈接。it

應用場景:
想要在排序的、分區的數據上執行一個 map-side join。解決方案:
使用 MapReduce 自帶的 CompositeInputFormat。CompositeInputFormat 功能至關強大,而且支持內鏈接和外鏈接。map

相關文章
相關標籤/搜索