在你坚持不住的时候,记得告诉自己:想一千次,不如去做一次。华丽地跌倒,胜过无谓地徘徊。任何时候你不放弃,一切都还有可能。只要你满怀希望,就会所向披靡。——人民日报
Join多种应用
Reduce Join
Reduce Join工作原理
Map端的主要工作:
为来自不同表或文件的key/value对,打标签以区别不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。
Reduce端的主要工作:
在Reduce端以连接字段作为key的分组已经完成,我们只需要在每一个分组当中将那些来源于不同文件的记录(在Map阶段已经打标
志)分开,最后进行合并就ok了。
Reduce Join案例实操及代码
通过将关联条件作为Map输出的key,将两表满足Join条件的数据并携带数据所来源的文件信息,发往同一个ReduceTask,在Reduce中进行数据的串联,如图所示:
Reduce Join的缺陷及解决方案
缺点:这种方式中,合并的操作是在Reduce阶段完成,Reduce端的处理压力太大,Map节点的运算负载则很低,资源利用率不高,且在Reduce阶段极易产生数据倾斜。
解决方案: Map端实现数据合并
Map Join
mapJoin概念
1.使用场景
Map Join适用于一张表十分小、一张表很大的场景。
2.优点
思考:在Reduce端处理过多的表,非常容易产生数据倾斜。怎么办?
在Map端缓存多张表,提前处理业务逻辑,这样增加Map端业务,减少Reduce端数据的压力,尽可能的减少数据倾斜。
3.具体办法:采用DistributedCache
(1)在Mapper的setup阶段,将文件读取到缓存集合中。
(2)在驱动函数中加载缓存。
// 缓存普通文件到Task运行节点。
job.addCacheFile(new URI(“file://e:/cache/pd.txt”));
Map Join案例实操及代码
需求分析
MapJoin适用于关联表中有小表的情形
- 本文作者: xubatian
- 本文链接: http://xubatian.cn/hadoop模块组成之Join多种应用/
- 版权声明: 本博客所有文章除特别声明外均为原创,采用 CC BY 4.0 CN协议 许可协议。转载请注明出处:https://www.xubatian.cn/