Hadoop 中的兩表join

2021-06-23 07:58:06 字數 1080 閱讀 9271

作為資料分析中經常進行的join 操作,傳統dbms 資料庫已經將各種演算法優化到了極致,而對於hadoop 使用的mapreduce 所進行的join 操作,去年開始也是有各種不同的算**文出現,討論各種演算法的適用場景和取捨條件,本文討論hive 中出現的幾種join 優化,然後討論其他演算法實現,希望能給使用hadoop 做資料分析的開發人員提供一點幫助.

facebook 今年在yahoo 的hadoop summit 大會上做了乙個關於最近兩個版本的hive 上所做的一些join 的優化,其中主要涉及到hive 的幾個關鍵特性: 值分割槽 , hash 分割槽 , map join , index ,

common join

最為普通的join策略,不受資料量的大小影響,也可以叫做reduce side join ,最沒效率的一種join 方式. 它由乙個mapreduce job 完成.

首先將大表和小表分別進行map 操作, 在map shuffle 的階段每乙個map output key 變成了table_name_tag_prefix + join_column_value , 但是在進行partition 的時候它仍然只使用join_column_value 進行hash.

每乙個reduce 接受所有的map 傳過來的split , 在reducce 的shuffle 階段,它將map output key 前面的table_name_tag_prefix 給捨棄掉進行比較. 因為reduce 的個數可以由小表的大小進行決定,所以對於每乙個節點的reduce 一定可以將小表的split 放入記憶體變成hashtable. 然後將大表的每一條記錄進行一條一條的比較.

map join

map join 的計算步驟分兩步,將小表的資料變成hashtable廣播到所有的map 端,將大表的資料進行合理的切分,然後在map 階段的時候用大表的資料一行一行的去探測(probe) 小表的hashtable. 如果join key 相等,就寫入hdfs.

map join 之所以叫做map join 是因為它所有的工作都在map 端進行計算.

hive 在map join 上做了幾個優化:

Hadoop 中的兩表join

作為資料分析中經常進行的join 操作,傳統dbms 資料庫已經將各種演算法優化到了極致,而對於hadoop 使用的mapreduce 所進行的join 操作,去年開始也是有各種不同的算 文出現,討論各種演算法的適用場景和取捨條件,本文討論hive 中出現的幾種join 優化,然後討論其他演算法實現...

Hadoop中兩表JOIN的處理方法

hadoop中兩表join的處理方法 在reduce階段join。map階段標記資料來自哪個檔案,比如來自file1標記tag 1,來自file2標記tag 2。reduce階段把key相同的file1的資料和file2的資料通過笛卡爾乘積join在一起。個人理解 舉個例子 file1 有 file...

hadoop中join的基本應用

map端的主要工作 為來自不同表或檔案的key value對打標籤以區別不停 的記錄。然後用連線字段作為key,其餘部分和新加部分的標誌作為value,最後進行輸出。reduce段主要工作 在reduce端以連線字段作為key的分組已經完成,我們只需要在每乙個分組當中將那些 於不同檔案的記錄 在ma...