map-side-join /Reduce-side-join

一、Mapreduce-join概念
Mapreduce-join分为两种:实例:祖孙三代的关系连接
(1)、map-side-join 即在map端进行join,会在map端读取所有数据并
进行join过滤。
【Map-side-join】
Map-side-join思想:分布式缓存文件,读到内存中.
Map-side-join实用场景:在那些需要处理的表中,存
在一个非常大的表和一个非常小的表时,可以将小表
的数据放到内存中。放到内存即是将小表文件通过
DistinctCache放到HDFS服务器,并读取到HashMap、List
等数据结构中,在maptask执行前将其发送到此次Job需
要启动map的节点上。
=======================================================

(2)、Reduce-side-join 是一种常见的较为简单的join方式。即在
reduce端进行join。
在map阶段读取所有的数据源,然后输出key为join的字段,然后
输出的value为不同表中的信息。不同表中的数据一般需要加标志,
以便在reduce阶段接收到进行处理。

【Reduce-side-join】
Reduce-side-join 主要思想:
educe side join是一种最简单的join方式,其主要思想如下:

步骤1:在map阶段,map函数同时读取两个文件File1和File2,为了区
分两种来源的key/value数据对,对每条数据打一个标签(tag),
比如:tag=1表示来自文件File1,tag=2表示来自文件File2。
即:map阶段的主要任务是对不同文件中的数据打标签。

步骤2:在reduce阶段,reduce函数获取key相同的来自File1和File2
文件的value list, 然后对于同一个key,对File1和File2中的数据
进行join(笛卡尔乘积)。即:reduce阶段进行实际的连接操作。

为什么有Reduce-side-join ?
主要是因为join字段在不同的map中,再不同的map中去join数据,
这肯定是不全面和不精准的,同时还会产生一个弊端,
就是Reduce-side-join 的这个效率是非
常低下的,因为shuffle过程中需要对大量数据进行传输,
消耗时间即低效率。

【优缺点】
A、Map端join的好处是可以提前过滤掉join中需要排除的大量数据,会减少数据的传输。
B、Reduce端做join是比较灵活,然后缺点是需要做大量数据传输、和整个shuffle过程都是耗时,
咱们尽量在,因为知道reduce中才做join即对数据进行筛选。
Reduce-side-join做join时, 尽量在map阶段过滤掉不需要的数据。
Reduce-side-join做join时,要考虑能不能高效的再map端做join。

DistributedCache主要做文件分布式缓存,即文件复制,使用如下:
(1)用户使用静态方法DistributedCache.addCacheFile()
(2)用户使用DistributedCache.getLocalCacheFiles()方法获取文件目录,并使用标准的文件读写API读取相应的文件。
(3)缓存文件存放在 mapreduce.tmp.local.dir属性设置的位置下
(4)文件将会复制到将会运行maptask的节点上


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值