`
bo_hai
  • 浏览: 567446 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

DataJoin 实例

 
阅读更多

1、《hadoop 实战》书上的例子并不能运行成功。以下我的代码,可以运行成功:

 

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.contrib.utils.join.DataJoinMapperBase;
import org.apache.hadoop.contrib.utils.join.DataJoinReducerBase;
import org.apache.hadoop.contrib.utils.join.TaggedMapOutput;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class DataJoin extends Configured implements Tool{

	public static class DataJoinMapper extends DataJoinMapperBase {

		@Override
		protected Text generateGroupKey(TaggedMapOutput aRecord) {
			return new Text(aRecord.getData().toString().split(",")[0]);
		}

		@Override
		protected Text generateInputTag(String inputFiles) {
			return new Text(inputFiles);  
		}

		@Override
		protected TaggedMapOutput generateTaggedMapOutput(Object value) {
			TaggedMapOutput ret = new TaggedWritable((Text)value);  
			ret.setTag(this.inputTag);
			return ret;
		}
	}
	
	public static class TaggedWritable extends TaggedMapOutput {

		private Writable data;
		
		public TaggedWritable() {
			this.tag = new Text("");
			this.data = new Text("");
		}
		
		public TaggedWritable(Writable data) {
			this.tag = new Text("");
			this.data = data;
		}
		
		@Override
		public void write(DataOutput data) throws IOException {
			this.tag.write(data);
			this.data.write(data);
		}

		@Override
		public void readFields(DataInput in) throws IOException {
			this.data.readFields(in);
			this.tag.readFields(in);
		}

		@Override
		public Writable getData() {
			return data;
		}
		
	}
	
	public static class DataJoinReducer extends DataJoinReducerBase {

		@Override
		protected TaggedMapOutput combine(Object[] tags, Object[] values) {
			if (tags.length < 2) {
				return null;
			}
			StringBuilder joinedStr = new StringBuilder();
			for (int i = 0; i < values.length; i++) {
				if (i > 0) {
					joinedStr.append(",");
				}
				TaggedWritable tw = (TaggedWritable)values[i];
				String line = ((Text)tw.getData()).toString();
				String[] tokens = line.split(",",2);
				joinedStr.append(tokens[1]);
			}
			TaggedWritable ret = new TaggedWritable(new Text(joinedStr.toString()));
			ret.setTag((Text)tags[0]);
			return ret;
		}
		
	}
	
	@Override
	public int run(String[] args) throws Exception {
		JobConf job = new JobConf(getConf());
		job.setJarByClass(getClass());
		job.setJobName("datajoin");
		Path in1 = new Path("/join/customers/");
		Path in2 = new Path("/join/orders/");
		FileInputFormat.addInputPath(job, in1);
		FileInputFormat.addInputPath(job, in2);
		Path out = new Path("/join/output/");
		FileOutputFormat.setOutputPath(job, out);
		
		job.setMapperClass(DataJoinMapper.class);
		job.setReducerClass(DataJoinReducer.class);
		
		job.setInputFormat(TextInputFormat.class);
		job.setOutputFormat(TextOutputFormat.class);
		
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(TaggedWritable.class);
		
		job.set("mapred.textoutputformat.separator",",");
		
		JobClient.runJob(job);
		return 0;
	}

	public static void main(String[] args) throws Exception {
		int res = ToolRunner.run(new DataJoin(),args);
		System.exit(res);
	}
}

 可以参考:

  http://www.cnblogs.com/aprilrain/archive/2013/01/28/2880460.html

  http://blog.csdn.net/jokes000/article/details/7080551

分享到:
评论
1 楼 bo_hai 2013-12-12  
结果如下:
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

相关推荐

    oracle精品实例,练习总结

    在实例中,我们可能看到如何使用SELECT语句进行复杂查询,JOIN操作连接多个表,以及如何使用WHERE子句进行条件筛选。 2. **PL/SQL**:Oracle特有的过程式语言,结合了SQL的查询能力与编程语言的功能,用于编写存储...

    Mysql数据库多实例安装部署

    这里我们创建两个实例的数据目录,分别为`/data/3306/data`和`/data/3307/data`: ``` [root@localhost ~]# mkdir -p /data/3306/data [root@localhost ~]# mkdir -p /data/3307/data ``` 3. **初始化数据目录...

    50个Vb数据库编程实用实例源码

    这些实例可能包含如何使用SELECT语句进行基本查询,以及如何使用JOIN、WHERE子句进行复杂查询的示例。对于数据的增删改操作,`Recordset`对象提供了`AddNew`、`Update`和`Delete`方法,分别用于添加新记录、修改现有...

    java范例开发大全

    实例226 携子之手 与子偕老(join) 415 实例227 线程让步(Yield) 417 实例228 会走动的钟(多线程) 419 实例229 变形金刚中的守护神(守护线程) 424 实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿...

    ABAP 报表开发实例

    ABAP 报表开发实例 ABAP 报表开发实例是指使用 ABAP 语言开发报表的实践过程。在这个实例中,我们将一步步地讲解如何开发一个报表,从确定所需表开始,到定义内表和数据,接着是选择屏幕、查询数据、输出结果等步骤...

    SQL学习实例文件

    8. **JOIN操作**:如何使用INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN将不同表的数据联接在一起。 9. **存储过程和函数**:定义并调用自定义的SQL集合,提高代码复用性和性能。 10. **事务管理**:如何开始、...

    VB数据库操作实例

    打开VB工程,进入【工程】-【部件】菜单,勾选“Microsoft ADO Data Control 6.0 (SP6)”和“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,确认后,这两个控件将出现在工具箱中,可供使用。 #### Adodc...

    Java范例开发大全 (源程序)

     实例154 使用静态成员变量计算内存中实例化的对象数目 239  实例155 实现加减乘除的方法 240  8.3 面向对象的设计模式 241  实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  实例158...

    最好的wincc报表实例.zip

    2. ADO(ActiveX Data Objects)教程:ADO是Microsoft开发的数据库访问接口,它在Wincc报表中扮演着桥梁的角色,连接Wincc与后台数据库。通过ADO,用户可以轻松地读取、写入和更新数据库中的数据。了解ADO的基本概念...

    sqlserver2008数据库实例

    SQL Server 2008支持标准的SQL语法,包括DML(Data Manipulation Language)如SELECT、INSERT、UPDATE和DELETE,以及DDL(Data Definition Language)如CREATE、ALTER和DROP等,用于创建和修改数据库结构。...

    Visual C++开发实例大全(提高卷)源代码实例database

    Visual C++提供了MFC(Microsoft Foundation Classes)库,其中包含对ODBC(Open Database Connectivity)和ADO(ActiveX Data Objects)的支持,使得与各种类型的数据库(如SQL Server、MySQL、Oracle等)进行通信...

    大量VB6+SQLSERVER实例

    在VB6中,通过ADO(ActiveX Data Objects)技术,可以轻松地连接和操作SQL Server数据库,实现数据的读取、写入、更新和删除等操作。 SQL Server则是微软推出的企业级数据库管理系统,它支持多种数据库管理和开发...

    存储过程实例(初学者)

    [@parameter data_type] [OUTPUT] [WITH {RECOMPILE | ENCRYPTION}] AS sql_statement ``` 其中,`OUTPUT`关键字表示参数可以将结果返回,`WITH RECOMPILE`表示每次执行时重新编译存储过程,`ENCRYPTION`则用于...

    sql网络编程实例

    这包括合理设计数据库结构(如索引、分区等)、优化SQL查询(避免全表扫描、减少JOIN操作等)以及利用缓存技术来减少数据库负载。 在分布式环境中,可能需要实现数据库复制和集群,以提高可用性和数据一致性。主从...

    sqlserver2008数据库实例练习

    2008版是其重要版本之一,引入了诸多新特性,如Data Compression、Columnstore Indexes和Policy-Based Management等,提升了性能和易用性。 在学习这个实例时,你将接触到以下几个主要知识点: 1. **创建和管理...

    数据库操作实例

    例如,你可能会看到如何使用JOIN语句来联接多个表,或者如何使用WHERE子句来过滤结果。此外,索引的创建和优化、视图的使用、存储过程和触发器的应用也可能在这些实例中有所涉及。 学习数据库操作,特别是MySQL,有...

    oracle数据库实例教程

    - **JOIN 类型**:介绍 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL OUTER JOIN 等连接类型。 - **自连接**:学习如何在一个表上执行连接操作。 - **多表连接**:掌握如何连接三个或更多表。 #### 七、子查询 - **...

    LINQ To SQL 语法及实例大全

    var customerData = from customer in customers select new { Name = customer.Name, City = customer.City }; ``` 匿名类型允许创建没有预定义类型的对象。 3. **条件形式**: ```csharp var ...

    VC++数据库通用模块及典型系统开发实例导航

    VC++作为Microsoft的C++开发工具,支持多种方式与数据库进行连接,包括ODBC(Open Database Connectivity)、ADO(ActiveX Data Objects)和OLE DB等。这些接口技术各有优缺点,ODBC是一种标准接口,兼容性强,适用...

    Oracle详细实例教程

    - **多表查询**:讲解JOIN操作,如何将多个表中的数据连接在一起进行查询。 - **子查询**:介绍如何在一个查询中嵌套另一个查询,以便获取更复杂的数据集。 - **高级查询**:深入探讨更复杂的查询技巧,例如使用WITH...

Global site tag (gtag.js) - Google Analytics