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);
}
}
相关推荐
统计网站连续几日内的每日唯一访问者(Unique Visitors,简称UV)数量,这是衡量网站活跃度的重要指标之一。与PV(Page View,页面浏览量)不同,UV更关注的是不重复的访问者数量。 **实现方案** 1. **Map阶段**:...
这两条SQL语句实现的功能相同,都是内连接。内连接返回的是两张表中匹配的数据行。在这个例子中,返回的是学生姓名、学生的课程ID以及课程名称。 **左外连接(`LEFT OUTER JOIN`)** ``` SELECT stu.name, stu.id,...
### Hadoop入门进阶课程之Pig介绍、安装与应用案例 #### 一、课程概述 根据提供的文档信息,这是一门关于Hadoop生态系统的入门级课程中的第七周内容,主要介绍了Pig这一工具的基本概念、安装过程以及如何通过Pig...
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和...
\n\nHadoop作为大数据处理的基础框架,包括HDFS(Hadoop Distributed File System)和MapReduce,提供大规模分布式数据存储和处理能力。Cloudera是Hadoop的主要服务商之一,为企业提供基于Hadoop的软件和服务。HP的...
- **分布式计算**: MapReduce的核心优势之一在于能够将数据处理任务分布到多台机器上执行,从而提高处理速度。 **2.5 Hadoop流** - **流式处理**: Hadoop流允许使用脚本语言(如Perl、Python等)来编写Map和Reduce...
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 成功的...
HBase是一个开源的非关系型分布式数据库(NoSQL),基于Google的BigTable论文设计,运行在Hadoop文件系统(HDFS)之上,并且是Apache软件基金会的Hadoop项目的一部分。HBase旨在提供快速的随机访问大量结构化数据,...
HQL允许用户执行复杂的聚合、分组、排序和连接操作,而无需了解底层的MapReduce工作原理。 本书可能会涵盖以下关键知识点: 1. **Hive架构**:介绍Hive如何与Hadoop生态系统中的其他组件如HDFS、YARN、HBase等交互...
- **HBase**:一个分布式的、可扩展的、版本化的列式存储系统,它建立在**Apache Hadoop**之上,主要用于处理大规模的数据存储需求。 - **版本化**:HBase能够存储多个版本的数据,并且每个版本都可以根据时间戳进行...
Hadoop是分布式计算领域的重要工具之一,适用于处理大规模数据集。该教程涵盖了Hadoop的基础到高级应用,适合初学者及有一定经验的数据工程师。 1. **Hadoop快速入门** - 理解Hadoop的概念、发展历程及其在大数据...
首先,书中的前言提到了Hadoop之父Doug Cutting的观点,认为MapReduce在大数据项目中的应用将被Apache Spark取代,这表明Spark SQL作为Spark的一部分,对于高效处理大数据的重要性日益凸显。Spark SQL不仅为Java、...
#### 五、Oozie使用案例 **1. 构建简单的数据流水线** - 使用Oozie定义一个工作流,该工作流包括从HDFS读取原始数据、使用MapReduce进行预处理、再通过Hive进行聚合分析等多个步骤。 - 通过命令行工具或API提交该...
2. **快速响应**:用户查询响应时间需控制在0.5秒之内。 3. **数据冗余**:实现站点间的冗余备份以保障数据安全。 4. **网络冗余**:确保与Internet之间的网络连接稳定可靠。 根据Google提供的数据,其系统性能逐年...
Hive构建在Hadoop之上,利用HDFS作为其存储层,MapReduce处理计算任务。它的架构包括客户端、元数据存储、驱动器和执行器。用户通过Hive客户端提交查询,这些查询被转化为MapReduce任务在Hadoop集群上执行。 2. **...
1. **Hadoop连接器**:如HAWQ(Greenplum的一个版本),直接在Hadoop之上运行SQL查询,提供实时分析功能。 2. **数据集成**:通过ETL工具将Hadoop中的数据导入Greenplum,进行复杂分析。 3. **联邦查询**:使用户能...
如何有效地处理和分析这些海量数据,已经成为当前信息技术领域的重要议题之一。传统的数据分析工具和技术在面对大规模数据集时显得力不从心,因此,寻求更加高效的数据处理解决方案变得至关重要。 在此背景下,...