第5章 MapReduce分布式计算框架_第1页
第5章 MapReduce分布式计算框架_第2页
第5章 MapReduce分布式计算框架_第3页
第5章 MapReduce分布式计算框架_第4页
第5章 MapReduce分布式计算框架_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

第五章

MapReduce计算框架大数据理论与应用基础5.1

MapReduce简介5.2

MapReduce的工作原理5.3

MapReduce编程组件5.4本章小结本章目录大数据理论与应用基础5.1MapReduce简介大数据理论与应用基础5.1MapReduce简介MapReduce最早是由Google公司研究提出的一种面向大规模数据处理的并行计算模型和方法。MapReduce的推出给大数据并行处理带来了巨大的革命性影响,使其已经成为事实上的大数据处理的工业标准。大数据理论与应用基础5.1.1分布式并行编程为了更好地理解MapReduce相关内容,首先主要介绍分布式并行编程的概念在过去很长一段时间内,CPU的性能都遵循“摩尔定律”,CPU的性能大约每隔18个月翻一番,这就意味着不需要对程序进行改进,仅仅通过使用更高级的CPU就可以享受免费的性能提升。从2005年开始,“摩尔定律”逐渐失效。人们开始借助分布式并行编程来提高程序的运行性能。分布式程序运行在大规模计算机集群上,集群中包括大量廉价服务器,可以并行执行大规模数据处理任务,从而获得海量数据的计算能力。大数据理论与应用基础5.1.1分布式并行编程在MapReduce出现之前,已经有非常成熟的并行计算框架了,那为什么Google还需要MapReduce?大数据理论与应用基础对比方面传统并行计算框架MapReduce集群架构/容错性共享式(共享内存/共享存储),容错性差非共享式,容错性好硬件/价格/扩展性刀片服务器、高速网、SAN、价格高、扩展性差普通计算机/便宜/扩展性好编程/学习难度what-how、难what、简单适用场景实时、细粒度计算、计算密集型批处理、非实时、数据密集型5.1.2MapReduce模型简介MapReduce的核心思想就是“分而治之”,它把输入的数据集切分为若干独立的数据块,分发给一个主节点管理下的各个分节点来共同并行完成,通过整合各个节点的中间结果得到最终结果。为了更好地理解“分而治之”的核心思想,先来看一个生活中的例子。大数据理论与应用基础5.1.2MapReduce模型简介例如,某大型公司在全国设立了分公司,假设现在要统计公司一年的营收情况,制作年报。则有两种统计方式:大数据理论与应用基础第一种统计方式是各分公司将自己的账单数据发送至总部,由总部统计公司一年的营收情况5.1.2MapReduce模型简介这两种统计方式相比,显然第二种统计方式更好,工作效率更高。大数据理论与应用基础第二种统计方式是采用“分而治之”的思想,即先要求分公司各自统计一年的营收情况﹐再将统计结果发给总部进行统一汇总计算。5.1.2MapReduce模型简介MapReduce设计的一个理念就是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为移动数据需要大量的网络传输开销,尤其在大规模数据环境下,这种开销尤为惊人。所以,移动计算要比移动数据更加经济。本着这个理念,在一个集群中,只要有可能,MapReduce框架就会将Map程序就近在HDFS数据所在的节点上运行,即将计算节点和存储节点放在一起运行,从而减少节点间的数据移动开销。大数据理论与应用基础5.1.3MapReduce的优/缺点由于MapReduce具有编程简单、扩展性高、容错性高、海量数据处理能力强等特点,所以它在大数据和人工智能时代十分受欢迎。虽然MapReduce具有很多优点,但它也有不适用的场景,即在有些场景下并不适合用MapReduce来处理问题。大数据理论与应用基础5.1.3MapReduce的优/缺点MapReduce具有以下优点。1.易于编程它简单地实现一些接口,就可以完成一个分布式程序。这个分布式程序可以分布到大量廉价的计算机上运行,因此MapReduce编程变得非常流行。2.良好的扩展性当计算资源不能得到满足时,可以通过简单地增加机器来扩展MapReduce的计算能力。大数据理论与应用基础5.1.3MapReduce的优/缺点3.高容错性MapReduce设计的初衷就是使程序能够部署在廉价的计算机上,这就要求它具有很高的容错性。例如,当其中一台机器出现故障时,它可以把上面的计算任务转移到另外一台机器上运行,不至于使这个任务运行失败,而且这个过程不需要人工参与,完全是由Hadoop内部完成的。4.适合PB级以上海量数据的离线处理MapReduce适合PB级以上海量数据的离线处理,可以实现上千台服务器集群并发工作,提供数据处理能力。大数据理论与应用基础5.1.3MapReduce的优/缺点MapReduce的缺点表现在以下几方面:1.不擅长进行实时计算,MapReduce无法像MySQL一样,在毫秒或秒级内返回结果2.不擅长进行流式计算,流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化3.不擅长进行DAG(有向无环图)计算,多个应用程序存在依赖关系,后一个应用程序的输入为前一个应用程序的输出,在这种情况下,每个MapReduce作业的输出结果都会被写入磁盘,会造成大量的磁盘I/O,导致数据处理程序性能非常低下。大数据理论与应用基础5.1.4Map和Reduce函数MapReduce模型的核心是Map和Reduce函数,二者都是由应用程序开发者负责具体实现的。程序员只需关注如何实现Map和Reduce函数,而不需要处理并行编程中的其他各种复杂问题。Map和Reduce函数都是以<key,value>作为输入的,并按一定的映射规则转换成另一个或一批<key,value>进行输出。大数据理论与应用基础函数输入输出说明Map<k1,v1>List(<k2,v2>)将切片中的数据按照一定的规则解析成一批<key,value>,输入Map函数中进行处理。每个输入的<k1,v1>都会输出一批<k2,v2>,<k2,v2>是计算的中间结果Reduce<k2,List(v2)><k3,v3>List(v2)表示批属于同一个k2的value5.2MapReduce的工作原理大数据理论与应用基础5.2.1工作原理概述MapReduce的核心思想如所示,一个大的MapReduce作业首先会被拆分成许多个Map任务在多台机器上并行执行,每个Map任务通常运行在数据存储的节点上。这样,计算和数据就可以放在一起运行,而不需要额外的数据传输开销。大数据理论与应用基础5.2.1工作原理概述当Map任务执行结束后,会生成以<key,value>形式表示的许多中间结果。这些中间结果会被分发到多个Reduce任务中,在多台机器上并行执行,具有相同key的<key,value>会被分发到同一个Reduce任务中,Reduce任务会对中间结果进行汇总计算,从而得到最后结果,并输出到分布式文件系统中。大数据理论与应用基础5.2.1工作原理概述在MapReduce的整个执行过程中,Map任务的输入文件、Reduce任务的处理结果都是保存在分布式文件系统中的,而Map任务处理得到的中间结果则保存在本地存储空间中(如磁盘)。另外,只有当Map任务全部处理结束后,Reduce过程才开始;只有Map任务需要考虑数据局部性,实现“计算向数据靠拢”,而Reduce任务则无须考虑数据局部性。大数据理论与应用基础5.2.2

MapReduce的工作过程MapReduce模型开发简单且功能强大,专门为并行处理大规模数据而设计。下面结合下图来描述MapReduce的工作过程。大数据理论与应用基础5.2.2MapReduce的工作过程①分片/格式化数据源分片操作是指将源文件划分为大小相等的小数据块,即分片(Split),Hadoop会为每个分片构建一个Map任务,并由该任务运行自定义的map()函数,从而处理分片中的每条记录。格式化操作是指将划分好的分片格式化形成为<key,value>的键值对数据,其中,key代表偏移量,value代表每行的内容。大数据理论与应用基础5.2.2MapReduce的工作过程②执行Map任务每个Map任务都有一个内存缓冲区(大小为100MB),处理后的中间结果会写入缓冲区。当写入数据达到缓冲区阈值(80MB)时,系统会将溢出数据写入磁盘。在溢写过程中,MapReduce框架对key进行排序,可能会生成多个溢写文件。最后,所有溢写文件将被合并成一个文件。大数据理论与应用基础5.2.2MapReduce的工作过程③执行Shuffle过程在MapReduce的工作过程中,Map阶段处理的数据如何传递给Reduce阶段是MapReduce框架中一个关键的过程,这个过程叫作Shuffle。Shuffle会将Map任务输出的处理结果数据分发给Reduce任务,并在分发的过程中对数据按key进行分区和排序。关于Shuffle过程的具体机制,会在5.2.4节进行讲解。大数据理论与应用基础5.2.2MapReduce的工作过程④执行Reduce任务输入Reduce任务的数据流是<key,{valuelist}>形式,用户可以自定义reduce()方法进行逻辑处理,最终以<key,value>的形式输出。大数据理论与应用基础5.2.2MapReduce的工作过程⑤写入文件MapReduce框架会自动把Reduce任务生成的<key,value>传入OutputFormat的write()方法,实现文件的写入操作。大数据理论与应用基础5.2.3

Map任务工作原理Map任务作为MapReduce工作流程的前半部分,主要经历了5个阶段,分别是Read阶段、Map阶段,Collect阶段、Spill阶段和Combine阶段大数据理论与应用基础5.2.3Map任务工作原理1.Read阶段Read阶段的主要任务是Map任务通过用户编写的RecordReader,从输入的InputSplit中解析出一个个<key,value>。大数据理论与应用基础5.2.3Map任务工作原理2.Map阶段在Map阶段,解析出的<key,value>将交给用户编写的map()函数来处理,并产生一系列新的<key,value>。大数据理论与应用基础5.2.3Map任务工作原理3.Collect阶段在用户编写的map()函数中,数据处理完成后一般会调用outputCollector.collect()输出结果,在map函数内部,通过调用5.3.4节介绍的partitioner组件生成<key,value>分片,并写入一个环形内存缓冲区。大数据理论与应用基础5.2.3Map任务工作原理4.Spill阶段当环形缓冲区满后,MapReduce会将数据写到本地磁盘上,生成一个临时文件,这就是Spill阶段。需要注意的是,在将数据写入本地磁盘前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压缩等操作。大数据理论与应用基础5.2.3Map任务工作原理5.Combine阶段当所有数据处理完成以后,Map任务会对所有临时文件进行一次合并,以确保最终只会生成一个数据文件(output/file.out),同时生成相应的索引文件(output/file.out.index)。大数据理论与应用基础5.2.4

Shuffle的工作原理Shuffle过程是对Map任务的输出结果进行分区、排序、合并等处理并交给Reduce任务的过程。Shuffle过程是MapReduce整个工作流程的核心环节,理解Shuffle过程的基本原理对于理解MapReduce流程至关重要。Shuffle过程分为Map端的操作和Reduce端的操作。大数据理论与应用基础5.2.4Shuffle的工作原理Map端的Shuffle过程包括4个步骤:①输入数据和执行Map任务Map任务的输入数据一般保存在分布式文件系统(如GFS或HDFS)的文件块中,这些文件块的格式是任意的,可以是文档,也可以是二进制格式的。Map任务接收<key,value>作为输入后,按一定的映射规则转换成一批<key,value>进行输出。大数据理论与应用基础5.2.4Shuffle的工作原理②写入内存缓冲区先在内存缓冲区中积累一定数量的Map输出结果,再一次性地批量写入磁盘,这样可以大大减小对磁盘I/O的影响。需要注意的是,在Map输出结果写入内存缓冲区之前,key与value的值都会被序列化成字节数组。大数据理论与应用基础5.2.4Shuffle的工作原理③溢写(分区、排序和合并)当内存缓冲区中数据达到一定比例(如0.8)时,就需要进行溢写操作。溢写操作是将内存缓冲区中的内容一次性写入磁盘,并清空内存缓冲区。在溢写之前,内存缓冲区中的数据需要进行分区。对于每个分区内的所有键值对,会进行排序。在排序结束后,具有相同key的键值对进行合并,这个操作可以减少需要溢写至磁盘的数据量。大数据理论与应用基础5.2.4Shuffle的工作原理④文件归并最终,在Map任务全部结束之前,系统会对所有溢写文件中的数据进行归并,生成一个大的溢写文件,这个大的溢写文件中的所有键值对都是经过分区和排序的。所谓归并,就是指具有相同key的键值对会被归并成一个新的键值对。具体而言,若干具有相同key的键值对<k1,v1>,<k1,v2>,…,<k1,vn>会被归并成一个新的键值对<k1,<v1,v2,…,vn>>。大数据理论与应用基础5.2.4Shuffle的工作原理经过上述4个步骤以后,Map端的Shuffle过程就全部完成了,最终生成的一个大的溢写文件会被存放在本地磁盘上。这个大文件中的数据是被分区的,不同的分区会被发送到不同的Reduce任务进行并行处理。JobTracker会一直监测Map任务的执行,当监测到一个Map任务完成后,就会立即通知相关的Reduce任务来领取数据,并开始Reduce端的Shuffle过程。大数据理论与应用基础5.2.4Shuffle的工作原理Reduce端的Shuffle过程包括3个步骤①领取数据当Map端的Shuffle过程结束后,Reduce任务需要从Map端获取数据为了获取数据,每个Reduce任务会通过RPC向JobTracker询问相应的Map任务是否已经完成。JobTracker会监测Map任务的状态,一旦发现某个Map任务完成,就会通知相关的Reduce任务来领取对应的数据。大数据理论与应用基础5.2.4Shuffle的工作原理②归并数据当所有的Map端数据都已经被领回时,与Map端类似,多个溢写文件会被归并成一个大文件,归并时还会对键值对进行排序,从而使得最终大的溢写文件中的键值对都是有序的。大数据理论与应用基础5.2.4Shuffle的工作原理③把数据输入给Reduce任务磁盘中经过多轮归并后得到的若干个大文件,不会继续归并成一个新的大文件,二十直接输入给Reduce任务,这样可以减少磁盘读写开销。由此,整个Shuffle过程顺利结束。接下来,Reduce任务会执行Recue函数中定义的各种映射,输出最终结果,并保存到分布式文件系统中(比如GFS或HDFS)。大数据理论与应用基础5.2.5

Reduce任务的工作原理Reduce任务的工作过程主要经历了5个阶段,分别是Copy阶段、Merge阶段,Sort阶段、Reduce阶段和Write阶段大数据理论与应用基础5.2.5Reduce任务的工作原理1.Copy阶段Reduce会从各个Map任务上远程复制一个分片数据,针对某一分片数据,如果其大小超过一定阈值,则将其写到磁盘上,否则直接将其放到内存中。大数据理论与应用基础5.2.5Reduce任务的工作原理2.Merge阶段在远程复制数据的同时,Reduce任务会启动两个后台线程,分别对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘文件过多。大数据理论与应用基础5.2.5Reduce任务的工作原理3.Sort阶段用户编写reduce()方法,输入的是按key进行聚集的一组数据。为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个Map任务已经对自己的处理结果进行了局部排序,因此,Reduce任务只需对所有数据进行一次归并排序即可。大数据理论与应用基础5.2.5Reduce任务的工作原理4.Reduce阶段对排序后的键值对调用reduce()方法,key相等的键值对调用一次reduce()方法,每次调用会产生零个或多个键值对,最终把这些输出的键值对写到HDFS中。大数据理论与应用基础5.2.5Reduce任务的工作原理5.Write阶段Reduce()函数将计算结果写到HDFS上。注意:Reduce任务的数量和Map任务的数量不一样,Reduce任务的数量可以手动指定,但是数量指定是有一定要求的。一般在默认情况下,Reduce任务的数量应该与Map任务中的Map阶段和Collect阶段写出的分区数目对应。大数据理论与应用基础5.3MapReduce编程组件大数据理论与应用基础5.3

MapReduce编程组件我们可以借助MapReduce提供的一些编程组件来实现一个MapReduce程序,本节介绍MapReduce编程常见的组件:InputFormat组件、Mapper组件、Reducer组件、Partitioner组件、Combiner组件和OutputFormat组件。大数据理论与应用基础5.3.1InputFormat组件InputFormat组件主要用于描述输入数据的格式,提供了两个功能:一是数据切分,即按照某种策略将输入数据切分成若干分片,以便确定Map任务的数量,即Mapper的数量,在MapReduce框架中,一个分片就意味着需要一个Map任务;二是为Mapper提供输入数据,即给定一个分片,(使用其中的RecordReader对象)将其解析为一个个<key,value>键值对。大数据理论与应用基础5.3.1InputFormat组件HadoopMapReduce自带了一些InputFormat的实现类,Hadoop提供的InputForamt的实现类层次图如下图:大数据理论与应用基础5.3.1InputFormat组件下面看几个具有代表性的InputFormat实现类。(1)FileInputFormat。FileInputFormat是一个抽象类,它最重要的功能是为各种InputFormat提供统一的getSplits()方法,该方法最核心的部分是文件切分算法和Host选择算法。(2)TextInputFormat。在默认情况下,MapReduce使用TextInputFormat类来读分片并将记录数据解析成一个个<key,value>。大数据理论与应用基础5.3.1InputFormat组件(3)CombineFileInputFormat。CombineFileInputFormat类的作用是把许多文件合并为一个Map的输入。它的主要思路是把输入目录下的大文件分成多个Map任务的输入,并合并小文件,作为一个Map任务的输入。适合多个小文件的场景。(4)SequenceFileInputFormat。SequenceFileInputFormat是一个顺序的二进制的FileInputFormat,内部以<key,value>的格式保存数据,通常会结合LZO或Snappy压缩算法来读取或保存可分片的数据文件。大数据理论与应用基础5.3.2

Mapper组件MapReduce程序会根据输入的文件产生多个Map任务。Hadoop提供的Mapper类是实现Map任务的一个抽象基类,该基类提供了一个map()方法。在默认情况下,Mapper类中的map()方法是没有做任何处理的。需要用户根据具体的业务需求来自定义该方法的实现。用户可以通过继承Mapper类并重写map()方法,来实现自己的数据处理逻辑。大数据理论与应用基础5.3.3

Reducer组件Map过程输出的键值对将由Reducer组件进行合并处理。Hadoop提供了几种常见的Reducer的子类,这些类可以直接用于作业中。Reducer可以在org.apache.hadoop.mapreduce.lib.reduce包下面找到如下子类。(1)IntSumReducer:输出每个key对应的整数值列表的总和。(2)LongSumReducer:输出每个key对应的长整数值列表的总和。大数据理论与应用基础5.3.4

Partitioner组件Partitioner组件是负责将Map任务的输出结果按照key进行分区的组件。它的主要作用是确保具有相同key的数据被发送到同一个Reduce任务中。在MapReduce过程中,Map任务会将数据划分为一组键值对(key-valuepairs),其中key表示数据的标识或分类,而value则是实际的数据。Partitioner组件接收Map任务的输出,并根据key对数据进行分区,以便后续的Reduce任务可以对具有相同key的数据进行处理。大数据理论与应用基础5.3.4Partitioner组件如果想自定义一个Partitioner组件,则需要继承Partitioner类并重写getPartition()方法。在重写getPartition()方法的过程中,通常的做法使用哈希函数对key进行计算,得到一个唯一的哈希码。然后,将哈希码对Reduce任务个数取模。将哈希码映射到一个特定的Reduce任务上,从而确定该键值对应该被发送到哪个Reduce任务进行处理。哈希函数通常会将不同的key映射到不同的哈希码,并且哈希码的分布也相对均匀。通过取模运算,可以将不同的哈希码分配给不同的Reduce任务,从而使得数据能够均匀地分布到各个Reduce任务上进行并行处理。大数据理论与应用基础5.3.5

Combiner组件Combiner是MapReduce程序中Mapper和Reducer之外的一种组件。Combiner组件的作用就是对Map阶段输出的重复数据先做一次合并计算,然后把新的<key,value>作为Reduce阶段的输入。注意:Combiner组件的使用要非常谨慎:因为Combiner组件在MapReduce过程中可能被调用也可能不被调用,可能被调用一次也可能被调用多次,无法确定和控制。所以,Combiner使用的原则是:确保其使用对业务逻辑没有影响,无论Combiner是否被调用或被调用多次,最终的结果应该是一致的。而且,Combiner组件的输出<key,value>应该与Reducer的输入<key,value>类型对应。因为有时如果使用Combiner组件不当,就会对统计结果造成错误。大数据理论与应用基础5.3.5OutputFormat组件InputFormat描述的是MapReduce的输入规范,而OutputFormat描述的是MapReduce的输出规范。OutputFormat目的是设置MapReduce的作业输出格式。下面介绍一些常见的OutputFormat实现类。(1)文本输出TextOutputFormat。对于MapReduce任务,其默认的输出格式是TextOutputFormat,它把每条记录都写为文本行。它的键和值可以为任意类型,因为TextOutputFormat调用toString()方法把记录换为字符串。大数据理论与应用基础5.3.5OutputFormat组件(2)SequenceFileOutputFormat。SequenceFileOutputFormat将它的输出写为一个序列化文件,如果输出需要作为后续MapReduce任务的输入,这便是一种好的输出格式,因为它的格式紧凑,很容易被压缩。(3)自定义OutputFormat类。根据用户需求,可以自定义OutputFormat类实现特定的输出逻辑和格式要求。大数据理论与应用基础5.4MapReduce案例大数据理论与应用基础5.4

MapReduce案例为了帮助读者更好地学习和理解MapReduce计算框架,本节详细介绍包括WordCount、倒排索引、数据去重和Top-N在内的MapReduce案例。大数据理论与应用基础5.4.1MapReduce测试方式在正式开始介绍MapReduce案例前,先介绍MapReduce的两种测试方式。1.本地测试本地测试需要在本地编写程序并准备本地输入文件,通过配置Hadoop依赖的方式对编写的程序进行本地测试,在本地运行主要是看MapReduce的业务逻辑是不是正确的。2.集群测试集群测试需要将编写的程序打包上传到集群中。这种测试方式更能模拟真实生产环境下的运行方式。本地测试和集群测试不是非此即彼的,一般来说,一个MapReduce首先要经过本地测试,然后进行集群测试,只有这样才能投入使用。大数据理论与应用基础5.4.2WordCount在编程语言的学习过程中,都会以“HelloWorld”程序作为入门范例,WordCount就是类似“HelloWorld”的MapReduce入门程序,WordCount程序任务如下表所示。大数据理论与应用基础项目描述程序WordCount输入一个包含大量单词的文本文件输出文件中的每个单词及其出现次数(频数),并按照单词字母顺序排序,每个单词及其频数占一行,单词和频数之间有间隔5.4.2WordCount下表给出了一个WordCount程序的输入和输出实例。大数据理论与应用基础输入输出HelloWorldHelloHadoopHelloMapReduceHadoop1Hello3MapReduce1World15.4.2WordCount假设在执行单词统计任务的MapReduce作业中有3个执行Map任务的Worker和1个执行Reduce任务的Worker。一个文档包含3行内容,每行分配给一个Map任务来处理。Map操作的输入是<key,value>形式。其中,key是文档中某行的行号,value是该行的内容。那么Map操作会将输入文档中的每个单词都以<key,value>的形式作为中间结果进行输出。Map操作如右图大数据理论与应用基础5.4.2WordCount在Map端的Shuffle过程中,如果用户没有定义Combiner()函数,则Shuffle过程会把具有相同key的键值对归并成一个键值对,这些归并后的键值对会作为Reduce任务的输入,由Reduce任务为每个单词计算出其总的出现频数。用户没有定义Combiner()函数时的Reduce过程如右图。大数据理论与应用基础5.4.2WordCount在实际应用中,每个输入文件被Map()函数解析后,都可能会生成大量类似<“the”,1>这样的中间结果,显然,这会大大增加网络传输开销。对于这种情形,MapReduce支持用户提供Combiner()函数来对中间结果进行合并后发送给Reduce任务。自定义Combiner()函数后的Reduce过程如右图。大数据理论与应用基础5.4.3倒排索引倒排索引(InvertedIndex)是文档检索系统中最常用的数据结构,广泛应用于全文搜索引擎。倒排索引主要用来存储某个单词(或词组)在一组文档中的存储位置的映射,提供了可以根据内容查找文档的方式,而不是根据文档来确定内容,因此称为倒排索引。带有倒排索引的文件称为倒排索引文件,简称倒排文件(InvertedFile)。大数据理论与应用基础5.4.3倒排索引通常情况下,倒排文件由一个单词(或词组)和相关联的文档列表组成,如图所示。可以看出,建立倒排索引的目的是可以更加方便地搜索。例如,单词1出现文档1、文档4文档13等文档中,单词2出现在文档2、文档6,文档10等文档中,单词3出现在文档3、文档7等文档中。大数据理论与应用基础5.4.3倒排索引现假设有3个源文件filel.txt、file2.txt和file3.txt,需要对这3个源文件内容实现倒排索引,并将最后的倒排文件输出,整个过程要求实现如图所示的转换。大数据理论与应用基础5.4.3倒排索引首先使用默认的TextInputFormat类对每个输入文件进行处理,得到文本中每行的偏移量及其内容。Map阶段首先分析输入的<key,value>,经过处理可以得到倒排索引中需要的3个信息:单词、文档名称和词频。对输入文件进行处理的过程如图所示。大数据理论与应用基础5.4.3倒排索引经过Map阶段的数据转换后,同一个文档中相同的单词会出现多个的情况,而单纯依靠后续Reduce阶段无法同时完成词频统计和生成文档列表两项任务,因此必须增加一个Combine阶段,先完成每个文档的词频统计。Combine阶段如图所示。大数据理论与应用基础5.4.3倒排索引经过上述两个阶段的处理后,Reduce阶段只需将所有文件中具有相同key的value进行统计,并组合成倒排索引文件所需的格式即可,组合过程如图所示。大数据理论与应用基础5.4.4数据去重数据去重主要是为了掌握利用并行化思想,对数据进行有意义的筛选。数据去重是去除重复数据的操作。在大数据开发中,对于统计大数据集上的多种数据指标这些复杂的任务,都会涉及数据去重。大数据理论与应用基础5.4.4数据去重现假设有数据文件file1.txt和file2.txt,内容如下。filel.txt本身包含重复数据,并且与file2.tx

温馨提示

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

评论

0/150

提交评论