任务目的
- 掌握启动 HDFS 集群和 YARN 集群的方式
- 进一步熟悉 HDFS 和 YARN 的 Web UI 界面
- 熟悉执行 MapReduce 程序的流程
任务清单
- 任务1:启动 Hadoop 集群
- 任务2:查看进程启动情况
- 任务3:WordCount 单词统计案例
- 任务4:PI 案例
详细任务步骤
任务1:启动 Hadoop 集群
在本平台上,虽然已经为大家搭建好了 Hadoop 伪分布式集群,但是并没有启动,所以在使用集群之前,需要依次启动 HDFS 集群和 YARN 集群,这里我们使用脚本一键启动的方式启动。命令如下所示:
(1)HDFS集群
在本机上使用如下方式一键启动HDFS集群:
start-dfs.sh
效果图如下所示:
图1
(2)YARN集群
在本机上使用如下方式一键启动YARN集群:
start-yarn.sh
效果图如下所示:
图2
任务2:查看进程启动情况
在本机上执行 jps
命令,在打印结果中会看到 6 个进程,分别是 NodeManager、SecondaryNameNode 、ResourceManager、Jps、DataNode 和 NameNode,如果出现了这 6 个进程表示进程启动成功。如下图所示:
图3
任务3:WordCount 单词统计案例
(1)首先,通过本机的浏览器访问 http://localhost:50070 或 http://本机IP地址:50070 打开 HDFS 的 Web UI 界面。其次,选择 Utilities——》Browse the file system 查看文件系统里的数据文件,可以看到新建的 HDFS 上没有任何数据文件,如下图所示:
图4
(2)在本机的/root目录下,新建一个名为 data 的文件夹,然后再执行 “vim word.txt” 指令新建一个 word.txt 文本文件,并编写一些单词内容,如下图所示:
图5
(3)接着,在 HDFS 上创建 /wordcount/input 目录,并将 word.txt 文件上传至该目录下,具体指令如下所示:
hadoop fs -mkdir -p /wordcount/input
hadoop fs -put /root/data/word.txt /wordcount/input
效果如下所示:
图6
上述指令是 Hadoop 提供的进行文件系统操作的 HDFS Shell 相关指令,此处不必深究具体使用,在下一章会进行详细说明。
执行完上述指令后,再次查看 HDFS 的 Web UI 界面,会发现 /wordcount/input 目录创建成功并上传了指定的 word.txt 文件,如下图所示:
图7
(4)进入$HADOOP_HOME/share/hadoop/mapreduce/ 目录下,使用ll
指令查看文件夹内容,如下图所示:
图8
从上图可以看出,在该文件夹下自带了很多 Hadoop 的 MapReduce 示例程序。其中,hadoop-mapreduce-examples-2.7.7.jar 包中包含了计算单词个数、计算PI值等功能的程序。
因此,这里可以直接使用 hadoop-mapreduce-examples-2.7.7.jar 示例包,对 HDFS 上的 word.txt 文件进行单词统计,在 jar 包位置执行如下命令:
hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /wordcount/input/word.txt /wordcount/output
上述指令中:
- hadoop jar hadoop-mapreduce-examples-2.7.7.jar :表示执行一个Hadoop的jar包程序;
- wordcount:表示执行jar包程序中的单词统计功能;
- /wordcount/input/word.txt:表示进行单词统计的HDFS文件路径;
- /wordcount/output:表示进行单词统计后的输出HDFS结果路径。
执行完上述指令后,示例包中的 MapReduce 程序开始执行,效果图如下所示:
图9
也可以通过YARN集群的Web UI界面查看运行状态,在本机的浏览器上访问 http://localhost:8088 或 http://本机IP地址:8088 。效果图如下所示:
图10
(5)在“单词统计”示例程序执行成功后,再次刷新并查看 HDFS 的 Web UI 界面,效果如下图所示:
图11
从上图可以看出,MapReduce 程序执行成功后,在 HDFS 上自动创建了指定的输出目录 /wordcount/output,并且输出了 _SUCCESS 和 part-r-00000 结果文件。其中, _SUCCESS 文件用于表示此次任务成功执行的标识,而 part-r-00000 表示单词统计的结果。
(6)接着,我们使用 HDFS Shell 的相关指令查看 part-r-00000 的内容,具体指令如下所示:
hadoop fs -cat /wordcount/output/part-r-00000
效果如下图所示:
图12
从上图可以看出,MapReduce 示例程序成功统计出了 /wordcount/input/word.txt 文本中的单词数量,并进行了结果输出。
任务4:PI 案例
进入 $HADOOP_HOME/share/hadoop/mapreduce/ 目录下,使用如下指令计算 PI 值:
hadoop jar hadoop-mapreduce-examples-2.7.7.jar pi 5 5
上述指令中:
- hadoop jar hadoop-mapreduce-examples-2.7.7.jar :表示执行一个Hadoop的jar包程序;
- pi:表示执行jar包程序中计算PI值的功能;
- 第1个5:表示运行10次map任务;
- 第2个5:表示每个map任务,投掷的次数。
执行完上述指令后,示例包中的 MapReduce 程序开始执行,效果图如下所示:
图13
执行结果如下所示:
图14
从上图可以看出,MapReduce 程序执行成功后,计算出了 PI 值。但是我们发现其计算结果与实际 PI 值有一定的偏差,若是想要计算更精切的 PI 值,我们可以将执行命令中的2个数值增大:
hadoop jar hadoop-mapreduce-examples-2.7.7.jar pi 100 10000
执行结果:
图15
从结果可以验证,给出的数值越大,计算的 PI 值越精确,当然程序运行时间也会越长。若是想要提前结束程序,可以使用 ctrl+c
终止当前程序。