林子雨大数据技术原理及应用第七章课后题答案(共8页).docx
精选优质文档-倾情为你奉上大数据技术第七章课后题答案黎狸1. 试述MapReduce和Hadoop的关系。谷歌公司最先提出了分布式并行编程模型MapReduce, Hadoop MapReduce是它的开源实现。谷歌的MapReduce运行在分布式文件系统GFS上,与谷歌类似,HadoopMapReduce运行在分布式文件系统HDFS上。相对而言,HadoopMapReduce 要比谷歌MapReduce 的使用门槛低很多,程序员即使没有任何分布式程序开发经验,也可以很轻松地开发出分布式程序并部署到计算机集群中。2. MapReduce 是处理大数据的有力工具,但不是每个任务都可以使用MapReduce来进行处理。试述适合用MapReduce来处理的任务或者数据集需满足怎样的要求。适合用MapReduce来处理的数据集,需要满足一个前提条件: 待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。3. MapReduce 模型采用Master(JobTracker)-Slave(TaskTracker)结构, 试描述JobTracker 和TaskTracker的功能。 MapReduce 框架采用了Master/Slave 架构,包括一个Master 和若干个Slave。Master 上运行JobTracker,Slave 上运行TaskTrackero 用户提交的每个计算作业,会被划分成若千个任务。JobTracker 负责作业和任务的调度,监控它们的执行,并重新调度已经失败的任务。TaskTracker负责执行由JobTracker指派的任务。4. TaskTracker 出现故障会有什么影响?该故障是如何处理的?5. MapReduce计算模型的核心是Map函数和Reduce函数,试述这两个函数各自的输人、输出以及处理过程。Map函数的输人是来自于分布式文件系统的文件块,这些文件块的格式是任意的,可以是文档,也可以是二进制格式。文件块是一系列元素的集合,这些元素是任意类型的,同一个元素不能跨文件块存储。Map函数将输人的元素转换成<key,value形式的键值对,键和值的类型也是任意的,其中,键不同于一般的标志属性,即键没有唯一性,不能作为输出的身份标识,即使是同一输人元素,也可通过一个Map任务生成具有相同键的多个<key,value>。Reduce函数的任务就是将输人的一-系列具有相同键的键值对以某种方式组合起来,输出处理后的键值对,输出结果会合并成一个文件。用户可以指定Reduce任务的个数(如n个),并通知实现系统,然后主控进程通常会选择一个Hash函数,Map任务输出的每个键都会经过Hash函数计算,并根据哈希结果将该键值对输人相应的Reduce任务来处理。对于处理键为k的Reduce任务的输人形式为<K,<v1,v2,vn>>.,输出为<k,V>。6. 试述MapReduce的工作流程(需包括提交任务、Map、Shuffle、 Reduce的过程)。MapReduce框架使用InputFormat模块做Map前的预处理,比如,验证输入的格式是否符合输人定义;然后,将输入文件切分为逻辑上的多个InputSplit, InputSplit 是MapReduce对文件进行处理和运算的输人单位,只是一个逻辑概念, 每个InputSplit并没有对文件进行实际切割,只是记录了要处理的数据的位置和长度。因为InputSplit 是逻辑切分而非物理切分,所以,还需要通过RecordReader (RR)根据InputSplit中的信息来处理InputSplit中的具体记录,加载数据并转换为适合Map任务读取的键值对,输入给Map任务。Map任务会根据用户自定义的映射规则,输出一系列的<key,value>作为中间结果。为了让Reduce可以并行处理Map的结果,需要对Map的输出进行-一定的分区、排序(Sort)、合并( Combine)、归并( Merge)等操作,得到<keyvalue-list>形式的中间结果, 再交给对应的Reduce进行处理,这个过程称为Shuffle。Reduce 以一系列<key,value-list>中间结果作为输入, 执行用户定义的逻辑,输出结果给OutputFormat模块。OutputFormat 模块会验证输出目录是否已经存在以及输出结果类型是否符合配置文件中的配置类型,如果都满足,就输出Reduce的结果到分布式文件系统。7. Shuffle 过程是MapReduce 工作流程的核心,也被称为奇迹发生的地方,试分析Shuffle过程的作用。Shufle,是指对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程。Shuffle 过程分为Map端的操作和Reduce端的操作。 在Map端的Shuffle过程。Map的输出结果首先被写入缓存,当缓存满时,就启动溢写操作,把缓存中的数据写入磁盘文件,并清空缓存。当启动溢写操作时,首先需要把缓存中的数据进行分区,然后对每个分区的数据进行排序( Sort)和合并( Combine),之后再写入磁盘文件。每次溢写操作会生成-一个新的磁盘文件,随着Map任务的执行,磁盘中就会生成多个溢写文件。在Map任务全部结束之前,这些溢写文件会被归并( Merge)成-一个大的磁盘文件,然后,通知相应的Reduce任务来领取属于自己处理的数据。 在Reduce端的Shuffle 过程。Reduce 任务从Map端的不同Map机器领回属于自己处理的那部分数据,然后,对数据进行归并( Merge )后交给Reduce处理。8. 分别描述Map端和Reduce端的Shuffle过程(需包括Spill Sort、 Merge、Fetch 的过程)。(1)Map端的Shuffle过程: 输入数据和执行Map任务。 写入缓存 溢写(分区,排序和合并) 文件归并(2)Reduce端的Shuffle过程: “领取”数据 归并数据 把数据输入Reduce任务9. MapReduce 中有这样-一个原则:移动计算比移动数据更经济。试述什么是本地计算,并分析为何要采用本地计算。 MapReduce设计的一个理念就是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为移动数据需要大量的网络传输开销,尤其是在大规模数据环境下,这种开销尤为惊人,所以,移动计算要比移动数据更加经济。本地计算:在一个集群中,只要有可能,MapReduce框架就会将Map程序就近地在HDFS数据所在的节点运行,即将计算节点和存储节点放在一起运行,从而减少了节点间的数据移动开销。10. 试说明一个MapReduce程序在运行期间,所启动的Map任务数量和Reduce任务数量各是由什么因素决定的。MapReduce的核心思想可以用“分而治之”来描述,一个大的MapReduce作业,首先会被拆分成许多个Map任务在多台机器上并行执行,即Map任务的数量取决于mapReduce作业的大小。当Map任务结束后,会生成以<key,value>形式表示的许多中间结果。然后,这些中间结果会被分发到多个Reduce任务在多台机器上并行执行,具有相同key的<key,value>会被发送到同一个Reduce任务那里,Reduce任务会对中间结果进行汇总计算得到最后结果,并输出到分布式文件系统中。即reduce的任务数量取决于Map输出结果中key的数量。11. 是否所有的MapReduce程序都需要经过Map和Reduce这两个过程?如果不是,请举例说明。不是。对于关系的选择运算,只需要Map过程就能实现,对于关系R 中的每个元组t,检测是否是满足条件的所需元组,如果满足条件,则输出键值对<,>,也就是说,键和值都是t。这时的Reduce函数就只是一个恒等式,对输入不做任何变换就直接输出。12. 试分析为何采用Combiner可以减少数据传输量?是否所有的MapReduce程序都可以采用Combiner?为什么? 对于每个分区内的所有键值对,后台线程会根据key 对它们进行内存排序(Sort ),排序是MapReduce 的默认操作。排序结束后,还包含一个可选的合并(Combine )操作。如果用户事先没有定义Combiner 函数,就不用进行合并操作。如果用户事先定义了Combiner 函数,则这个时候会执行合并操作,从而减少需要溢写到磁盘的数据量。 所谓“合并”,是指将那些具有相同key 的<key,value>的value 加起来,比如,有两个键值对<*xmu",1>和<*xmu",1>,经过合并操作以后就可以得到一个键值对<*xmu",2>,减少了键值对的数量。不过,并非所有场合都可以使用Combiner,因为,Combiner的输出是Reduce任务的输人,Combiner绝不能改变Reduce任务最终的计算结果,一般而言,累加、最大值等场景可以使用合并操作。13. MapReduce 程序的输入文件、输出文件都存储在HDFS中,而在Map任务完成时的中间结果则存储在本地磁盘中。试分析中间结果存储在本地磁盘而不是HDFS上有何优缺点。因为Map的输出是中间的结果,这个中间结果是由reduce处理后才产生最终输出结果,而且一旦作业完成,map的输出结果就可以删除。如果把它存储在hdfs中就并备份,有些小题大作,如果运行map任务的节点将map中间结果传送给reduce任务之前失败,hadoop将在另一个节点上重新运行这个map任务以在此构建中间结果。14. 早期版本的HDFS,其默认块( Block)大小为64MB,而较新的版本默认为128MB,采用较大的块具有什么影响和优缺点?优点:块寻址时间变短15. 试画出使用MapReduce来对英语句子“Whatever is worth doing is worth doing well"进行单词统计的过程。Map输出<Whatever,1><is,1><worth,1><doing,1><is,1><worth,1><doing,1><well,1>Map输入“Whatever is worth doing is worth doing well"MapReduce任务的输出Map端Shuffle后的结果发送给Reduce任务Map输出的结果<Whatever,1><is,2><worth,2><doing,2><well,1><Whatever,1><is,<1,1>><worth,<1,1>><doing,<1,1>><well,1><Whatever,1><is,1><worth,1><doing,1><is,1><worth,1><doing,1><well,1>ReduceShuffle16. 在基于MapReduce的单词统计中,MapReduce是如何保证相同的单词数据会划分到同一个reduce上进行处理以保证结果的正确性? 对有相同KEY的Map输出的键值对进行归并,得到新的键值对作为Reduce任务的输入,由Reduce任务计算每个单词出现的次数,以保证结果的正确性。专心-专注-专业