Join应用

一、Reduce Join

   Map端的主要工作:为来自不同表或文件的key/value对,打标签以区别不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。

   Reduce端的主要工作:在Reduce端以连接字段作为key的分组已经完成,我们只需要在每一个分组当中将那些来源于不同文件的记录(在Map阶段已经打标志)分开,最后进行合并就ok了。

 

总结:

   缺点:这种方式中,合并的操作是在Reduce阶段完成,Reduce端的处理压力太大,Map节点的运算负载则很低,资源利用率不高,且在Reduce阶段极易产生数据倾斜。

   解决方案:Map端实现数据合并

 

数据倾斜:指在并行计算模式下(hadoop的MR框架下,数据被切分为N个片段,分发到不同的计算节点上,单独计算),单个计算节点获得的数据远远大于其他节点,造成该节点计算压力过大,导致计算效率下降或计算内存溢出,同工不同酬。

   举例:如果有10亿数据,一台电脑可能要10小时,现在集群有10台,可能1小时就够了,但是有可能大量的数据集中到一台或几台上,要5小时,发生了数据倾斜。

 

 

二、Map Join

使用场景:使用于一张表非常小,一张表非常大的场景。

 

优点:

   思考:在Reduce端处理过多的表,非常容易产生数据倾斜。怎么办?

   在Map端缓存多张表,提前处理业务逻辑,这样增加Map端业务,减少Reduce端数据的压力,尽可能的减少数据倾斜。

 

具体方法:采用DistributedCache

   (1)在Mapper的setup阶段,将文件读取到缓冲集合中。

   (2)在Driver驱动类中加载缓存。

 

posted @ 2022-07-26 17:14  小王同学学编程  阅读(32)  评论(0编辑  收藏  举报
levels of contents