Join业务专题
join在数据库中表示表连接
在MapReduce中表示对两份数据data1和data2进行关键词连接(Join),连接不同类型文件的数据
案例
原数据:
commodity -> 02 小米手机
order -> 001 02 10
需求:
001 02 小米手机 10
利用Reducer实现Join操作
思想比较中规中矩,但是代码比较复杂。
把处理逻辑的核心放在reduce端
1)原理分析:
Map端的主要工作:为来自不同表(文件)的key/value对打标签以区别不同来源的记录。
Reduce端的主要工作:在reduce端以连接字段作为key的分组已经完成,我们只需要在每一个分组当中将那些来源于不同文件的记录(在map阶段已经打标志)分开,最后进行合并就可以了。
或
自定义writable,重写排序方法,自定义grouping类
map端:获取输入文件,根据文件每行长度判断类型,打标签,输出 key–自定义类,value–NullWritable
reduce端:迭代value 获取不同的key,判断标签,最后合并,统一输出
2)缺点分析
会造成Map和Reduce流程对接过程中也就是Shuffle阶段出现大量的数据传输,效率很低。并且这种方式中,合并的操作是在Reduce阶段完成,Reduce端的处理压力太大,Map节点的运算负载则很低,资源利用率不高,且在Reduce阶段极易产生数据倾斜。
利用Mapper实现Join操作
思想比较巧妙,代码比较简单。只适用于大小表join的情况
把处理逻辑的核心放在map端。