环境演示

跨象乘云工程系统实践平台 – 在线演示

1. 登录步骤

–> 选择入口:右上角选择【演示】
–> 选择页面下方:教师登录
–> 输入账号/密码:teacher/teacher
–> 点击:登录
–> 选择:我的课程 | 大数据基础 | 实验alpha | 实验概览
–> 选择:MapReduce编程及运行监听(图片)
–> 测试环境启动:实验操作栏在右侧窗口,左侧栏为实验指导。

2. 使用 MapReduce 执行 WordCount 统计运算体验

Hadoop MapReduce 是一个软件框架,用于轻松编写应用程序,以高可用、容错的方式在大型群集(数千个节点)的大型商业硬件上并行处理大量数据(多 TB 数据集);而 WordCount 则是用于演示 MapReduce 工作原理的经典实验,通过一个简单的应用程序:WordCount,使用 MapReduce 统计给定输入的文本集中每个单词的出现次数。在操作 WordCount 实验之前,需要确保程序文件(备用链接)已经被安装到系统环境当中 —— 打开终端窗口,确认主目录(/home/oracle/exercises/)下包含了 WordCount 目录。进入目录,查看 WordCount.java 代码:

gedit WordCount.java

注意:WordCount.java 程序中 14 行实现了 Mapper 接口,28 行实现了Reducer 接口;查看完毕后,可关闭 gedit

3. 创建工作目录

在本地文件系统(/home/oracle/exercises/wordCount/)下创建一个新目录:wordcount_classes

mkdir wordcount_classes

输入下面的命令编译 WordCount.java 程序并且设置正确的 classpath 及输出目录。其中,-d 参数用于指定编译结果的 class 文件的存放目录:

javac -cp /usr/lib/hadoop/*:/usr/lib/hadoop/client-0.20/* -d wordcount_classes WordCount.java

检查执行结果:

ls ./wordcount_classes/ -l

–> total 12
–> -rw-r--r--. 1 oracle oinstall 1595 Feb 13 06:08 WordCount.class
–> -rw-r--r--. 1 oracle oinstall 1722 Feb 13 06:08 WordCount$MyMapper.class
–> -rw-r--r--. 1 oracle oinstall 1633 Feb 13 06:08 WordCount$MyReducer.class

为编译的 WordCount 目录创建一个 jar 文件,需要将该 jar 文件发送到集群上的其他节点上,并且同时运行。输入并执行下面的命令:

jar -cvf WordCount.jar -C wordcount_classes/ .

–> added manifest
–> adding: WordCount$MyMapper.class(in = 1722) (out= 753)(deflated 56%)
–> adding: WordCount.class(in = 1595) (out= 849)(deflated 46%)
–> adding: WordCount$MyReducer.class(in = 1633) (out= 687)(deflated 57%)

查看 WordCount.java 程序处理的两个文件的内容:

cat file01 file02

–> very disappointed and very expensive
–> expensive and unreliable insurance
–> worthless insurance and expensive
–> worst customer service

在 HDFS 上创建 /user/oracle/wordcount/user/oracle/wordcount/input 目录:

hadoop fs -mkdir /user/oracle/wordcount


hadoop fs -mkdir /user/oracle/wordcount/input

检查执行结果:

hadoop fs -ls /user/oracle/wordcount/

–> Found 1 items
–> drwxr-xr-x   - oracle oracle          0 2018-02-13 06:23 /user/oracle/wordcount/input

使用 Hadoop 的 copyFromLocal 命令,把 file01file02 文件从本地文件系统复制到 HDFS 的 /user/oracle/wordcount/input 目录中:

hadoop fs -copyFromLocal file01 /user/oracle/wordcount/input/file01


hadoop fs -copyFromLocal file02 /user/oracle/wordcount/input/file02

记住,文件在 HDFS 中被切分为多个数据块存储在 Hadoop 集群的不同的节点进行并行处理,确认上面的两个文件成功的复制到对应目录:

hadoop fs -ls /user/oracle/wordcount/input

–> Found 2 items
–> -rw-r--r--   1 oracle oracle        518 2018-02-13 06:39 /user/oracle/wordcount/input/file01
–> -rw-r--r--   1 oracle oracle        154 2018-02-13 06:39 /user/oracle/wordcount/input/file02

4. 执行 WordCount

运行 MapReduce 任务,执行 WordCount:

hadoop jar WordCount.jar WordCount /user/oracle/wordcount/input /user/oracle/wordcount/output

上面的命令,要求 Hadoop 将统计结果存放在 /user/oracle/wordcount/output 目录下。同时,Hadoop 集群提供的运行信息显示在屏幕上,帮助你跟踪任务的执行状态。另外,你也可以使用提供的 URL 跟踪任务

–> 18/02/13 06:54:53 INFO mapreduce.Job: The url to track the job: http://bigdatalite.localdomain:8088/proxy/application_1516873213790_0001/
–> 18/02/13 06:54:53 INFO mapreduce.Job: Running job: job_1516873213790_0001
–> 18/02/13 06:55:32 INFO mapreduce.Job: Job job_1516873213790_0001 running in uber mode : false
–> 18/02/13 06:55:32 INFO mapreduce.Job:  map 0% reduce 0%
–> 18/02/13 06:55:46 INFO mapreduce.Job:  map 100% reduce 0%
–> 18/02/13 06:55:55 INFO mapreduce.Job:  map 100% reduce 100%
–> 18/02/13 06:55:56 INFO mapreduce.Job: Job job_1516873213790_0001 completed successfully

5. 检查 WordCount 结果

显示 /user/oracle/wordcount/output 目录的内容:

hadoop fs -ls /user/oracle/wordcount/output

–> Found 2 items
–> -rw-r--r--   1 oracle oracle          0 2018-02-13 06:55 /user/oracle/wordcount/output/_SUCCESS
–> -rw-r--r--   1 oracle oracle        282 2018-02-13 06:55 /user/oracle/wordcount/output/part-r-00000

使用 Hadoop 的 cat 命令显示 part-r-00000 结果文件的内容,获得 MapReduce 的 WordCount 统计结果:

hadoop fs -cat /user/oracle/wordcount/output/part-r-00000

–> I   4
–> and 7
–> awful   1
–> bank    1
–> best    2
–> company 2

本实验结束。