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
相关推荐
在实例中,我们可能看到如何使用SELECT语句进行复杂查询,JOIN操作连接多个表,以及如何使用WHERE子句进行条件筛选。 2. **PL/SQL**:Oracle特有的过程式语言,结合了SQL的查询能力与编程语言的功能,用于编写存储...
这里我们创建两个实例的数据目录,分别为`/data/3306/data`和`/data/3307/data`: ``` [root@localhost ~]# mkdir -p /data/3306/data [root@localhost ~]# mkdir -p /data/3307/data ``` 3. **初始化数据目录...
这些实例可能包含如何使用SELECT语句进行基本查询,以及如何使用JOIN、WHERE子句进行复杂查询的示例。对于数据的增删改操作,`Recordset`对象提供了`AddNew`、`Update`和`Delete`方法,分别用于添加新记录、修改现有...
实例226 携子之手 与子偕老(join) 415 实例227 线程让步(Yield) 417 实例228 会走动的钟(多线程) 419 实例229 变形金刚中的守护神(守护线程) 424 实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿...
ABAP 报表开发实例 ABAP 报表开发实例是指使用 ABAP 语言开发报表的实践过程。在这个实例中,我们将一步步地讲解如何开发一个报表,从确定所需表开始,到定义内表和数据,接着是选择屏幕、查询数据、输出结果等步骤...
8. **JOIN操作**:如何使用INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN将不同表的数据联接在一起。 9. **存储过程和函数**:定义并调用自定义的SQL集合,提高代码复用性和性能。 10. **事务管理**:如何开始、...
打开VB工程,进入【工程】-【部件】菜单,勾选“Microsoft ADO Data Control 6.0 (SP6)”和“Microsoft Hierarchical FlexGrid Control 6.0 (SP4)”,确认后,这两个控件将出现在工具箱中,可供使用。 #### Adodc...
实例154 使用静态成员变量计算内存中实例化的对象数目 239 实例155 实现加减乘除的方法 240 8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158...
2. ADO(ActiveX Data Objects)教程:ADO是Microsoft开发的数据库访问接口,它在Wincc报表中扮演着桥梁的角色,连接Wincc与后台数据库。通过ADO,用户可以轻松地读取、写入和更新数据库中的数据。了解ADO的基本概念...
SQL Server 2008支持标准的SQL语法,包括DML(Data Manipulation Language)如SELECT、INSERT、UPDATE和DELETE,以及DDL(Data Definition Language)如CREATE、ALTER和DROP等,用于创建和修改数据库结构。...
Visual C++提供了MFC(Microsoft Foundation Classes)库,其中包含对ODBC(Open Database Connectivity)和ADO(ActiveX Data Objects)的支持,使得与各种类型的数据库(如SQL Server、MySQL、Oracle等)进行通信...
在VB6中,通过ADO(ActiveX Data Objects)技术,可以轻松地连接和操作SQL Server数据库,实现数据的读取、写入、更新和删除等操作。 SQL Server则是微软推出的企业级数据库管理系统,它支持多种数据库管理和开发...
[@parameter data_type] [OUTPUT] [WITH {RECOMPILE | ENCRYPTION}] AS sql_statement ``` 其中,`OUTPUT`关键字表示参数可以将结果返回,`WITH RECOMPILE`表示每次执行时重新编译存储过程,`ENCRYPTION`则用于...
这包括合理设计数据库结构(如索引、分区等)、优化SQL查询(避免全表扫描、减少JOIN操作等)以及利用缓存技术来减少数据库负载。 在分布式环境中,可能需要实现数据库复制和集群,以提高可用性和数据一致性。主从...
2008版是其重要版本之一,引入了诸多新特性,如Data Compression、Columnstore Indexes和Policy-Based Management等,提升了性能和易用性。 在学习这个实例时,你将接触到以下几个主要知识点: 1. **创建和管理...
例如,你可能会看到如何使用JOIN语句来联接多个表,或者如何使用WHERE子句来过滤结果。此外,索引的创建和优化、视图的使用、存储过程和触发器的应用也可能在这些实例中有所涉及。 学习数据库操作,特别是MySQL,有...
- **JOIN 类型**:介绍 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL OUTER JOIN 等连接类型。 - **自连接**:学习如何在一个表上执行连接操作。 - **多表连接**:掌握如何连接三个或更多表。 #### 七、子查询 - **...
var customerData = from customer in customers select new { Name = customer.Name, City = customer.City }; ``` 匿名类型允许创建没有预定义类型的对象。 3. **条件形式**: ```csharp var ...
VC++作为Microsoft的C++开发工具,支持多种方式与数据库进行连接,包括ODBC(Open Database Connectivity)、ADO(ActiveX Data Objects)和OLE DB等。这些接口技术各有优缺点,ODBC是一种标准接口,兼容性强,适用...
- **多表查询**:讲解JOIN操作,如何将多个表中的数据连接在一起进行查询。 - **子查询**:介绍如何在一个查询中嵌套另一个查询,以便获取更复杂的数据集。 - **高级查询**:深入探讨更复杂的查询技巧,例如使用WITH...