把Join作为实现的核心部分的高级框架:Pig Hive Cascading Cruc Spark
连接操作取决于数据集的规模和分区方式
1 如果其中一个数据集很小,可以分发到各个MR节点上连接
2 如果两个数据集都很大,需要考虑如何使用map端连接和reduce端连接
mapper执行连接称为 mapper端连接
reducer执行连接称为reduce端连接
map端连接
数据到达map函数之前连接
> 输入数据必须先分区并且以特定方式排序
> 输入数据集划分成相同数量的分区,按照相同的键排序
> 同一个键的所有记录放在一个分区中
使用CompsiteInputFormat运行map端连接
org.apache.hadoop.examples.Join中有一个程序样例
reduce端连接
不要求输入集合特定结构,更常用
> 两个数据集都需要经过shuffle,效率低些
> mapper为记录标记源,使用连接键作为map输出键,键相同则输出到同一个reducer
1 多输入
MultipleInputs
2 辅助排序
reducer选出不同数据源中键相同的记录,不保证记录是有序的,一般是将一个源的数据排列在另一个源数据之前。
使用辅助排序协助完成