2023学年完整公开课版MapReduce编程流程_第1页
2023学年完整公开课版MapReduce编程流程_第2页
2023学年完整公开课版MapReduce编程流程_第3页
2023学年完整公开课版MapReduce编程流程_第4页
2023学年完整公开课版MapReduce编程流程_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

MapReduce编程流程1MapReduce模型简介Map和Reduce函数MapReduce处理流程231.1.1 MapReduce模型简介MapReduce是什么?MapReduce是一个基于集群的高性能并行计算平台。MapReduce是一个并行计算软件架构。MapReduce是一个并行程序设计模型与方法。1.1.1 MapReduce模型简介分布式并行计算框架,源自于Google的MapReduce论文采用“分而治之,迭代汇总”的策略设计理念是“计算向数据靠拢”,而非“数据向计算靠拢”将并行计算抽象为两个函数:Map和Reduce采用了Master/Slave架构,包括一个Master和若干个Slave。1.1.1 MapReduce模型简介1.1.1 MapReduce模型简介MapReduce特性易于编程良好的扩展性高容错性适合海量数据的离线批量处理无法处理动态数据,无法进行流式计算函数输入输出说明Map<k1,v1>如:<行号,”abc”>List(<k2,v2>)如:<“a”,1><“b”,1><“c”,1>1.将小数据集进一步解析成一批<key,value>对,输入Map函数中进行处理2.每一个输入的<k1,v1>会输出一批<k2,v2>。<k2,v2>是计算的中间结果Reduce<k2,List(v2)>如:<“a”,<1,1,1>><k3,v3><“a”,3>输入的中间结果<k2,List(v2)>中的List(v2)表示是一批属于同一个k2的valueMap和Reduce1.1.2Map和Reduce函数MapReduce使用列表和键值对作为主要数据模式1.1.2Map和Reduce函数Map读取输入数据输出一组键值对输出作为中间结果Reduce读取中间结果按键分组合并输出一组最终结果需要用户编程实现数据

处理逻辑1.1.3MapReduce处理流程1.1.3MapReduce处理流程1.3 MapReduce工作流程1.3.1工作流程概述1.3.2MapReduce各个执行阶段1.3.3Shuffle过程详解1.3.1 工作流程概述MapReduce工作流程1.3.1 工作流程概述MapReduce工作流程不同的Map任务之间不会进行通信不同的Reduce任务之间也不会发生任何信息交换只有当Map处理全部结束后,Reduce过程才能开始Map需要考虑数据局部性,Reduce无需考虑数据局部性用户不能显式地从一台机器向另一台机器发送消息所有的数据交换都是通过MapReduce框架自身去实现的单一Reduce处理多个Reduce处理无Reduce处理1.3.1 工作流程概述不同数量Reduce1.3.2 MapReduce各个执行阶段1.3.3MapReduce核心组件核心组件之一:数据输入格式InputFormatInputFormat描述MapReduce作业数据的输入形式和格式验证作业数据的输入形式和格式;将输入数据分割为若干逻辑意义上的InputSplit提供一个RecordReader,用于将Mapper的输入(即InputSplit)处理转化为若干输入记录。InputFormat类是一个抽象类,有两个抽象方法:getSplits()方法将被Client调用,返回一个InputSplit列表createRecordReader()方法在初始化Mapper时调用,返回一个RecordReader用于读取记录1.3.3MapReduce核心组件核心组件之一:数据输入格式InputFormatFileInputFormatFileInputFormat重载了InputFormat类的getSplits()方法,用于从HDFS中读取文件并且分块,这些文件可能是文本文件或者顺序文件当开启Hadoop作业时,FileInputFormat会得到一个路径参数,FileInputFormat会读取这个路径(文件夹内)的所有文件,然后这些文件拆分成一个或多个InputSplit。1.3.3MapReduce核心组件核心组件之一:数据输入格式InputFormatHadoop提供了一些常用的内置InputFormat类,它们都是FileInputFormat的子类输入格式描述键值TextInputFormat(默认方式)默认格式,读取文件的行(偏移量,剩下所有值。eg:1,姓名年龄性别)行的字节偏移量行的内容KeyValueInputFormat把行解析为键值对(姓名为键,年龄性别为值)第一个tab字符前的所有字符行剩下的内容SequenceFileInputFormat读取二进制格式文件(数据类型的序列化与反序列化)用户自定义用户自定义1.3.3MapReduce核心组件核心组件之二:输入数据分片InputSplitInputSplit定义了输入到单个Map任务的输入数据MapReduce数据处理的基本单位是split。split是一个逻辑概念,包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等。它的划分方法完全由用户自己决定。1.3.3MapReduce核心组件Reduce任务的数量通常比Map任务数目稍微小一些Map任务的数量Hadoop为每个split创建一个Map任务,split数量决定Map任务数目理想分片大小是一个HDFS块。核心组件之二:输入数据分片InputSplit1.3.3MapReduce核心组件RecordReader定义了如何将数据记录转化为一个<key,value>对的方法,并将数据传递给Mapper类当数据传送给map时,InputFormat调用getSplits方法将数据分片,然后调用getRecorder()方法生成RecordReaderRecordReader再通过createKey()和createValue()方法创建可供map处理的<key,value>核心组件之三:数据记录读入RecordReader1.3.3MapReduce核心组件TextInputFormat是Hadoop默认的输入方法,对应的默认RecordReader是LineRecordReader,每个文件都会单独作为map的输入,每行数据都会生成一条记录,每条记录表示成<key,value>形式:key:是每个数据的记录在数据分片中的字节偏移量,数据类型是LongWritablevalue:是每行的内容,数据类型是Text核心组件之三:数据记录读入RecordReader1.3.3MapReduce核心组件核心组件之四:Mapper每个Mapper类的实例生成一个Java进程,负责处理某一个InputSplit上的数据Mapper实例执行用户在map()方法中自定义的工作给定一个键值对,map()方法会生成一个或多个键值对,形成中间结果对于整个作业输入部分的每一个map任务(输入块),每一个新的Mapper实例都会在单独的Java进程中被初始化,各个Mapper实例之间不能进行通信。1.3.3MapReduce核心组件核心组件之五:Partitioner&Shuffle&Combiner对Map输出进行分区(Partition)、排序(Sort)、合并(Combine)、归并(Merge)等操作,得到<key,value-list>形式的中间结果,再交给对应的Reduce进行处理如果用户事先没有定义Combiner函数,则不用进行合并操作如果用户事先定义了Combiner函数,则会执行合并操作,从而减少需要溢写到磁盘的数据量Shuffle1.3.3MapReduce核心组件核心组件之六:Reducer每个reduce任务负责对关联到相同键上的所有数值进行归约每一个节点收到的中间键集合,在被送到具体的reducer之前已经自动被Hadoop排序每个reduce任务都会创建一个Reducer实例,这是一个用户自定义代码的实例,负责执行特定作业的第二个重要的阶段对于每一个已被赋予到reducer的partition内的键来说,reducer的reduce()方法只会调用一次,它会接收一个键和关联到键的所有值的一个迭代器,迭代器会以一个未定义的顺序返回关联到同一个键的值1.3.3MapReduce核心组件核心组件之七:数据输出格式OutputFormatOutputFormat类用于描述MapReduce作业的数据输出格式和规范的抽象类。MapReduce框架依靠OutputFormat完成输出规范检查,并提供作业结果数据输出的功能,即提供RecordWriter的实现,输出文件被存储在文件系统FileSystem中如果用户要基于Hadoop内置的输出格式和内置的RecordWriter进行定制,则需要重载OutputFormat类的getRecordWriter()方法以便获取新的RecordWriter1.3.3MapReduce核心组件Hadoop提供的OutputFormat的实例会把文件写在本地磁盘或HDFS上,它们都是继承自公共的FileOutputFormat类每一个reducer会把结果输出写在公共文件夹中一个单独的文件内,这些文件的命名一般是part-nnnnn,其中,nnnnn是关联到某个reduce任务的partition的id,输出文件夹通过FileOutputFormat.setOutputPath()来设置可以通过MapReduce作业的JobConf对象setOutputFormat()方法来设置具体用到的输出格式核心组件之七:数据输出格式OutputFormat1.3.3MapReduce核心组件输出格式描述TextOutputFormat默认的输出格式,以一行一个键值对("key\tvalue")的方式把数据写入一个文本文件里。SequenceFileOutputFormat快速地序列化任意的数据类型到二进制文件中,对应SequenceFileInputFormat则会把文件反序列化为相同的数据类型并提交为下一个Mapper的输入数据NullOutputFormat忽略收到的数据,即不做输出核心组件之七:数据输出格式OutputFormat1.3.4 Shuffle过程详解Shuffle过程Map端的Shuffle过程Reduce端的Shuffle过程1.3.4 Shuffle过程详解Map端的Shuffle过程为每个Map任务分配一个缓存,默认100MB设置溢写比例0.8shuffle分区排序合并归并分区默认采用哈希函数排序是默认的操作合并不改变最终结果归并得到一个大的文件,放在本地磁盘文件归并时,如果溢写文件数量大于预定值(默认是3)则可以再次启动Combiner,少于3不需要合并(Combine)和归并(Mer

温馨提示

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

评论

0/150

提交评论