头歌大数据作业三:MapReduced与执行wordcount

课外作业三:MapReduced与执行wordcount

  • 作业详情

内容

  • 开通自己的ECS,规格至少2vCPU 4GiB,才能运行MapReduce。
  • 搭建Hadoop伪分布式,启动Hadoop。
  • 创建wordcount程序的输入数据文件,并输入一些内容。
  • HDFS上创建/input路径,上传wordcount程序的输入数据文件到HDFS的/input路径下。
  • 运行成功之后查看HDFS的/output/part-r-00000文件里的词频统计结果。
  • 简要回答“课堂考核”内容
  1. 启动Hadoop后,执行HDFS的是哪些节点?它们分别是干什么的?

答:启动Hadoop后,执行HDFS的是NameNode和DataNodes节点。NameNode节点主要负责存储文件系统的元数据,负责文件系统目录结构和文件标识符,以及对文件系统的访问控制,DataNode节点负责存储文件块,处理文件读写请求等。

  1. 配置文件core-site.xml的hadoop.tmp.dir和fs.defaultFS分别配置的是什么?

答:配置文件core-site.xml的hadoop.tmp.dir配置的是Hadoop临时文件的存储路径,fs.defaultFS配置的是NameNode的URI,用来指示客户端要访问的Hadoop文件系统。

  1. 配置文件hdfs-site.xml的dfs.namenode.name.dir和dfs.datanode.data.dir分别配置的是什么?

答:配置文件hdfs-site.xml的dfs.namenode.name.dir配置的是NameNode存储元数据信息(如文件目录结构,文件标识符)的文件系统路径,dfs.datanode.data.dir配置的是DataNode存储文件块信息的文件系统路径。

  1. 你的Hadoop的NameNode、DataNode和SecondaryNamenode节点都在哪? SecondaryNamenode怎么没有配置?

答:Hadoop的NameNode、DataNode和SecondaryNamenode节点都在本地服务器上,SecondaryNamenode略过,可以不用配置。

  1. 启动Hadoop后,执行MapReduce的是哪些节点?它们分别是干什么的?

答:启动Hadoop后,执行MapReduce的是NameNode、DataNode、ResourceManager和NodeManager节点。NameNode和DataNode负责存储文件和文件系统的元数据,ResourceManager负责作业调度和资源管理,NodeManager负责节点上的作业执行。

  1. 配置文件mapred-site.xml和yarn-site.xml为什么没有配置?如果要配置,对节点ResourceManager和NodeManager需要配置什么?

答:配置文件mapred-site.xml和yarn-site.xml没有配置,如果要配置,mapred-site.xml需要配置mapreduce.framework.name项,用来指示MapReduce是使用YARN框架,而yarn-site.xml需要配置ResourceManager和NodeManager的相关参数,如yarn.nodemanager.resource.memory-mb、yarn.resourcemanager.hostname等。

  1. 用上述节点运行wordcount程序的工作流程是怎么的?

答:wordcount程序的工作流程是:首先,在ResourceManager节点上接收客户端的应用程序,然后根据配置的容量将任务分割成子任务,每个子任务由一个NodeManager节点来处理,处理完成后将结果返回给ResourceManager,最后由ResourceManager节点合并结果输出给客户端。

  1. wordcount程序运行过程中,你看到了哪些函数运行?

答:在运行wordcount程序过程中,可以看到以下函数被调用:Map函数,Reduce函数,shuffle函数,sort函数,merge函数和output函数。

  • 7.7 习题
  1. 试述 MapReduce 和 Hadoop的关系。

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

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

答:适合用MapReduce来处理的数据集,需要满足一个前提条件: 待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。

  1. MapReduce计算模型的核心是Map函数和Reduce函数,试述这两个函数各自的输入、输出以及处理过程。

答: Map函数和Reduce函数各自的输入、输出以及处理过程: Map函数的输入是一对(key, value),输出是一组中间结果,通常以(key', value')的形式表示,其中key'为中间结果的键,value'为中间结果的值。Map函数的处理过程是对输入数据进行特定的处理,生成一组中间结果,每个中间结果都包含一个键值对。 Reduce函数的输入是一组中间结果,输出是一组最终结果,通常以(key'', value'')的形式表示,其中key''为最终结果的键,value''为最终结果的值。Reduce函数的处理过程是对一组中间结果进行特定的聚合操作,生成一组最终结果。

  1. 试述MapReduce的工作流程(需包括提交任务、Map、ShuffleReduce的过程)。

答: • 提交任务:用户向Hadoop提交MapReduce任务; • Map阶段:每个Map任务读取一个数据块,并对其进行特定的处理,生成一组中间结果; • Shuffle阶段:对中间结果进行排序、分组和分区,并将它们传递给相应的Reduce任务; • Reduce阶段:每个Reduce任务对分配给它的一组中间结果进行聚合操作,生成一组最终结果。

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

答:Shuffle过程是MapReduce工作流程的核心,其作用是将Map任务的中间结果按照键进行排序、分组和分区,并将它们传递给相应的Reduce任务。Shuffle过程的作用是为Reduce任务提供正确的数据输入,保证Reduce函数能够对中间结果进行正确的聚合操作。

  1. 分别描述 Map端和 Reduce端的Shuffle过程(需包括溢写、排序、归并、“领取”的过程)。

答:Map端的Shuffle过程包括将Map输出的键值对按照键进行分区,每个分区内的数据进行排序,并将分区中的数据写入临时磁盘文件。Reduce端的Shuffle过程包括将来自不同Map任务的数据按照键进行排序并归并到一起,然后将数据交给对应的Reduce任务进行处理。"领取"过程指的是Reduce任务从Map任务所在节点上的临时磁盘文件中获取属于自己的数据进行处理。溢写指的是当一个Map任务的输出超过了一定的阈值时,将会将部分数据写入磁盘而不是存储在内存中,以防止内存溢出。

  1. MapReduce中有这样一个原则:移动计算比移动数据更经济。试述什么是本地计算,并分析为何要采用本地计算。

答: MapReduce设计的一个理念就是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为移动数据需要大量的网络传输开销,尤其是在大规模数据环境下,这种开销尤为惊人,所以,移动计算要比移动数据更加经济。 本地计算:在一个集群中,只要有可能,MapReduce框架就会将Map程序就近地在HDFS数据所在的节点运行,即将计算节点和存储节点放在一起运行,从而减少了节点间的数据移动开销。

  1. 试说明一个MapReduce程序在运行期间所启动的Map任务数量和Reduce任务数量各是什么因素决定的。

答:Map任务数量和Reduce任务数量都是由输入数据的大小和Hadoop集群中可用的计算资源数量决定的。输入数据的大小决定了需要启动多少个Map任务,而可用的计算资源数量则限制了可以同时运行的Map和Reduce任务的数量。

  1. 是否所有的MapReduce程序都需要经过Map和 Reduce这两个过程?如果不是,请举例说明。

答:不是。对于关系的选择运算,只需要Map过程就能实现,对于关系R 中的每个元组t,检测是否是满足条件的所需元组,如果满足条件,则输出键值对<,>,也就是说,键和值都是t。这时的Reduce函数就只是一个恒等式,对输入不做任何变换就直接输出。

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

答:答: 对于每个分区内的所有键值对,后台线程会根据key 对它们进行内存排序(Sort ),排序是MapReduce 的默认操作。排序结束后,还包含一个可选的合并(Combine )操作。如果用户事先没有定义Combiner 函数,就不用进行合并操作。如果用户事先定义了Combiner 函数,则这个时候会执行合并操作,从而减少需要溢写到磁盘的数据量。 所谓“合并”,是指将那些具有相同key 的<key,value>的value 加起来,比如,有两个键值对<*xmu",1>和<*xmu",1>,经过合并操作以后就可以得到一个键值对<*xmu",2>,减少了键值对的数量。 不过,并非所有场合都可以使用Combiner,因为,Combiner的输出是Reduce任务的输人,Combiner绝不能改变Reduce任务最终的计算结果,一般而言,累加、最大值等场景可以使用合并操作。

  1. MapReduce程序的输入文件、输出文件都存储在HDFS中,而在Map任务完成时得到的中间结果存储在本地磁盘中。试分析中间结果存储在本地磁盘而不是HDFS上有何优缺点。

答: 优点:1. 在客户端及Map任务节点上系统的内存资源比HDFS上的内存资源更多,可以有效降低重写中间结果所耗费的时间。 2. 使得Map任务的数据访问更快,降低了网络IO的开销。

缺点: 1. 由于中间结果存储在本地磁盘上,运算结果与HDFS上的文件分布在了不同的节点上,造成了系统的数据不完整性。 2. 中间结果存储在本地磁盘上带来的数据安全性和可靠性问题,存在数据丢失的风险。

  1. 早期的HDFS,其默认块(Block)大小为64 MB,而较新的版本默认为128 MB,采用大的块具有什么影响和优缺点。

答:优点: 减少了HDFS中存储块的数量,从而减少了HDFS元数据的开销,提高了整体的读写性能。 由于较大的块可以允许更大的数据流传输,因此可以减少网络带宽的使用,从而提高了数据传输的速度。 减少了数据切割的次数,从而减少了数据切割的开销,提高了数据处理的效率。 缺点: 如果一个块只包含一个小文件,那么在读取该文件时需要读取整个块,这会浪费存储空间和网络带宽。 如果一个块中包含的数据不够均匀,可能会导致数据倾斜和资源利用不充分的问题。 如果一个任务只需要读取一个块中的一小部分数据,那么需要读取整个块,这会增加数据传输的开销和读取的延迟。

猜你喜欢

转载自blog.csdn.net/qq_50530107/article/details/131260885