实验名称 | MapReduce编程 | ||
实验性质 (必修、选修) | 必修 | 实验类型(验证、设计、创新、综合) | 综合 |
实验课时 | 2 | 实验日期 | 2023.10.30-2023.11.03 |
实验仪器设备以及实验软硬件要求 | 专业实验室(配有centos7.5系统的linux虚拟机三台) | ||
实验目的 | 1. 理解MapReduce编程思想。 2. 理解MapReduce作业执行流程。 3. 理解MR-App编写步骤,掌握使用MapReduce Java API进行MapReduce基本编程,熟练掌握如何在Hadoop集群上运行MR-App并查看运行结果。 5. 掌握MapReduce Shell常用命令的使用。 | ||
实验内容(实验原理、运用的理论知识、算法、程序、步骤和方法) 实验原理概述 一、MapReduce编程思想 MapReduce是Hadoop生态中的一款分布式计算框架,它采用“分而治之”的核心思想,将大型任务拆分为若干子任务,由独立节点处理后再汇总结果。这使得开发人员能够专注于业务逻辑,而不必深入了解分布式计算细节。 早期的MapReduce(MapReduce 1.0)采用Master/Slave结构,但存在单点故障等问题。后来,MapReduce进行了升级,采用ResourceManager、ApplicationMaster和NodeManager等进程构建MapReduce 2.0体系架构。 二、MapReduce作业执行流程 MapReduce作业执行流程包括InputFormat、Map、Shuffle、Reduce、OutputFormat五个阶段。在InputFormat阶段,数据预处理并切分为逻辑上的InputSplit;Map阶段按用户定义的映射规则输出<key, value>中间结果;Shuffle阶段对Map输出进行排序、分区、合并等操作;Reduce阶段接收<key, List(value)>中间结果,执行用户定义逻辑,输出<key, value>结果;OutputFormat阶段将Reduce结果输出到分布式文件系统。 三、MapReduce Web UI MapReduce Web UI提供管理员接口,用于查看已完成的MR-App执行过程的统计信息。地址为http://JobHistoryServerIP:19888,可查看MapReduce的历史运行情况。 四、MapReduce Shell MapReduce Shell提供用户和管理员命令,例如archive、classpath、distcp、job、pipes等。管理员命令包括historyserver和hsadmin。Shell命令的详细说明可参考[官方文档] 五、MapReduce Java API MapReduce Java API面向Java开发工程师,用于编写MR-App。编写步骤包括确定<key, value>对、定制输入格式、编写Mapper和Reducer类、定制输出格式。主要类有Job、Mapper、Reducer、InputFormat、OutputFormat等。详细说明可在[官方文档](https://hadoop.apache.org/docs/r2.9.2/api/index.html)查看。 实验步骤:
主节点: 从节点: 在Hadoop集群主节点上搭建MapReduce开发环境Eclipse。 2.查看Hadoop自带的MR-App单词计数源代码WordCount.java,在Eclipse项目MapReduceExample下建立新包com.csh.mapreduce,模仿内置的WordCount示例,自己编写一个WordCount程序,最后打包成JAR形式并在Hadoop集群上运行该MR-App,查看运行结果。 与运行hadoop-mapreduce-examples-2.9.2.jar中的wordcount程序一样,只需要执行以下命令,就能在Hadoop集群中成功运行自己编写的MapReduce程序了,命令如下所示。 hadoop jar /root/eclipse-workspace/MapReduceExampleWordCountDIY.jar com.csh.mapreduce.WordCountDriver /InputDataTest /OutputDataTest5 上述命令中,/InputDataTest表示输入目录,/OutputDataTest5表示输出目录。执行该命令前,假设HDFS的目录/InputDataTest下已存在待分析词频的3个文件,而输出目录 上述程序执行完毕后,会将结果输出到/OutputDataTest5目录中,可以使用命令“hdfs dfs -ls /OutputDataTest5”来查看。/OutputDataTest5目录下有2个文件,其中/OutputDataTest5/_SUCCESS表示Hadoop程序已执行成功,这个文件大小为0,文件名就告知了Hadoop程序的执行状态;第二个文件/OutputDataTest5/part-r-00000.bz2才是Hadoop程序的运行结果。由于输出结果进行了压缩,所以无法使用命令“hdfs dfs -cat /OutputDataTest4/part-r-00000.bz2”直接查看Hadoop程序的运行结果 4 分别在自编MapReduce程序WordCount运行过程中和运行结束后查看MapReduce Web界面。 5.分别在自编MapReduce程序WordCount运行过程中和运行结束后练习MapReduce Shell常用命令。 分别在自编MapReduce程序WordCount运行过程中和运行结束后练习MapReduce Shell常用命令。 例如,使用如下命令查看MapReduce作业的状态信息。 mapred job -status <job-id> 如图所示,当前MapReduce作业“job_1568702465801_0002”正处于运行(RUNNING)状态。 6. 关闭Hadoop集群。 | |||
实验结果与分析 通过实施“MapReduce编程”实验,我们得到了以下结论: 1. 理解MapReduce编程思想:通过实验,深入理解了MapReduce编程思想,即“分而治之”的核心思想。能够将大型任务划分为独立的子任务,分布式地处理数据,最后将结果汇总。 2. 掌握MapReduce作业执行流程:熟悉了MapReduce作业的执行流程,包括InputFormat、Map、Shuffle、Reduce、OutputFormat五个阶段。能够更好地理解MapReduce作业的内部运行机制。 3. 熟练使用MapReduce Java API进行编程:通过实践掌握了MR-App编写步骤,使用MapReduce Java API进行基本编程。能够确定<key, value>对,定制输入格式,编写Mapper和Reducer类,定制输出格式,最终在Hadoop集群上运行MR-App并查看运行结果。 4. 熟练使用MapReduce Web界面:实验熟悉了MapReduce Web UI的使用,能够在页面上查看已完成的MR-App执行过程中的统计信息。可以更好地监控和理解MapReduce作业的执行情况。 5. 熟练使用MapReduce Shell常用命令:练习了MapReduce Shell常用命令,包括查看作业状态等。提供了在命令行中与MapReduce交互的能力。 6. 成功运行自编MapReduce程序WordCount: 通过在Hadoop集群上运行自己编写的MapReduce程序WordCount,验证了他们对MapReduce编程的理解和应用。通过Hadoop命令成功运行了程序,观察了结果并对运行过程中的各个阶段进行了分析。 7. 分析MapReduce Web界面和MapReduce Shell输出:在实验中通过查看MapReduce Web界面和使用Shell命令,深入了解了MapReduce作业的运行状态和输出结果。更好地理解和调试MapReduce程序提供了实际经验。 |