Hadoop MapReduce 逻辑代码
public class NewMaxTemperature {
public static final int CONST_INT_ZERO = 0;
public static final int CONST_INT_ONE = 1;
//【关键代码】Mapper类继承 Mapper类
static class NewMaxTemperatureMapper extends Mapper{
//【关键代码】覆盖父类Mapper的map(LongWritable, Text, Context)方法
@Override
protected void map(LongWritable key, Text value, Context context ) throws IOException , InterruptedException{
//[业务代码]
super.map(key, value, context);
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
static class NewMaxTemperatureReducer extends Reducer{
//【关键代码】覆盖Reducer的reduce(Text , Iterable, Context)方法
@Override
protected void reduce (Text key, Iterable values, Context context) throws IOException , InterruptedException{
//[业务代码]
for (IntWritable value : values){
maxValue = Math.max(maxValue , value.get() );
}
context.write(key, new IntWritable(maxValue));
//[/业务代码]
}
}
public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException{
//【关键代码】创建一个任务,设置任务入口类
Job job= new Job();
job.setJarByClass(NewMaxTemperature.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileInputFormat.addInputPath(job, new Path(args[0]));
//【关键代码】设置任务的map任务,和reduce任务,及入口类型
job.setMapperClass(NewMaxTemperatureMapper.class);
job.setReducerClass(NewMaxTemperatureReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//【关键代码】 等待完成
System.exit(job.waitForCompletion(true) ? CONST_INT_ZERO : CONST_INT_ONE);
}
}
MapReduce作业时客户端执行的单位:包括输入数据、MapReduce、程序和配置信息。 Hadoop把作业分为若干个小任务task, 任务包括map任务和reduce任务。
有两种节点控制作业的完成, 这种节点包括jobtracker和多个tasktracker。jobtracker是tasktracker的调度器, tasktracker是jobtracker的slaves。tasktracker在运行过程中从jobtracker获取任务,并把进度报告给jobtracker, 如果一个任务失败,jobtracker会重新调度任务到另外一个tasktracker。 Hadoop 把输入的数据划分为小数据到MapReduce,称为输入分片(input split),每个分片包括创建map任务, 由它运行自定义的map函数来分析片中的记录。分片大小一般为一个block的大小64M。
[img]http://dl.iteye.com/upload/attachment/370088/e37e019c-c9a8-39fc-ae3a-8b7b5599f5c7.jpg" alt="[/img]
map任务把输出到本地硬盘, 而不是HDFS,应为map的输出是一个中间输出,中间输出是reduce处理的输入, 最终结果是reduce输出的。一但结果完成,map的输出是可以删除的,所以map的结果一般是不会存储在HDFS中的。
[img]http://dl.iteye.com/upload/attachment/370101/2f8579f7-bbab-36a2-8b61-f9692246315e.jpg" alt="[/img]
reduce任务不具备本地读取的优势-- 一个单一的reduce任务的输入往往来自于所有map的输出。 map的输出通过网络传输到reduce任务运行的节点, 并在哪里合并, 然后传递给自定义的reduce函数, 为了增加可靠性, reduce的输出通常存储在HDFS中。
[img]http://dl.iteye.com/upload/attachment/370096/75086578-e367-3d3b-bf0f-98b85de34661.jpg" alt="[/img]
如果是多个reducer, map任务会会对输出结果进行分区, 为配给reduce任务创建一个分区(partition)。 每个分区包含许多键/值对, 分区可以有用户自定义的partitioner来控制,通常是采用默认的分区工具, 它使用的算法是hashhas函数, 这种方法效率非常高。
也有可能不存在reduce任务, 直接的输出就是map任务的输出
[img]http://dl.iteye.com/upload/attachment/370094/85e96ac9-a17a-37d6-b046-13e1af4c6850.jpg" alt="[/img]
注释: 大部分内容来自《Hadoop权威指南》
- 大小: 31.3 KB
- 大小: 40.2 KB
- 大小: 64 KB
- 大小: 48.1 KB
分享到:
相关推荐
Hadoop MapReduce 是 Hadoop 平台根据 MapReduce 原理实现的计算框架,目前已经实现了两个版本,MapReduce 1.0 和基于 YARN 结构的 MapReduce 2.0。 尽管 MapReduce 1.0 中存在一些问题,但是整体架构比较清晰,更...
有前三章的内容前言第一部分 基础篇第1章 阅读源代码前的准备1.1 准备源代码学习环境1.1.1 基础软件下载1.1.2 如何准备Windows环境1.1.3 如何准备Linux环境1.2 获取Hadoop源代码1.3 搭建Hadoop源代码阅读...
简单说来,一个映射函数就是对一些独立元素组成的概念上的列表(例如,一个测试成绩的列表)的每一个元素进行指定的操作(比如,有人发现所有学生的成绩都被高估了一分,他可以定义一个“减一”的映射函数,用来修正...
该项目旨在用Java创建MapReduce概念的简单实现。 这将使可视化并凭经验证明艾姆达尔定律。 我将为此实现使用字数统计过程,并比较此分布式实现和顺序实现的结果。 该项目基于RémiSharrock教授在巴黎Télécom进行...
MapReduce意味着在计算过程中实际分为两大步,Map过程和Reduce过程。 下面以一个统计单词次数简单案例为例: 数据源 Map类 import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org....
大数据Hadoop核心模块之MapReduce,文档有概念、案例、代码,Mapreduce中,不可多得文档!
读者可以通过学习本论文,掌握Hadoop的基本概念、工作原理和核心组件,了解其在实际场景中的应用,并能够根据需求进行相应的配置和优化。 其他说明: 本论文采用了系统化的研究方法,包括文献综述、理论分析和实证...
======== 销售点概念验证使用 Hadoop MapReduce、Hive 和 Luigi 处理事务日志的概念证明。 'pos' 包包含处理销售点交易日志的所有代码。 计算每个用户最受欢迎的产品类别,以及每个用户每季度的收入。 preprocessing...
MapReduce的重要概念 什么是MapReduce 1 MapReduce核心思想 2 MapReduce特点 3 MapReduce适用的开发场景 4 目 录 一、什么是MapReduce MapReduce起源,在介绍大数据编年史时有提到Google最早在04年发表论文MapReduce...
在关键问题领域对基础概念和实战方法做了权衡,例如导入导出、序列化,以及LZO压缩。你将会学习到每个技术的细节,以及当遇到一个具体问题时能够给出对应的解决方案。本书提供了结构良好且易于理解的例子,可用于...
从理论着手介绍Hadoop的概念、Hadoop的特点,了解Hadoop的主要思想和发展历程;再通过介绍Hadoop的HDFS、MapReduce和YARN三大主要的核心框架,深入地了解Hadoop的整体架构,掌握Hadoop核心架构HDFS和MapReduce;并对...
本书作者基于对Hadoop系统的实践,深入浅出地对Hadoop进行了详细的讲解,包含大量的实例和技巧,可帮助有一定基础的开发者快速掌握分布式系统。主要内容包括:第1章~第4章讲解大数据系统的基本概念、Hadoop系统的...
第一天 hadoop的基本概念 伪分布式hadoop集群安装 hdfs mapreduce 演示 01-hadoop职位需求状况.avi 02-hadoop课程安排.avi 03-hadoop应用场景.avi 04-hadoop对海量数据处理的解决思路.avi 05-hadoop版本选择和...
资源名称:Hadoop硬实战 内容简介:Hadoop 是...在关键问题领域对基础概念和实战方法做了权衡。《Hadoop硬实战》适合使用Hadoop 进行数据存储、管理和分析 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
在关键问题领域对基础概念和实战方法做了权衡,例如导入导出、序列化,以及LZO压缩。你将会学习到每个技术的细节,以及当遇到一个具体问题时能够给出对应的解决方案。本书提供了结构良好且易于理解的例子,可用于...
Hadoop是现阶段数据开发的基础,Hadoop通常是指一个更广泛的概念—-Hadoop生态圈(基于或关于Hadoop的大数据开发的各种软件环境) 是Apache公司使用Java语言编写的开源的,分布式系统的基础架构 分布式就是,当储存...
《Hadoop实战》是一本系统且极具实践指导意义的hadoop工具书和参考书。内容全面,对hadoop整个... 《Hadoop实战》既适合没有hadoop基础的初学者系统地学习,又适合有一定hadoop基础但是缺乏实践经验的读者实践和参考。
本书从Hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍Hadoop这一高性能处理海量数据集的理想工具。全书共16章,3个附录,涉及的主题包括:Haddoop简介;MapReduce简介;Hadoop分布式文件系统;Hadoop...
概念"Map(映射)"和"Reduce(归约)",和他们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系
《Hadoop实战》是一本系统且极具实践指导意义的hadoop工具书和参考书。内容全面,对hadoop整个...《Hadoop实战》既适合没有hadoop基础的初学者系统地学习,又适合有一定hadoop基础但是缺乏实践经验的读者实践和参考。