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. 连接两个红宝石哈希通过按键