3
A
回答
7
地圖邊加入
在地圖端(片段重複)加入,你保留在內存中一個數據集(中說哈希表)和加入其他的數據集,記錄逐記錄。在豬,你會寫
edges_from_list = JOIN a_follows_b BY user_a_id, some_list BY user_id using 'replicated';
照顧,較小的數據集是在權。這非常有效,因爲沒有網絡開銷和最小的CPU需求。
減少加入
在減少側加入,你組上連接鍵使用Hadoop的標準歸併排序。
<user_id {A, B, F, ..., Z}, { A, C, G, ..., Q} >
,放出記錄每對元素從第一組與第二組的元素:
[A user_id A]
[A user_id C]
...
[A user_id Q]
...
[Z user_id Q]
你應該設計自己的鍵,以便與記錄每最少的數據集關鍵是首先 - 你需要將第一個組保存在內存中,然後流過第二個組。在Pig中,對於標準連接,通過將最大的數據集最後完成。 (與片段複製連接相反,內存數據集最後給出)。
請注意,對於地圖端聯接,較小數據集的整體必須適合內存。在標準的reduce方聯接中,只有每個鍵的組必須適合內存(實際上除了最後一個鍵外,每個鍵的組)。甚至可以避免這種限制,但需要小心;例如在Pig中的skewed join。
合併加入
最後,如果兩個數據集存儲在總的排序順序上的連接鍵,你可以做在地圖上側的合併連接。與縮減端連接相同,您可以對連接鍵執行合併排序,然後在對上進行投影(拼合)。
正因爲如此,當生成一個經常讀取的數據集時,在最後一遍中進行全面排序通常是一個好主意。 Zebra和其他數據庫也可能爲您提供(幾乎)免費的總分類輸入。
0
Hadoop的這些連接都是合併連接,它們需要事先進行(明確)排序。另一方面,哈希聯接不需要排序,而是通過一些哈希函數對數據進行分區。 詳細的討論可以在Jimmy Lin和Chris Dyer的Data-Intensive Text Processing with MapReduce的「關係連接」一節中找到,這本書是一本免費且開源的書。
相關問題
- 1. 通過Hadoop實現Elasticsearch和Splunk連接
- 2. 將連接與Hadoop連接
- 3. 用哈希密碼連接到MySQL?
- 4. 哈希連接不按要求運行
- 5. 連接紅寶石哈希鍵
- 6. 哈希連接需要全表掃描
- 7. 如何用鏈接實現哈希表?
- 8. 實現並行連接
- 9. 如何實現連接池?
- 10. Greenplum與遠程Hadoop連接
- 11. Pig和Hadoop連接錯誤
- 12. 如何正確實現連接池的Hibernate連接工廠
- 13. 連接四個哈希函數:映射關閉元素以關閉哈希鍵
- 14. 哈希表實現
- 15. 哈希碼實現
- 16. 左連接上的內部連接使左連接表現爲內連接
- 17. 實現差異連接和右外連接在LINQ
- 18. 如何連接哈希表中的鍵和值?
- 19. Jenkins哈希的Python實現?
- 20. Jenkins哈希的Javascript實現?
- 21. 實現哈希表的
- 22. 嘗試連接到datanode時拒絕hadoop連接
- 23. 無法使用mongo-hadoop連接器將Hive與MongoDB連接
- 24. 哈希錶鏈接
- 25. 理解哈希表與鏈接的實現的問題
- 26. JDBC連接是如何實現的?
- 27. 實現連接控制的RESTful方式
- 28. P2P連接的NAT遍歷實現
- 29. 用於SCTP連接的DTLS實現
- 30. 連接兩個紅寶石哈希通過按鍵