MapReduce的Join业务

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端。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值