package com.hadoop.sample;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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;
import org.apache.hadoop.util.GenericOptionsParser;
public class Sort {
//map将输入中的value化成IntWritable类型,作为输出的key
public static class Map extends Mapper<Object,Text,IntWritable,IntWritable>{
private static IntWritable data = new IntWritable();
public void map(Object key,Text value,Context context) throws IOException,InterruptedException{
String line = value.toString();
data.set(Integer.parseInt(line));
context.write(data, new IntWritable(1));
}
}
//reduce将输入中的key复制到输出的value上,然后根据输入的
//value-list中的元素的个数决定key的输出次数
//用全局的linenum来代表key的位次
public static class Reduce extends Reducer<IntWritable,IntWritable,IntWritable,IntWritable>{
private static IntWritable linenum = new IntWritable(1);
public void reduce(IntWritable key,Iterable<IntWritable> values,Context context) throws IOException,InterruptedException{
for(IntWritable val:values){
context.write(linenum, key);
linenum = new IntWritable(linenum.get()+1);
}
}
}
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf,args).getRemainingArgs();
if(otherArgs.length != 2){
System.err.println("Usage WordCount <int> <out>");
System.exit(2);
}
Job job = new Job(conf,"Sort");
job.setJarByClass(Sort.class);
job.setMapperClass(Map.class);
job.setCombinerClass(Reduce.class);
job.setReducerClass(Reduce.class);
job.setOutputKeyClass(IntWritable.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
分享到:
相关推荐
### Hadoop MapReduce简介 Hadoop MapReduce 是一种软件框架,用于轻松编写应用程序,这些应用程序在大型硬件集群上处理大规模数据集。MapReduce 框架由两部分组成:一个通常在多台计算机上并行运行的 Map 函数,...
Hadoop的核心由两个主要组件构成:HDFS(Hadoop Distributed File System)和MapReduce。HDFS是分布式文件系统,提供高容错性和高吞吐量的数据访问,而MapReduce则是一个用于大规模数据集并行处理的编程模型。 1. ...
6. **项目实践**:通过实际编写和运行MapReduce代码,学习者能更好地理解大数据处理的流程和挑战。这个项目为理论知识提供了实践经验,让学习者能够亲手实现一个实际的应用场景。 7. **课程设计**:作为课程设计的...
同时,了解Hadoop的源代码和API文档将对深入理解Driver的工作原理大有裨益。 总的来说,Hadoop Common 2.6.0版本为MapReduce Driver测试提供了坚实的基础。通过细致的测试,我们可以确保在大数据处理过程中,Driver...
《Hadoop Real-World Solutions Cookbook 源代码》是一本针对Hadoop实际应用问题解决方案的实战指南,书中通过丰富的示例代码帮助读者理解和解决在大数据处理中遇到的各种挑战。源代码包含了书中各个章节的关键实现...
在MapReduce方面,Hadoop 2.4引入了更强大的 Shuffle 和 Sort 阶段,优化了数据传输和排序性能。同时,MapReduce框架本身变得更加模块化,允许开发者更容易地定制和扩展。另外,Hadoop 2.4还增强了对Java以外编程...
这个名为“hadoop-3.1.1-src.tar.gz”的压缩包包含了Hadoop 3.1.1版本的源代码,对于理解、学习、定制和开发Hadoop功能具有重要意义。 1. **Hadoop架构**: Hadoop由两个主要组件构成:Hadoop Distributed File ...
2. **获取源码**:从Apache Hadoop的官方Git仓库克隆或下载MapReduce的源代码。 3. **编译源码**:进入源码目录,使用Maven的`mvn compile`命令编译源代码,这会生成相应的class文件。 4. **打包成JAR**:使用`mvn...
6. **容错与扩展性**: Hadoop 设计的核心之一就是高可用性和可扩展性。源码揭示了如何处理节点故障,以及如何通过添加更多节点来扩展集群。 7. **代码风格**: Hadoop 代码遵循 Apache 的编码规范,强调清晰、可读性...
为了运行这个 MapReduce 程序,我们需要编写 Java 代码,并将其打包成 JAR 文件。之后,我们可以通过 Hadoop 命令行工具提交作业,指定输入数据路径(NBA 数据文件所在的 HDFS 路径)和输出结果目录。 在实际应用中...
源代码中包含了HDFS、MapReduce、YARN以及其他辅助组件的实现,如Common、Hadoop Metrics系统等。 六、Hadoop应用 Hadoop广泛应用于数据仓库、实时分析、机器学习、流处理等多个领域。例如,Google的Bigtable、...
"simple-cdmh-mapreduce" 是一个与MapReduce编程模型相关的项目,可能是一个简化版的CDMH(可能是某个公司或组织的缩写)MapReduce实现。...如果想深入了解,建议结合Hadoop官方文档和其他MapReduce教程进行学习。
MapReduce 是 Apache Hadoop 的核心组件之一,它为大数据处理提供了一个分布式计算框架。WordCount 是 MapReduce 框架中经典的入门示例,它统计文本文件中每个单词出现的次数。在这个案例中,我们将深入探讨如何在 ...
《Hadoop MapReduce Cookbook》是一本专注于Hadoop MapReduce技术实践的书籍,其附带的示例代码旨在帮助读者深入理解和应用MapReduce编程模型。在这个压缩包中,我们看到的是书中的实例代码,名为“Hadoop-MapReduce...
Hadoop MapReduce是Apache Hadoop项目的核心组件之一,它是一种分布式计算框架,专门设计用于处理和存储海量数据。这个框架基于Google的MapReduce模型,允许在大规模集群上运行数据密集型应用程序。在2015年的夏季,...
这里的“hadoop-2.7.7.zip”是一个包含了Hadoop 2.7.7版本的所有源代码、编译后的库文件、配置文件以及文档的压缩包。这个版本的Hadoop在大数据处理领域被广泛应用,因为它提供了高效、可扩展的数据存储和处理能力。...
Hadoop的核心由两个主要组件构成:Hadoop Distributed File System (HDFS) 和 MapReduce。HDFS是一种分布式文件系统,它将大文件分割成多个块,并将这些块存储在多台服务器(称为节点)上,确保了数据的冗余和高可用...
通过这本书的源码,读者不仅可以学习到Hadoop的基本概念和原理,还能通过实际代码加深理解,从而在实践中运用这些知识。同时,这也有助于培养读者的分布式思维和云计算能力,为从事大数据相关工作打下坚实基础。对于...
MapReduce模型能够处理的数据规模之大,在当时是前所未有的,它允许开发者对输入数据进行自定义的Map操作,然后将中间数据进行排序和分割,以便于不同Reduce操作的处理。这种模型下的容错机制也非常高效,它通过重新...
在压缩包文件 "hadoop-mapreduce-anagram-master" 中,可能包含了源代码、构建脚本(如build.gradle或pom.xml)、测试用例以及README文件,帮助用户理解如何构建和运行该项目。 通过这个示例,开发者可以学习到如何...