`

Mapreduce《案例之内连接》

阅读更多

Mapreduce《案例之内连接》

 

数据源:

child parent

Tom Lucy

Tom Jack

Jone Lucy

Jone Jack

Lucy Mary

Lucy Ben

Jack Alice

Jack Jesse

Terry Alice

Terry Jesse

Philip Terry

Philip Alma

Mark Terry

Mark Alma

 

输出结果为:

grandChildgrandParent

TomAlice

TomJesse

JoneAlice

JoneJesse

TomMary

TomBen

JoneMary

JoneBen

PhilipAlice

PhilipJesse

MarkAlice

MarkJesse

 

===================================JAVA  CODE ======================

package gq;

 

 

import java.io.IOException;

import java.util.Iterator;

import java.util.StringTokenizer;

 

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.Mapper;

import org.apache.hadoop.mapreduce.Reducer;

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

 

/**

 * 

 * Class Description:自连接,爷找孙子测试类

 *

 * Author:gaoqi  

 *

 * Date:2015年6月5日 下午2:03:08  

 *

 */

public class OwnerJoin {

 

public static int TIME = 0;

 

public static class Map extends Mapper<Object, Text, Text, Text>{

public void map(Object key,Text value,Context context) throws IOException, InterruptedException{

String line = value.toString();

String childname = "";

String parentname="";

String flag = "";

 

StringTokenizer stk = new StringTokenizer(line);

String[] _values = new String[2];

int i= 0;

while(stk.hasMoreElements()){

_values[i]=stk.nextToken();

i++;

}

if(_values[0].compareTo("child") !=0){

childname = _values[0];

parentname = _values[1];

 

flag = "1";//left table

context.write(new Text(parentname), new Text(flag+"-"+childname+"-"+parentname));

 

flag="2";//right table

context.write(new Text(childname), new Text(flag+"-"+childname+"-"+parentname));

}

 

}

 

}

public static class Reduce extends Reducer<Text, Text, Text, Text>{

 

public void reduce(Text key,Iterable<Text> values,Context context) throws IOException, InterruptedException{

 

 

String[] pArray = new String[10];

String[] cArray = new String[10];

int pnum = 0;

int cnum = 0;

 

Iterator<Text> vals = values.iterator();

while(vals.hasNext()){

String recod = vals.next().toString();

String[] ss = recod.split("-");

String flag = ss[0];

String childname = ss[1];

String parentname = ss[2];

System.out.println(flag+"-"+childname+"--"+parentname);

if(flag.equals("1")){

cArray[cnum] = childname;

cnum++;

}elseif(flag.equals("2")){

pArray[pnum] = parentname;

pnum++;

}

}

if(TIME ==0){

context.write(new Text("grandChild"), new Text("grandParent"));

  TIME++;

}

if(pnum != 0 && cnum !=0 ){

for(int j=0;j<cnum;j++){

for(int k=0;k<pnum;k++){

context.write(new Text(cArray[j]), new Text(pArray[k]));

}

 

}

}

 

}

}

 

 

public static void main(String[] args) throws Exception {

 

Configuration conf = new Configuration();

 

Job job = new Job(conf,"OwnerJoin");

job.setJarByClass(OwnerJoin.class);

 

job.setMapperClass(Map.class);

//job.setCombinerClass(Reduce.class);

job.setReducerClass(Reduce.class);

 

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(Text.class);

 

FileInputFormat.addInputPath(job, new Path("hdfs://h0:9000/user/tallqi/in/inputOwnerJoin"));

FileOutputFormat.setOutputPath(job, new Path("hdfs://h0:9000/user/tallqi/in/outputOwnerJoin"));

System.exit(job.waitForCompletion(true)?0:1);

 

}

 

}

 

 

分享到:
评论

相关推荐

    java大数据内容_5Mapreduce、数据挖掘

    统计网站连续几日内的每日唯一访问者(Unique Visitors,简称UV)数量,这是衡量网站活跃度的重要指标之一。与PV(Page View,页面浏览量)不同,UV更关注的是不重复的访问者数量。 **实现方案** 1. **Map阶段**:...

    hive操作实战

    这两条SQL语句实现的功能相同,都是内连接。内连接返回的是两张表中匹配的数据行。在这个例子中,返回的是学生姓名、学生的课程ID以及课程名称。 **左外连接(`LEFT OUTER JOIN`)** ``` SELECT stu.name, stu.id,...

    7.Hadoop入门进阶课程_第7周_Pig介绍、安装与应用案例.pdf

    ### Hadoop入门进阶课程之Pig介绍、安装与应用案例 #### 一、课程概述 根据提供的文档信息,这是一门关于Hadoop生态系统的入门级课程中的第七周内容,主要介绍了Pig这一工具的基本概念、安装过程以及如何通过Pig...

    Hadoop权威指南 第二版(中文版)

     2.2.1 数据模型的“旋风之旅”  2.2.2 实现  2.3 安装  2.3.1 测试驱动  2.4 客户机  2.4.1 Java  2.4.2 Avro,REST,以及Thrift  2.5 示例  2.5.1 模式  2.5.2 加载数据  2.5.3 Web查询  2.6 HBase和...

    大数据应用实践–Vertica技术和案例分享21.pptx

    \n\nHadoop作为大数据处理的基础框架,包括HDFS(Hadoop Distributed File System)和MapReduce,提供大规模分布式数据存储和处理能力。Cloudera是Hadoop的主要服务商之一,为企业提供基于Hadoop的软件和服务。HP的...

    Hadoop 权威指南(中文前三章)

    - **分布式计算**: MapReduce的核心优势之一在于能够将数据处理任务分布到多台机器上执行,从而提高处理速度。 **2.5 Hadoop流** - **流式处理**: Hadoop流允许使用脚本语言(如Perl、Python等)来编写Map和Reduce...

    Hadoop权威指南(中文版)2015上传.rar

    2.2.1 数据模型的"旋风之旅" 2.2.2 实现 2.3 安装 2.3.1 测试驱动 2.4 客户机 2.4.1 Java 2.4.2 Avro,REST,以及Thrift 2.5 示例 2.5.1 模式 2.5.2 加载数据 2.5.3 Web查询 2.6 HBase和RDBMS的比较 2.6.1 成功的...

    apache_hbase_reference_guide(官网).pdf

    HBase是一个开源的非关系型分布式数据库(NoSQL),基于Google的BigTable论文设计,运行在Hadoop文件系统(HDFS)之上,并且是Apache软件基金会的Hadoop项目的一部分。HBase旨在提供快速的随机访问大量结构化数据,...

    Hive编程指南

    HQL允许用户执行复杂的聚合、分组、排序和连接操作,而无需了解底层的MapReduce工作原理。 本书可能会涵盖以下关键知识点: 1. **Hive架构**:介绍Hive如何与Hadoop生态系统中的其他组件如HDFS、YARN、HBase等交互...

    HBase权威指南 中文版

    - **HBase**:一个分布式的、可扩展的、版本化的列式存储系统,它建立在**Apache Hadoop**之上,主要用于处理大规模的数据存储需求。 - **版本化**:HBase能够存储多个版本的数据,并且每个版本都可以根据时间戳进行...

    大数据方向学习课程体系

    Hadoop是分布式计算领域的重要工具之一,适用于处理大规模数据集。该教程涵盖了Hadoop的基础到高级应用,适合初学者及有一定经验的数据工程师。 1. **Hadoop快速入门** - 理解Hadoop的概念、发展历程及其在大数据...

    Spark_SQL大数据实例开发教程.pdf by Spark_SQL大数据实例开发教程.pdf (z-lib.org)1

    首先,书中的前言提到了Hadoop之父Doug Cutting的观点,认为MapReduce在大数据项目中的应用将被Apache Spark取代,这表明Spark SQL作为Spark的一部分,对于高效处理大数据的重要性日益凸显。Spark SQL不仅为Java、...

    大数据技术之Oozie入门到精通.txt

    #### 五、Oozie使用案例 **1. 构建简单的数据流水线** - 使用Oozie定义一个工作流,该工作流包括从HDFS读取原始数据、使用MapReduce进行预处理、再通过Hive进行聚合分析等多个步骤。 - 通过命令行工具或API提交该...

    Google集群体系结构分析.pdf

    2. **快速响应**:用户查询响应时间需控制在0.5秒之内。 3. **数据冗余**:实现站点间的冗余备份以保障数据安全。 4. **网络冗余**:确保与Internet之间的网络连接稳定可靠。 根据Google提供的数据,其系统性能逐年...

    hive_medo_java_hive_

    Hive构建在Hadoop之上,利用HDFS作为其存储层,MapReduce处理计算任务。它的架构包括客户端、元数据存储、驱动器和执行器。用户通过Hive客户端提交查询,这些查询被转化为MapReduce任务在Hadoop集群上执行。 2. **...

    基于Greenplum Hadoop- 分布式平台的大数据解决方案03 - 安装Greenplum(1)

    1. **Hadoop连接器**:如HAWQ(Greenplum的一个版本),直接在Hadoop之上运行SQL查询,提供实时分析功能。 2. **数据集成**:通过ETL工具将Hadoop中的数据导入Greenplum,进行复杂分析。 3. **联邦查询**:使用户能...

    基于PigLatin语言的海量数据分析

    如何有效地处理和分析这些海量数据,已经成为当前信息技术领域的重要议题之一。传统的数据分析工具和技术在面对大规模数据集时显得力不从心,因此,寻求更加高效的数据处理解决方案变得至关重要。 在此背景下,...

Global site tag (gtag.js) - Google Analytics