第6章Hadoop分布式离线计算框架-MapReduce

本文详细介绍了Hadoop的MapReduce框架,包括其特点、应用场景、执行过程和实例。MapReduce适合处理离线大数据,具有易编程、良好拓展性和高容错性的特点。文章通过单词统计实例解释MapReduce的工作流程,包括Split、Map、Shuffle和Reduce阶段,并提供了MapReduce程序的编写步骤,包括Mapper和Reducer的实现。此外,还分享了MapReduce实例的配置和运行过程。
摘要由CSDN通过智能技术生成

       

目录

6.1MapReduce概述

6.1.1MapReduce的特点

6.1.2MapRedcue的应用场景

6.2MapReduce执行过程

6.2.1单词统计实例

6.2.2MapReduce执行过程

6.2.3Map Reduce的文件切片---Split

6.2.4Map过程和Reduce过程

6.2.5Shuffle过程

6.3MapReduce实例

        (1)本机配置Hadoop环境变量

        (2)放置winutil.exe文件和hadoop.dll

        (3)新建一个Java工程,导入需要的JAR包。新建一个WordCountMapper类

         (4)新建一个WordCountReducer类

        (5)创建主方法:

         (6)创建处理文件

        (7)运行结果

         常见问题汇总:


        Hadoop中有两个重要的组件,一个是HDFS,另一个是MapReduce,HDFS用来存储大批量得数据,而MapReduce则是通过计算来发现数据中有价值得内容。

6.1MapReduce概述

        hadoop作为开源组织下最重要得项目之一,最推出后得到了全球学术界和工业界的广泛关注、推广和普及。它是开源项目Lucene(搜索索引程序库)和Nutch(搜索引擎)的创始人Doug Cutting于2004年推出的,当时Doug Cutting 发现MapReduce正是其所需要解决大规模Web数据处理的重要计数,而因模仿Goole MapReduce,基于Java设计开发了一个成为hadoop的开源MapReduce并行计算框架和系统。

6.1.1MapReduce的特点

        我们前面说过hadoop的HDFS用于存储数据,MapReduce用来计算数据。接着来介绍一下MapReduce的特点。MapReduce适合处理离线的海量数据,这里的“离线”可以理解为本地存储,非实时处理。首先计算往往需要一段时间,如几分钟或者几个小时们根据业务数据和业务复杂程度有所区别。MapReduce往往处理大批数据,比如PB级或者ZB级别。特点如下

        易于编程:如果要编写分布式程序,只需要实现一些简单的接口,与编写普通程序类似,避免了复杂的过程。同时,编写的这个分布式程序可以部署到大批廉价的普通机器上运行。

        具有良好的拓展性:是指当一台机器的计算资源不能满足存储或者计算的时候,可以通过增加机器来增加存储和计算能力。

        具有高容错性:MapReduce设计的初衷是可以使程序部署运行在廉价的机器上,廉价的机器坏的概率相对较高,这就要求其具有良好的容错性。当一台机器“挂掉”以后,相应数据的存储和计算能力会被一直到另外一台机器上,从而实现容错性。

6.1.2MapRedcue的应用场景

        MapReduce的应用场景主要变现在从大规模数据中进行计算,不要求即时返回结果的场景,比如以下典型应用

        单词统计

        简单的数据统计,如网站PV和UV统计

        搜索引擎建立索引

        搜索引擎中,统计最流行的K个搜索词

        统计搜索词频率,帮助优化搜索词提示

        复杂数据分析算法实现

        下面介绍MapReduce不适用的方面:

        实时计算,MapReduce不适合在毫秒级或者秒级内返回结果。

        流式计算,MapReduce的输入数据是静态的,不能动态变化,所以不适合流式计算。

        DAG计算,如果多个应用程序存在一栏关系,并且后一个应用程序的输入为前一个的输出,这种情况也不适合。

6.2MapReduce执行过程

6.2.1单词统计实例

        假设有一个非常大的文件,需求是统计文件中每个单词的出现的次数,MapReduce的执行过程如下图

        图中主要分为Split、Map、Shuffle、和Reduce阶段,每个阶段在WordCount中的作用如下:

        Split阶段:首先大文件被切成多分,假设这里被切成了3份,每一行代表一份

        Map阶段:解析出每个单词,并在后面机上数字1

        Shuffle阶段:将每一份中的单词分组到一起,并按照字母进行排序

        Reduce阶段,将相同的单词进行累加

        输出结果

6.2.2MapReduce执行过程

        从WrodCount实例中,可以给予单词统计大概了解列MapReduce过程。接下来我们从理论层面面介绍一下

         具体执行过程树下:

        (1)数据会被切割成数据片段

        (2)数据片段以key和value的形式被读进来,默认是以行的下标位作为key,以行的内容作为value

        (3)数据会传入Map中进行处理,处理逻辑由用户自行定义,在Map中处理完后还是以key和value的形式输出。

        (4)输出的数据传给列Shuffle(洗牌),Shuffle完成对数据的排序和合并等操作,但是Shuffle不会对输入的数据进行改动,所以还是key2、value2

        (5)数据随后传给Reduce进行处理,Reduce处理完成后,生成key3、value3

        (6)Reduce处理完成后数据会被写到HDFS某个目录

6.2.3Map Reduce的文件切片---Split

        Split的大小默认与 block对应,也可以由用户任意控制。MapReduce的SPlit大小计算公式如下:

        max(min.sp

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值