首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

MapReduce之Join操作(一)

2012-09-28 
MapReduce之Join操作(1)在关系型数据库中join是非常常见的操作,各种优化手段已经到了极致。在海量数据的环

MapReduce之Join操作(1)

在关系型数据库中join是非常常见的操作,各种优化手段已经到了极致。在海量数据的环境下,不可避免的也会碰到这种类型的需求,例如在数据分析时需要连接从不同的数据源中获取到的数据。不同于传统的单机模式,在分布式存储的下采用MapReduce编程模型,也有相应的处理措施和优化方法。

本文对Hadoop中最基本的join方法进行简单介绍,这也是其它许多方法和优化措施的基础。文中所采用的例子来自于《Hadoop in Action》一书中的5.2节。假设两个表所在的文件分别为Customers和Orders,以CSV格式存储在HDFS中。

1,Stephanie Leung,555-555-5555
2,Edward Kim,123-456-7890
3,Jose Madriz,281-330-8004
4,David Stork,408-555-0000

3,A,12.95,02-Jun-2008
1,B,88.25,20-May-2008

2,C,32.00,30-Nov-2007
3,D,25.02,22-Jan-2009

这里的Customer ID是连接的键,那么连接的结果:

1,Stephanie Leung,555-555-5555,B,88.25,20-May-2008
2,Edward Kim,123-456-7890,C,32.00,30-Nov-2007
3,Jose Madriz,281-330-8004,A,12.95,02-Jun-2008
3,Jose Madriz,281-330-8004,D,25.02,22-Jan-2009

????? 回忆一下Hadoop中MapReduce中的主要几个过程:依次是读取数据分块,map操作,shuffle操作,reduce操作,然后输出结果。简单来说,其本质在于大而化小,分拆处理。显然我们想到的是将两个数据表中键值相同的元组放到同一个reduce结点进行,关键问题在于如何做到?具体处理方法是将map操作输出的key值设为两表的连接键(如例子中的Customer ID),那么在shuffle阶段,Hadoop中默认的partitioner会将相同key值得map输出发送到同一个reduce结点。所以整个过程如下图所示:

MapReduce之Join操作(一)
MapReduce之Join操作(一)

??????? 这种方法称为Repartition Join,同时它进行join操作是在reduce阶段进行,也属于Reduce-side Join;在Hadoop中contrib目录下的datajoin就是采用的这种方法。

热点排行