一、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的节点上
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的节点上