`
liaobinxu
  • 浏览: 42275 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hadoop MapReduce 概念和基础

阅读更多
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 是 Hadoop 平台根据 MapReduce 原理实现的计算框架,目前已经实现了两个版本,MapReduce 1.0 和基于 YARN 结构的 MapReduce 2.0。 尽管 MapReduce 1.0 中存在一些问题,但是整体架构比较清晰,更...

    Hadoop技术内幕:深入解析MapReduce架构设计与实现原理

    有前三章的内容前言第一部分 基础篇第1章 阅读源代码前的准备1.1 准备源代码学习环境1.1.1 基础软件下载1.1.2 如何准备Windows环境1.1.3 如何准备Linux环境1.2 获取Hadoop源代码1.3 搭建Hadoop源代码阅读...

    hadoop MapReduce编程教程

    简单说来,一个映射函数就是对一些独立元素组成的概念上的列表(例如,一个测试成绩的列表)的每一个元素进行指定的操作(比如,有人发现所有学生的成绩都被高估了一分,他可以定义一个“减一”的映射函数,用来修正...

    Hadoop-SLR207:遵循Hadoop MapReduce概念实现分布式字计数器。 在巴黎Télécom完成的项目

    该项目旨在用Java创建MapReduce概念的简单实现。 这将使可视化并凭经验证明艾姆达尔定律。 我将为此实现使用字数统计过程,并比较此分布式实现和顺序实现的结果。 该项目基于RémiSharrock教授在巴黎Télécom进行...

    Hadoop中MapReduce基本案例及代码(一)

    MapReduce意味着在计算过程中实际分为两大步,Map过程和Reduce过程。 下面以一个统计单词次数简单案例为例: 数据源 Map类 import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org....

    大数据Hadoop核心之MapReduce详解

    大数据Hadoop核心模块之MapReduce,文档有概念、案例、代码,Mapreduce中,不可多得文档!

    基于Hadoop的MapReduce架构研究.docx

    读者可以通过学习本论文,掌握Hadoop的基本概念、工作原理和核心组件,了解其在实际场景中的应用,并能够根据需求进行相应的配置和优化。 其他说明: 本论文采用了系统化的研究方法,包括文献综述、理论分析和实证...

    point-of-sales-proof-of-concept:使用 Hadoop MapReduce、Hive 和 Luigi 处理事务日志的概念证明

    ======== 销售点概念验证使用 Hadoop MapReduce、Hive 和 Luigi 处理事务日志的概念证明。 'pos' 包包含处理销售点交易日志的所有代码。 计算每个用户最受欢迎的产品类别,以及每个用户每季度的收入。 preprocessing...

    大数据平台构建:MapReduce的重要概念.pptx

    MapReduce的重要概念 什么是MapReduce 1 MapReduce核心思想 2 MapReduce特点 3 MapReduce适用的开发场景 4 目 录 一、什么是MapReduce MapReduce起源,在介绍大数据编年史时有提到Google最早在04年发表论文MapReduce...

    HADOOP硬实战1

    在关键问题领域对基础概念和实战方法做了权衡,例如导入导出、序列化,以及LZO压缩。你将会学习到每个技术的细节,以及当遇到一个具体问题时能够给出对应的解决方案。本书提供了结构良好且易于理解的例子,可用于...

    大数据Hadoop开发基础

    从理论着手介绍Hadoop的概念、Hadoop的特点,了解Hadoop的主要思想和发展历程;再通过介绍Hadoop的HDFS、MapReduce和YARN三大主要的核心框架,深入地了解Hadoop的整体架构,掌握Hadoop核心架构HDFS和MapReduce;并对...

    深入理解hadoop

    本书作者基于对Hadoop系统的实践,深入浅出地对Hadoop进行了详细的讲解,包含大量的实例和技巧,可帮助有一定基础的开发者快速掌握分布式系统。主要内容包括:第1章~第4章讲解大数据系统的基本概念、Hadoop系统的...

    新版Hadoop视频教程 段海涛老师Hadoop八天完全攻克Hadoop视频教程 Hadoop开发

    第一天 hadoop的基本概念 伪分布式hadoop集群安装 hdfs mapreduce 演示 01-hadoop职位需求状况.avi 02-hadoop课程安排.avi 03-hadoop应用场景.avi 04-hadoop对海量数据处理的解决思路.avi 05-hadoop版本选择和...

    Hadoop硬实战

    资源名称:Hadoop硬实战 内容简介:Hadoop 是...在关键问题领域对基础概念和实战方法做了权衡。《Hadoop硬实战》适合使用Hadoop 进行数据存储、管理和分析 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    HADOOP硬实战2

    在关键问题领域对基础概念和实战方法做了权衡,例如导入导出、序列化,以及LZO压缩。你将会学习到每个技术的细节,以及当遇到一个具体问题时能够给出对应的解决方案。本书提供了结构良好且易于理解的例子,可用于...

    一、Hadoop简介 和 Hadoop结构介绍

    Hadoop是现阶段数据开发的基础,Hadoop通常是指一个更广泛的概念—-Hadoop生态圈(基于或关于Hadoop的大数据开发的各种软件环境) 是Apache公司使用Java语言编写的开源的,分布式系统的基础架构 分布式就是,当储存...

    Hadoop实战(陆嘉恒)

    《Hadoop实战》是一本系统且极具实践指导意义的hadoop工具书和参考书。内容全面,对hadoop整个... 《Hadoop实战》既适合没有hadoop基础的初学者系统地学习,又适合有一定hadoop基础但是缺乏实践经验的读者实践和参考。

    Hadoop权威指南 第二版(中文版)

     本书从Hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍Hadoop这一高性能处理海量数据集的理想工具。全书共16章,3个附录,涉及的主题包括:Haddoop简介;MapReduce简介;Hadoop分布式文件系统;Hadoop...

    Hadoop中MapReduce框架入门

    概念"Map(映射)"和"Reduce(归约)",和他们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系

    Hadoop实战-陆嘉恒

    《Hadoop实战》是一本系统且极具实践指导意义的hadoop工具书和参考书。内容全面,对hadoop整个...《Hadoop实战》既适合没有hadoop基础的初学者系统地学习,又适合有一定hadoop基础但是缺乏实践经验的读者实践和参考。

Global site tag (gtag.js) - Google Analytics