`

MapReduce介绍

 
阅读更多

MapReduce分为两个部分一个是map,一个是reduce

对应的java类分别是mapper和reducer。

MapReduce的特性是对集群内的数据进行并行计算。

MapReduce的初识,例如黄匡内的是气象数据。经过第二步初始映射key是行号,value就是数据库,在经过第三步带有实际业务的映射输出把有用的数据抽出,key是年份,value是温度。然后经过shuttle(洗牌),按照年份进行进行合并也就是分组加排序的过程,把同样的key的value合并到一起并排序。然后经过reduce按照规则取出响应的数据,然后输出。

 :

下面开始实践,首先创建一个mapper类。主要是实现上图第二个方块到第四个方块的转换。

public class MaxTemperatureMapper extends Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>

KEYIN, VALUEIN,分别指上图方块二的key类型和value类型。 KEYOUT, VALUEOUT分别指上图方块三的key类型和value类型。

public class MaxTemperatureMapper extends Mapper<LongWritable, Text, Text, IntWritable>

 

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.metrics2.util.Quantile;

public class MaxTemperatureMapper extends Mapper<LongWritable, Text, Text, IntWritable> {

	//温度缺失
	private static final int MISSING=9999;
	@Override
	protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context)
			throws IOException, InterruptedException {

		String line = value.toString();
		String year = line.substring(15, 19);
		int airTemperature;
		if(line.charAt(87)=='+')
		{
			airTemperature = Integer.parseInt(line.substring(88,92));
		}
		else
		{
			airTemperature = Integer.parseInt(line.substring(87,92));
		}
		String quality=line.substring(92,93);
		if(airTemperature!=MISSING&&quality.matches("[01459]"))
		{
			context.write(new Text(year), new IntWritable(airTemperature));
		}
	}
}

 在建立一个reducer,主要是实现上图的第四个方块到第五个方块的转换。

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class MaxTemperatureReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
	
	@Override
	protected void reduce(Text keyIn, Iterable<IntWritable> values,
			Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
		int maxValue = Integer.MIN_VALUE;
		for(IntWritable value:values)
		{
			maxValue = Math.max(maxValue, value.get());
		}
		context.write(keyIn, new IntWritable(maxValue));
	}

}

 最后创建一个类执行map和reduce

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;

public class MaxTemperature {

	public static void main(String[] args) {
		try {
			//作业:=map任务+reduce任务
			Job job = new Job();
			
			job.setJarByClass(MaxTemperature.class);
			
			job.setJobName("Max temperature");
			//添加输入路径可以添加多个
			//可以输具体文件也可以实文件夹,但不是递归处理,压缩的可以自动处理
			FileInputFormat.addInputPath(job, new Path(args[0]));
			//设置输出数据,只能有一个,但不能提前存在,会自动创建
			FileOutputFormat.setOutputPath(job, new Path(args[1]));
			//设置mapper类
			job.setMapperClass(MaxTemperatureMapper.class);
			//设置reducer类
			job.setReducerClass(MaxTemperatureReducer.class);
			//设置输出的key类型
			job.setOutputKeyClass(Text.class);
			//设置输出的value类型
			job.setOutputValueClass(IntWritable.class);
			//等待作业完成
			System.out.println(job.waitForCompletion(true));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

把上面的三个class导出jar包 hadoop-examples.jar,输入的文件是附件的weather.rar。

win

set HADOOP_CLASSPATH=hadoop-examples.jar

linux

export HADOOP_CLASSPATH=hadoop-examples.jar

 执行

hadoop com.xxxxx.hadoop.MaxTemperature file:\\\D:\hadoopdemo\weather\19*.gz D:\hadoopdemo\weather\out

 

报错:

java.lang.ClassCastException: class com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text

是Text的包导错了

不是:import com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider.Text;

而是:import org.apache.hadoop.io.Text;

 

再次执行前一定要把out文件夹删除

执行结果:



 

 

  • 大小: 371.2 KB
  • 大小: 18 KB
分享到:
评论

相关推荐

    分布式编程环境MapReduce介绍.pdf

    分布式编程环境MapReduce介绍 MapReduce是一个分布式编程环境,主要用于处理大规模数据的处理。它是Hadoop架构的一部分,提供了一个简洁的编程接口,允许用户编写分布式程序来处理大量数据。MapReduce的核心是Map和...

    大数据平台-MapReduce介绍.pdf

    "大数据平台-MapReduce介绍.pdf" 大数据平台中的MapReduce是由Google公司的Jeffrey Dean和Sanjay Ghemawat开发的一个针对大规模群组中的海量数据处理的分布式编程模型。MapReduce实现了两个功能:Map函数应用于集合...

    15、MapReduce介绍及wordcount

    MapReduce是一种分布式计算框架,由Google提出,主要用于处理和生成大规模数据集。Hadoop是Apache开源项目,它实现了MapReduce模型,使得用户可以方便地编写处理海量数据的应用程序。 1. MapReduce编程模型 ...

    大数据-Hadoop-MapReduce介绍

    ### Hadoop MapReduce简介 Hadoop MapReduce 是一种软件框架,用于轻松编写应用程序,这些应用程序在大型硬件集群上处理大规模数据集。MapReduce 框架由两部分组成:一个通常在多台计算机上并行运行的 Map 函数,...

    hadoop MapReduce介绍

    hadoop MapReduce介绍 SergeBazhievsky_Introduction_to_Hadoop_MapReduce_v2.pdf 很好的学习hadoop mapreduce计算框架的资料

    Hadoop深入浅出之MapReduce介绍.pptx

    MapReduce是一种分布式计算模型,由Google提出,主要应用于搜索引擎领域,用于解决大数据处理的问题。它的核心在于将复杂的分布式计算过程简化为两个基本操作:Map和Reduce。用户只需关注实现这两个函数,即可完成...

    Hadoop中的HDFS和Mapreduce

    ### Hadoop中的HDFS和MapReduce #### Hadoop核心组件:HDFS与MapReduce **Hadoop** 是一个能够处理海量数据的开源软件框架,它最初由Apache开发,旨在为大规模数据提供分布式处理能力。Hadoop的核心组件包括**HDFS...

    MapReduce分布式计算平台编程示例

    MapReduce介绍 MapReduce是一个用于处理大规模数据集的软件架构,最初由Google提出。它提供了一种简单有效的编程模型,允许开发者编写并行处理大规模数据的应用程序。MapReduce的核心概念是将复杂的计算任务分解成...

    MapReduce发明人关于MapReduce的介绍

    ### MapReduce:大规模数据处理的简化利器 #### 引言:MapReduce的诞生与使命 在MapReduce问世之前,Google的工程师们,包括其发明者Jeffrey Dean和Sanjay Ghemawat,面临着一个共同的挑战:如何高效地处理海量...

    用 Hadoop MapReduce 进行大数据分析.doc

    MapReduce 介绍 ---------------- MapReduce 是一种编程模型,由 Google 开发,用于处理大规模分布式数据。MapReduce 将数据处理过程分为两个阶段:Map 阶段和 Reduce 阶段。在 Map 阶段,输入数据被分割成小块,...

    基于 Hadoop 平台实现的使用 MapReduce 编程,统计NBA球员五项数据+源代码+文档说明

    MapReduce 介绍 MapReduce是一个并行计算框架,将大数据量的任务拆分成小数据量的任务,分布式计算每一部分的数据,在整合每个数据节点的结果,最后汇总结果。对于可以并行计算的数据,这将降低单机的计算任务,...

    SDU-大数据实验&课设(mapreduce)内含源码和说明书(可以直接运行).zip

    1. **MapReduce介绍**: MapReduce将大规模数据处理分为两个主要阶段:Map阶段和Reduce阶段。Map阶段负责将输入数据切分成小块并进行局部处理,而Reduce阶段则汇总Map阶段的结果,进行全局计算。这种模式非常适合在...

    Hadoop - MapReduce详细介绍

    hadoop的mapreduce的架构和原理介绍的比较详细,ppt格式.

    MapReduce 设计模式

    2. MapReduce和Hadoop:介绍了MapReduce的历史及其与Hadoop的关系。Hadoop是一个开源框架,支持分布式存储和计算,MapReduce是Hadoop的核心组件之一。 3. MapReduce案例分析:通过“Hadoop Example: WordCount”...

    Hadoop mapreduce实现wordcount

    这个文件可能是 Hadoop 官方文档中关于 WordCount 示例的一个章节,详细介绍了如何编写 Map 和 Reduce 函数,以及如何配置和运行 WordCount 作业。可能包括了 Java 代码示例,讲解如何创建 MapReduce 程序,并将其...

    MapReduce 谷歌实验室论文

    这篇论文详细介绍了MapReduce的概念、工作机制以及在实际中的应用。MapReduce模型通过两个主要函数——Map函数和Reduce函数来处理数据,使得程序员能够自动地并行化程序并执行于大规模集群计算环境中。 在MapReduce...

    Hadoop介绍,HDFS和MapReduce工作原理

    Hadoop介绍,HDFS和MapReduce工作原理

    MapReduce设计模式介绍.ppt

    MapReduce 设计模式知识点总结 MapReduce 设计模式是大数据处理的核心组件,负责将大规模数据处理和分析任务分解为可并行处理的任务。MapReduce 设计模式主要由两个阶段组成:Map 阶段和 Reduce 阶段。 Map 阶段 ...

Global site tag (gtag.js) - Google Analytics