hadoop data join

概念:

Hadoop有一个叫DataJoin的包为Data Join提供相应的框架。它的Jar包存在于contrib/datajoin/hadoop-*-datajoin。

为区别于其他的data join技术,我们称其为reduce-side join。(因为我们在reducer上作大多数的工作)

reduce-side join引入了一些术语及概念:

1.Data Source:基本与关系数据库中的表相似,形式为:(例子中为CSV格式)

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

2.Tag:由于记录类型(Customers或Orders)与记录本身分离,标记一个Record会确保特殊元数据会一致存在于记录中。在这个目的下,我们将使用每个record自身的Data source名称标记每个record。

3.Group Key:Group Key类似于关系数据库中的链接键(join
key),在我们的例子中,group key就是Customer ID(第一列的3)。由于datajoin包允许用户自定义group
key,所以其较之关系数据库中的join key更一般、平常。

流程:(详见《Hadoop in Action》Chapter 5.2)

Advanced MapReduce:

Joining Data from different sources:

利用datajoin包来实现join:

  Hadoop的datajoin包中有三个需要我们继承的
类:DataJoinMapperBase,DataJoinReducerBase,TaggedMapOutput。正如其名字一样,我们的
MapClass将会扩展DataJoinMapperBase,Reduce类会扩展DataJoinReducerBase。这个datajoin包
已经实现了map()和reduce()方法,因此我们的子类只需要实现一些新方法来设置一些细节。

  

  在用DataJoinMapperBase和DataJoinReducerBase之前,我们需要弄清楚我们贯穿整个程序使用的新的虚数据类TaggedMapOutput。

  

  根据之前我们在图Advance
MapReduce的数据流中所展示的那样,mapper输出一个包(由一个key和一个value(tagged
record)组成)。datajoin包将key设置为Text类型,将value设置为TaggedMapOutput类型
(TaggedMapOutput是一个将我们的记录使用一个Text类型的tag包装起来的数据类型)。它实现了getTag()和setTag(Text tag)
方法。它还定义了一个getData()方法,我们的子类将实现这个方法来处理record记录。我们并没有明确地要求子类实现setData()方法,
但我们最好还是实现这个方法以实现程序的对称性(或者在构造函数中实现)。作为Mapper的输出,TaggedMapOutput需要是
Writable类型,因此的子类还需要实现readFields()和write()方法。

DataJoinMapperBase:

  回忆join数据流图,mapper的主要功能就是打包一个record使其能够和其他拥有相同group key的记录去向一个Reducer。DataJoinMapperBase完成所有的打包工作,这个类定义了三个虚类让我们的子类实现:

  protected abstract Text generateInputTag(String inputFile);

  protected abstract TaggedMapOutput generateTaggedMapOutut(Object value);

  protected abstract Text generateGroupKey(TaggedMapOutput aRecored);

  

  在一个map任务开始之前为所有这个map任务会处理的记录定义一个tag(Text),结果将保存到DataJoinMapperBase的inputTag变量中,我们也可以保存filename至inputFile变量中以待后用。

  在map任务初始化之后,DataJoinMapperBase的map()方法会对每一个记录执行。它调用了两个我们还没有实现的虚方法:generateTaggedMapOutput()以及generateGroupKey(aRecord);(详见代码)

DataJoinReducerBase:

DataJoinMapperBase将我们所需要做的工作以一个full outer join的方式简化。我们的Reducer子类只需要实现combine()方法来滤除掉我们不需要的组合来得到我们需要的(inner join, left outer join等)。同时我们也在combiner()中将我们的组合格式化为输出格式。

时间: 2024-10-27 20:32:25

hadoop data join的相关文章

前端编程提高之旅(八)----D3.js数据可视化data join解析

   D3.js作为一门轻型的可视化类库,非常便于将数据与web界面元素绑定,实现可视化.乐帝d3.js入门是大体看了一遍<d3js数据可视化实战>这本书,D3操作非常类似于jquery的使用,具体体现在两点: 选择器模块都采用CSS3标准 方法可以链式调用    有了jquery使用基础,相信再加上以上书籍的例子,调试很容易上手使用D3.js,乐帝目前认为D3.js与jquery区别在于:D3.js独有的数据结构概念及对SVG操作方便的实现.而深入理解D3原理,以上皮毛的理解就不够用了.  

explore your hadoop data and get real-time results

deep api integration makes getting value from your big data easy 深度api集成使你大数据访问更加容易 Elasticsearch is quickly becoming the de facto search and analytics solution that organizations are using to provide real-time insights into their Hadoop data. Elasti

Six Key Hadoop Data Types

1. Sentiment  How your customers feel Understand how your coustomer feel about your brand and products right now. 2. Clickstream Website visitors' data Capture and analyze website visitors' data trails and optimize your website. 3. Sensor/Machine Dat

hadoop 2.5.2源码编译

编译过程漫长无比,错误百出,需要耐心耐心!! 1.准备的环境及软件 操作系统:Centos6.4 64位 jdk:jdk-7u80-linux-x64.rpm,不要使用1.8 maven:apache-maven-3.3.3-bin.tar.gz protobuf:protobuf-2.5.0.tar.gz 注:谷歌的产品,最好是提前百度准备一下这个文件 hadoop src:hadoop-2.5.2-src.tar.gz     hadoop的官网下载 ant:apache-ant-1.9.6

Hadoop1.1 和Hadoop 2.4 集群安装版

目录 1 环境准备... 4 1.1 硬件配置... 4 1.2 软件... 4 1.3 网络拓扑结构... 4 1.4 系统分区... 5 1.5 虚拟机配置... 5 1.6 SSH免密码登录... 5 1.7 JDK安装... 7 2 Hadoop1.2.1安装及配置... 8 2.1 下载Hadoop安装介质... 8 2.2 解压Hadoop安装介质... 9 2.3 Hadoop配置文件... 9 2.4 复制Hadoop安装介质... 10 2.5 配置HADOOP_HOME. 1

linux编译64bitHadoop (eg: ubuntu14.04 and hadoop 2.3.0)

Hadoop官网提供的编译好的hadoop-2.3.0.tar.gz二进制包是在32位系统上编译的,在64系统上运行会有一些错误,比如: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 此时需要自行编译hadoop 2.30 源码.本人编译的hadoop 2.30的二进制包经实验证明可以

CentOS 6.4 64位 源码编译hadoop 2.2.0

CentOS 6.4 64位 源码编译hadoop 2.2.0 搭建环境:Centos 6.4 64bit 1.安装JDK 参考这里2.安装mavenmaven官方下载地址,可以选择源码编码安装,这里就直接下载编译好的wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.zip解压文件后,同样在/etc/profie里配置环境变量vim /etc/profieexport

CentOS 64位上编译 Hadoop 2.6.0

1.操作系统编译环境 yum install cmake lzo-devel zlib-devel gcc gcc-c++ autoconf automake libtool ncurses-devel openssl-devel libXtst 2.安装JDK 下载JDK1.7,注意只能用1.7,否则编译会出错 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html tar zxvf

Mac搭建Hadoop源码阅读环境

1.本次Hadoop源码阅读环境使用的阅读工具是idea,Hadoop版本是2.7.3.需要安装的工具包括idea.jdk.maven.protobuf等 2.jdk,使用的版本是1.8版,在jdk官网下载jdk-8u111-macosx-x64.dmg,点击安装,一路next. 3.idea安装,略 4.maven,使用的版本是3.3.9,下载apache-maven-3.3.9-bin.tar,解压: tar -zxvf  apache-maven-3.3.9-bin.tar 进入 Mave