大数据技术原理与应用作业七

大数据技术原理与应用作业七1. 试述MapReduce和Hadoop的关系。Google公司最先提出了分布式并行编程模型MapRedece,Hadoop MapReduce是它的开源实现。Google的MapReduce运行在分布式文件系统GFS上,与Google类似,HadoopMapReduce运行在分布式文件系统HDFS上。相对而言,HadoopMapReduce要比GoogleMapReduce使用门槛低很多,程序员即使没有任何分布式程序开发经验,也可以很轻松地开发出分布式程序并部署到计算机集群
摘要由CSDN通过智能技术生成

大数据技术原理与应用作业七

1. 试述MapReduce和Hadoop的关系。

Google公司最先提出了分布式并行编程模型MapRedece,Hadoop MapReduce是它的开源实现。Google的MapReduce运行在分布式文件系统GFS上,与Google类似,HadoopMapReduce运行在分布式文件系统HDFS上。相对而言,HadoopMapReduce要比GoogleMapReduce使用门槛低很多,程序员即使没有任何分布式程序开发经验,也可以很轻松地开发出分布式程序并部署到计算机集群中。

2. MapReduce是处理大数据的有力工具,但不是每个任务都可以使用MapReduce来进行处理。试述适合用MapReduce来处理的任务或者数据集需满足怎样的要求。

数据集条件是待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全地并行地进行处理。

3. MapReduce模型采用Master(JobTracker)-Slave(TaskTracker)结构,试描述JobTracker和TaskTracker的功能。

MapReduce 框架采用了Master/Slave 架构,包括一个Master 和若干个Slave。Master 上运行JobTracker,Slave 上运行TaskTracker用户提交的每个计算作业,会被划分成若千个任务。JobTracker 负责作业和任务的调度,监控它们的执行,并重新调度已经失败的任务。TaskTracker负责执行由JobTracker指派的任务。

4. TaskTracker出现故障会有什么影响?该故障是如何处理的?

TaskTracker周期性的向JobTracker汇报心跳,如果一定的时间内没有汇报这个心跳,JobTracker 就认为该TaskTracker 挂掉了,它就会把上面所有任务调度到其它TaskTracker(节点)上运行。这样即使某个节点挂了,也不会影响整个集群的运行。

如果jobtracker发现某个tasktracker发生故障,jobtracker将从任务节点列表中把故障的tasktracker移除。如果这个故障的tasktracker尚有map任务还没有完成,那jobtracker会通知其他节点重新执行此map任务,如果尚有reduce任务还没有完成,jobtracker会通知其他节点继续执行尚未完成的reduce任务。

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的过程)。

1. MapReduce框架使用InputFormat模块做Map前的预处理,比如,验证输入的格式是否符合输人定义;然后,将输入文件切分为逻辑上的多个InputSplit, InputSplit 是MapReduce对文件进行处理和运算的输人单位,只是一个逻辑概念, 每个InputSplit并没有对文件进行实际切割,只是记录了要处理的数据的位置和长度。
2. 因为InputSplit 是逻辑切分而非物理切分,所以,还需要通过RecordReader (RR)根据InputSplit中的信息来处理InputSplit中的具体记录,加载数据并转换为适合Map任务读取的键值对,输入给Map任务。
3. Map任务会根据用户自定义的映射规则,输出一系列的<key,value>作为中间结果。
4. 为了让Reduce可以并行处理Map的结果,需要对Map的输出进行-一定的分区、排序(Sort)、合并( Combine)、归并( Merge)等操作,得到<key,<value-list>>形式的中间结果, 再交给对应的Reduce进行处理,这个过程称为Shuffle。
5. Reduce 以一系列<key,value-list>中间结果作为输入, 执行用户定义的逻辑,输出结果给OutputFormat模块。
6. OutputFormat 模块会验证输出目录是否已经存在以及输出结果类型是否符合配置文件中的配置类型,如果都满足,就输出Reduce的结果到分布式文件系统。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lTkFldm0-1631693616604)(C:\Users\张昊\AppData\Roaming\Typora\typora-user-images\image-20201026204226411.png)]

7. Shuffle过程是MapReduce工作流程的核心,也被称为奇迹发生的地方,试分析Shuffle过程的作用。

Shufle,是指对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程。Shuffle 过程分为Map端的操作和Reduce端的操作。

1. 在Map端的Shuffle过程。Map的输出结果首先被写入缓存,当缓存满时,就启动溢写操作,把缓存中的数据写入磁盘文件,并清空缓存。当启动溢写操作时,首先需要把缓存中的数据进行分区,然后对每个分区的数据进行排序(Sort)和合并(Combine),之后再写入磁盘文件。每次溢写操作会生成一个新的磁盘文件,随着Map任务的执行,磁盘中就会生成多个溢写文件。在Map任务全部结束之前,这些溢写文件会被归并(Merge)成一个大的磁盘文件,然后,通知相应的Reduce任务来领取属于自己处理的数据。
2. 在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,检测是否是满足条件的所需元组,如果满足条件,则输出键值对<key,value>,也就是说,键和值都是t。这时的Reduce函数就只是一个恒等式,对输入不做任何变换就直接输出。

12. 试分析为何采用Combiner可以减少数据传输量。是否所有的MapReduce程序都可以采用Combiner?为什么?

对于每个分区内的所有键值对,后台线程会根据key 对它们进行内存排序(Sort ),排序是MapReduce 的默认操作。排序结束后,还包含一个可选的合并(Combine )操作。如果用户事先没有定义Combiner 函数,就不用进行合并操作。如果用户事先定义了Combiner 函数,则这个时候会执行合并操作,从而减少需要溢写到磁盘的数据量。

所谓“合并”,是指将那些具有相同key 的<key,value>的value 加起来。

不过,并非所有场合都可以使用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”进行单词统计的过程。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gVQUCBzI-1631693616613)(C:\Users\张昊\Desktop\未命名文件.svg)]

16. 在基于MapReduce的单词统计中,MapReduce是如何保证相同的单词数据会划分到同一个Reducer上进行处理以保证结果的正确性?

对有相同KEY的Map输出的键值对进行归并,得到新的键值对作为Reduce任务的输入,由Reduce任务计算每个单词出现的次数,以保证结果的正确性。

17. MapReduce可用于对数据进行排序,一种想法是利用MapReduce的自动排序功能,即默认情况下,Reduce任务的输出结果是有序的,则可以只使用一个Reducer来对数据进行处理、输出,则结果就是有序的了。但这样的排序过程无法充分利用MapReduce的分布式优点。试设计一个基于MapReduce的排序算法,假设数据位于[1,100],Reducer的数量为4,正序输出或逆序输出结果均可。试简要描述该算法(可使用Partition、Combine过程)。

如题,为了体现出MapReduce分布式的优点,采用了4个reducer,数据位于[1,100]区间。对于reduce,它的输入本来就是有序的,但是针对多个reducer,我们需引入partitioner,数据流就成为 map->partitioner->reducer,分为多个partitioner,我们只需要保证多个partition有序即可。

首先输入数据在map的时候根据key的数值划分red_id,即4个reducer需要拿到的数据,这样就先保证了partition有序,之后直接进行reduce,会输出4个part,4个part结合就是最终的排序结果。

18. 试设计一个基于MapReduce的算法,求出数据集中的最大值。假设Reducer大于1,试简要描述该算法(可使用Partition、Combine过程)。

首先对输入数据要进行一定的处理,将代找的数据设置为key。如果reducer大于1,可以设置partitioner将数据分多个桶,最后只需要在多个job完成的part中找到最后一个元素(正序。最后一个即最大值)即可。

19. 对于稀疏矩阵的乘法,试思考出不同于正文中矩阵乘法所采用的MapReduce策略,写出相应的Map函数和Reduce函数。

protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
   
    String[] records = 
  • 13
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
系统中,Hadoop与MapReduce A:大数据技术原理应用第三章主要介绍了分布式文件系统和MapReduce并行计算框架中的Hadoop技术,包括Hadoop的概念、特点、架构、组件、安装、使用等方面。在分布式文件系统中,Hadoop使用HDFS作为其基础架构,实现文件存储和访问的高可用性和可扩展性,能够支持大规模的数据存储和处理。而MapReduce是Hadoop提供的一种分布式并行计算框架,能够将大规模数据处理任务分解成多个小任务,在分布式计算环境中进行并行计算,从而提高数据处理能力和效率。 Hadoop的组件包括HDFS、YARN和MapReduce。其中,HDFS作为文件存储系统,YARN是Hadoop的资源管理框架,用于管理集群资源,对作业进行调度和监控。MapReduce是Hadoop的分布式计算框架,其基本思想是将计算任务分解成多个小任务,并在分布式计算环境中进行并行计算。在MapReduce执行过程中,Map函数用于将输入数据划分为若干份,并由多个Map任务同时处理,生成键值对;Reduce函数用于对Map任务生成的键值对进行汇总和统计,得到最终的结果。 Hadoop的安装和使用需要先配置环境,然后下载和安装Hadoop软件包,进行集群配置和启动,具体的安装和使用过程在第三章中有详细说明。 总结来说,Hadoop技术是大数据处理中非常重要的基础技术之一,能够支持大规模数据存储和处理,提高数据处理能力和效率。MapReduce并行计算框架是Hadoop的重要组件,能够将大规模数据处理任务分解成多个小任务,在分布式计算环境中进行并行计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值