Hadoop技术与应用 课件 项目6 MapReduce应用_第1页
Hadoop技术与应用 课件 项目6 MapReduce应用_第2页
Hadoop技术与应用 课件 项目6 MapReduce应用_第3页
Hadoop技术与应用 课件 项目6 MapReduce应用_第4页
Hadoop技术与应用 课件 项目6 MapReduce应用_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MapReduce应用点击添加文本点击添加文本点击添加文本点击添加文本MapReduce作为Hadoop系统核心组件之一,是一种处理海量数据的分布式编程模型,用于对大规模数据集的并行计算,其核心包括Map函数和Reduce函数。本项目首先介绍了MapReduce的核心思想和工作流程,然后以单词统计编程为例介绍MapReduce编程方法和执行过程。项目概述点击添加文本点击添加文本点击添加文本点击添加文本大数据时代除了需要解决大规模数据的存储问题,还需要解决大规模数据的处理问题。分布式并行编程可以大幅提高程序性能,实现高效的批量数据处理。分布式程序运行在大规模计算机集群上,及群众包括大量廉价服务器,可以并行执行大规模数据处理任务,从而获得海量的计算能力。项目背景点击添加文本点击添加文本点击添加文本点击添加文本Hadoop自带的WordCount案例的运行过程以及相应的MapReduceJavaAPI编程过程。项目演示点击添加文本点击添加文本点击添加文本点击添加文本思维导图点击添加文本点击添加文本点击添加文本点击添加文本本项目主要介绍MapReduce的核心思想。MapReduce的编程模型。map和reduce的概念。MapReduce框架的组成。MapReduce的工作流程。MapReduceJavaAPI编程方法。点击添加文本点击添加文本点击添加文本点击添加文本目录任务2获取Hadoop资源任务1MapReduce概述点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述

MapReduce最早由Google提出,运行在Google的分布式文件系统GFS上,为搜索引擎提供后台网页的索引处理。如今MapReduce程序应用变得非常广泛,包括分布排序、web日志分析、构建索引、机器学习等方面。MapReduce将复杂的、运行于大规模集群上的并行计算过程高度抽象到两个函数:Map和Reduce。

MapReduce的核心思想是“分而治之”,也就是把一个复杂的问题按照一定的分解方法分为等价的规模较小的若干部分,然后逐个解决,再将各个部分的结果组成整个问题的结果。在MapReduce中,一个存储在分布式文件系统中的大规模数据集会被切分成许多独立的小数据块,这些小数据块可以被多个Map任务并行处理。MapReduce模型会为每个Map任务输入一个数据子集,Map任务生成的结果会继续作为Reduce任务的输入,最终由Reduce任务输出最终结果,并写入HDFS中。需要注意的是,数据子集是客户端输入的原始数据集分解而成的许多小数据集,这些小数据集可以完全并行地进行处理。1.1模型简介点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述MapReduce核心思想点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述

MapReduce模型的核心是Map函数和Reduce函数,程序员进行MapReduce编程时只需要关注如何实现这两个函数,而不需要处理并行编程中的其他各种复杂问题,如分布式存储、任务调度、负载均衡、容错处理、网络通信等问题,都交由MapReduce框架负责处理。

Map和Reduce函数都是以一组<key,value>键值对作为输入,按照一定的映射规则转换为另一组<key,value>键值对输出。

Map函数的输入来自HDFS中的数据块,数据格式可以是任意的,<key,value>键值对的类型也是任意的。Reduce函数的任务就是将输入的一系列具有相同键的键值进行处理,输出结果通常会合并成一个文件。比如,对于处理键为k的Reduce任务的输入形式为<k,<v1,v2,v3,…,vn>>,最终输出结果为<k,V>。1.2

Map和Reduce函数点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述

MapReduce会把一个复杂的问题按照一定的“分解”方法分为等价的规模较小的若干部分,然后逐个解决,分别计算出各个部分的结果,然后把各部分的结果合成整个问题的结果。可以先来看一个生活中的例子,假设某大型公司在全球设立了分公司,年底要统计公司本年度的营收情况制作报表,有两种统计方式:第一种是各分公司将自己的账单数据发送至总部,由总部统一计算公司本年度的营收报表;第二种是各分公司先统计各自的营收情况,将统计结构发送至总部,总部再进行统一汇总。两种方式相比,显然第二种方式的工作效率更高。

大规模数据的处理流程主要包括分布式存储和分布式计算两个核心环节,在Hadoop生态系统中,分布式存储由HDFS实现,而分布式计算由MapReduce实现。MapReduce的工作任务主要分为Map和Reduce两个阶段。Map阶段负责将任务分解,即把复杂的任务分解成若干个“简单的任务”来并行处理,前提是这些任务之间没有依赖关系,可以互不影响地单独执行;Reduce阶段负责将子任务合并,即把Map阶段输出的中间结果进行全局汇总,如图5-2。接下来将会详细阐述MapReduce的各个执行阶段。2.1

MapReduce工作流程点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述MapReduce处理数据流程点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述2.2

MapReduce各个执行阶段1.MapReduce框架使用InputFormat模块做Map前的预处理,然后将输入文件切分为多个Split(即分片),Split是MapReduce对文件进行处理和运算的输入单位,只是一个逻辑概念,每个分片并没有对文件进行实际切割,只是记录了要处理的数据的位置和长度。默认情况下,以HDFS的一个Block的大小(一般为128MB)为一个分片,每个Map任务处理一个分片。点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述2.2

MapReduce各个执行阶段2.Map任务会根据函数定义的映射规则,对输入的键值对进行处理,生成新的<key,value>作为中间结果。3.为了让Reduce可以并行处理Map的结果,需要对Map输出进行一定的分区(Partition)、排序(Sort)、合并(Combine)、归并(Merge)等操作,得到<key,value-list>形式的中间结果,再交给对应的Reduce进行处理,这个过程成为Shuffle。Shuffle可以说是MapReduce整个工作流程的核心环节,它的职责就是把Map端的输出结果有效地传送到Reduce端,shuffle过程分为Map端的操作和Reduce端的操作。点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述2.2

MapReduce各个执行阶段Shuffle过程点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述2.2

MapReduce各个执行阶段(1)Map端的Shuffle过程Map的输出结果首先被写入缓存,当缓存满时,就启动溢写操作,把缓存中的数据写入磁盘文件,并清空缓存。当启动溢写操作时,线程会将数据划分为与reduce任务数目相同的分区(partition),也就是一个reduce任务对应一个分区的数据。然后对每个分区的数据根据key进行排序(Sort),排序时MapReduce的默认操作。排序结束后,还包含一个可选的合并(Combine)操作,如果用户没有在提交的程序中定义Combiner函数,就不用进行合并操作。所谓合并,是将哪些具有相同key的<key,value>的value加起来。比如有两个键值对<b,1>和<b,1>,经过合并操作后就可以得到一个键值对<b,2>,减少了键值对的数量。这里需要注意,Map端的这种合并操作看起来和Reduce的功能相似,但是由于此操作发生在Map端,所以只能称之为“合并”,从而有别于Reduce。再者,并非所有场合都可以用Combiner,一般而言,求累加、最大值等计算场景可以使用合并操作。经过分区排序以及可能发生的合并操作(Combine可以减少需要溢写到磁盘的数据量)之后,这些缓存中的键值对就可以写入磁盘,并清空缓存。每次溢写操作都会生成一个新的磁盘文件。点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述2.2

MapReduce各个执行阶段(1)Map端的Shuffle过程Map的输出结果首先被写入缓存,当缓存满时,就启动溢写操作,把缓存中的数据写入磁盘文件,并清空缓存。当启动溢写操作时,线程会将数据划分为与reduce任务数目相同的分区(partition),也就是一个reduce任务对应一个分区的数据。然后对每个分区的数据根据key进行排序(Sort),排序时MapReduce的默认操作。排序结束后,还包含一个可选的合并(Combine)操作,如果用户没有在提交的程序中定义Combiner函数,就不用进行合并操作。所谓合并,是将哪些具有相同key的<key,value>的value加起来。比如有两个键值对<b,1>和<b,1>,经过合并操作后就可以得到一个键值对<b,2>,减少了键值对的数量。这里需要注意,Map端的这种合并操作看起来和Reduce的功能相似,但是由于此操作发生在Map端,所以只能称之为“合并”,从而有别于Reduce。再者,并非所有场合都可以用Combiner,一般而言,求累加、最大值等计算场景可以使用合并操作。经过分区排序以及可能发生的合并操作(Combine可以减少需要溢写到磁盘的数据量)之后,这些缓存中的键值对就可以写入磁盘,并清空缓存。每次溢写操作都会生成一个新的磁盘文件。点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述2.2

MapReduce各个执行阶段(2)Reduce端的Shuffle过程Reduce任务从Map端读取结果,即将自己要处理的那部分数据复制到本地。每个Map任务的完成时间可能都不同,只要有一个Map任务完成,Reduce任务就开始进行复制。Reduce端应该从哪台机器(从节点)上去取得Map输出呢?Map任务成功完成后,会通知ApplicationMaster。对于指定作业,ApplicationMaster知道map输出和NodeManger之间的映射关系。Reduce端中的一个线程会定期询问ApplictionMaster以获取Map输出的位置,直到获取所有输出位置。Reduce端接收的数据首先会存放在Reduce任务所在节点的内存缓冲区中,如果缓存被占满,就会像Map端一样被溢写到磁盘中,溢写过程启动时,具有相同key的键值对会被归并(Merge)。每个溢写过程结束后,都会在磁盘中生成一个溢写文件,因此磁盘上会存在多个溢写文件。最终,当所有Map端的数据接收完成时,多个溢写文件会被归并成一个大文件,归并时还会对键值对进行排序(和Map端类似),保证最终大文件中的键值对都是有序的。当然,在数据较少的情况下,缓存可以存储所有数据,就不需要把数据溢写到磁盘,而是直接在内存中执行归并操作,然后直接输出给reduce任务。点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述2.2

MapReduce各个执行阶段4.Reduce任务以一系列<key,value-list>中间结果作为输入,执行用户定义的reduce函数,输出结果交给OutputFormat模块。OutputFormat模块会验证输出目录是否存在以及输出结果类型是否符合配置文件中规定的类型,如果都满足,就将Reduce最终输出结果存入HDFS中。点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述3.1

MapReduce

API简介

对于MapReduce的应用开发,MapReduce架构为程序员屏蔽了很多底层的处理细节,简化了编程过程,提高了编程效率。MapReduce框架提供了多种访问接口API,以解决不同应用的计算问题,本章主要介绍JavaAPI。对于大多数计算问题,用户通常只用实现map和reduce函数,其他部分使用默认设置即可。

JavaAPI主要位于org.apache.hadoop.mapreduce和org.apache.hadoop.io包中,这些API能够支持的操作包括:启动作业、设置作业信息、定义map函数、定义reduce函数等。点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述3.1

MapReduce

Java

API编程MapReduce编程过程中常用的组件:

1.

InputFormat组件

InputFormat主要用于描述输入数据的格式,它提供以下两个功能:(1)数据切分,按照某个策略将输入数据切分成若干个分片(split),以便确定Map任务个数以及对应的分片(一个输入分片就是一个Map任务的输入数据)。(2)为Mapper提供输入数据:给定某个分片(split),将其解析成一个一个的key-value键值对。2.Mapper组件MapReduce程序会根据输入的文件产生多个map任务,Hadoop提供的Mapper类是实现map任务的基类,位于org.apache.hadoop.mapreduce包中,该类提供了一个map()方法,默认情况下,Mapper类中的map()方法是空的。若自定义map()方法,只需要继承Mapper类并重写map()方法即可。点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述3.1

MapReduce

Java

API编程

3.Partition组件

MapReduce作业通常会指定reduce任务和reduce任务输出文件的数量(R)。Partition组件可以对key进行分区,从而可以根据不同的key分发到不同的Reduce中去处理。常见的的分区方法使用hash(key)modR进行分区,即通过hash操作获得一个非负整数的hash码,然后用当前reduce节点数(即分区数)进行取模运算,以此决定此哪些key-value键值对将被分区到哪个reduce节点,hash方法通常能够产生非常平衡的分区。Hadoop自带了一个默认的分区器HashPartitioner,它继承了Partitioner类,并提供了一个getPartion方法。

4.Combiner组件

每个Map任务都可能会产生大量的本地输出,Combiner类的作用就是对map端的输出先做一次合并,以减少map和reduce节点之间的数据传输量,从而提高网络I/O性能,是MapReduce作业执行的一种性能优化手段。点击添加文本点击添加文本点击添加文本点击添加文本任务1MapReduce概述3.1

MapReduce

Java

API编程

5.Reduce组件

Map过程输出的键值对,将由Reducer组件进行合并处理,默认使用Hadoop提供的类Reducer,Reducer位于org.apache.hadoop.mapreduce包中,类中的reduce函数会遍历每个key的列表数据并输出。若自定义reduce()方法,只需要继承Reducer类并重写reduce()方法即可。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论