Hadoop:运行首个MapReduce任务

来自CloudWiki
Cloud17讨论 | 贡献2020年6月27日 (六) 06:57的版本 提交 MapReduce 任务给集群运行
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

实训目标

(1) 掌握以 hadoop jar 方式提交 MapReduce 任务。

实训环境

(1) 使用 CentOS 6.10 的 Linux 操作系统搭建的 3 个节点的 Hadoop 集群。

(2) 使用 1.8 的 JDK 。

(3) 使用 2.6.4 版本的 Hadoop 。

实训内容

(1) 在 HDFS 上有日志文件 /user/root/email_log.txt ,如 图 3 ‑1 所示,其中每行记录是一个用户名,每一行记录表示用户登录了网站一次,要求统计每个用户登录的次数。

文件:Bd20-7-10.png

图 3 ‑ 1 email_log.txt

(2) 提交 MapReduce 任务给集群运行。

实训步骤

前置步骤

提交 MapReduce 任务给集群运行

提交 MapReduce 任务,通常使用 hadoop jar 命令。它的基本用法格式如 表 4 ‑1 所示。

表 4 ‑ 1 hadoop jar 语法格式

hadoop jar <jar> [mainClass] args

因为 hadoop jar 命令 的附带参数较多,下面结合实际任务,对它的各项参数进行说明。示例如 代码 4‑2 所示,其中,每个参数需要空格分开,反斜杠 \ 为换行作用。

代码 4 ‑ 2 使用 hadoop jar 命令提交 MapReduce 任务 命令

hadoop jar \

$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar \

wordcount \

/user/root/email_log.txt \

/user/root/output

参考 代码 4‑2 中的内容,针对 hadoop jar 命令的常用参数做以下解释说明。

( 1 ) $HADOOP_HOME :指主机中设置的环境变量(参考 /etc/profile 内容)。此处的 $HADOOP_HOME 就是本地目录 /usr/local/hadoop-2.6.4 。

( 2 ) hadoop-mapreduce-examples-2.6.5.jar : Hadoop 官方提供的示例程序包,其中包括词频统计模块( wordcount )。

( 3 ) wordcount :程序包中的主类名称。

( 4 ) /user/root/email_log.txt : HDFS 上的输入文件名称。

( 5 ) /user/root/output : HDFS 上的输出文件目录。

在理解了 hadoop jar 命令的各项参数后,执行统计用户登录次数的任务,这里是通过统计数据中用户名出现的次数来统计用户的登录次数,如 代码 4‑3 所示。

代码 4 ‑ 3 执行统计登录次数程序的命令

[root@master data]# hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /user/root/email_log.txt /user/root/output

20/06/27 08:41:15 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
20/06/27 08:41:16 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.128.130:8032
20/06/27 08:41:17 INFO input.FileInputFormat: Total input paths to process : 1
20/06/27 08:41:17 INFO mapreduce.JobSubmitter: number of splits:2
20/06/27 08:41:18 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1593205940394_0001
20/06/27 08:41:18 INFO impl.YarnClientImpl: Submitted application application_1593205940394_0001
20/06/27 08:41:19 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1593205940394_0001/
20/06/27 08:41:19 INFO mapreduce.Job: Running job: job_1593205940394_0001
20/06/27 08:41:29 INFO mapreduce.Job: Job job_1593205940394_0001 running in uber mode : false
20/06/27 08:41:29 INFO mapreduce.Job:  map 0% reduce 0%
20/06/27 08:41:45 INFO mapreduce.Job:  map 38% reduce 0%
20/06/27 08:41:48 INFO mapreduce.Job:  map 46% reduce 0%
20/06/27 08:41:51 INFO mapreduce.Job:  map 61% reduce 0%
20/06/27 08:41:54 INFO mapreduce.Job:  map 70% reduce 0%
20/06/27 08:41:55 INFO mapreduce.Job:  map 78% reduce 0%
20/06/27 08:41:57 INFO mapreduce.Job:  map 83% reduce 0%
20/06/27 08:41:59 INFO mapreduce.Job:  map 100% reduce 0%
20/06/27 08:42:06 INFO mapreduce.Job:  map 100% reduce 84%
20/06/27 08:42:09 INFO mapreduce.Job:  map 100% reduce 100%
20/06/27 08:42:09 INFO mapreduce.Job: Job job_1593205940394_0001 completed successfully
20/06/27 08:42:09 INFO mapreduce.Job: Counters: 49
        File System Counters
                FILE: Number of bytes read=416431063
                FILE: Number of bytes written=584943367
                FILE: Number of read operations=0
                FILE: Number of large read operations=0
                FILE: Number of write operations=0
                HDFS: Number of bytes read=226383985
                HDFS: Number of bytes written=114167885
                HDFS: Number of read operations=9
                HDFS: Number of large read operations=0
                HDFS: Number of write operations=2
        Job Counters
                Launched map tasks=2
                Launched reduce tasks=1
                Data-local map tasks=2
                Total time spent by all maps in occupied slots (ms)=203092
                Total time spent by all reduces in occupied slots (ms)=47524
                Total time spent by all map tasks (ms)=50773
                Total time spent by all reduce tasks (ms)=11881
                Total vcore-milliseconds taken by all map tasks=50773
                Total vcore-milliseconds taken by all reduce tasks=11881
                Total megabyte-milliseconds taken by all map tasks=103983104
                Total megabyte-milliseconds taken by all reduce tasks=24332288
        Map-Reduce Framework
                Map input records=8000000
                Map output records=8000000
                Map output bytes=250379675
                Map output materialized bytes=168189616
                Input split bytes=214
                Combine input records=12301355
                Combine output records=9352725
                Reduce input groups=3896706
                Reduce shuffle bytes=168189616
                Reduce input records=5051370
                Reduce output records=3896706
                Spilled Records=17558337
                Shuffled Maps =2
                Failed Shuffles=0
                Merged Map outputs=2
                GC time elapsed (ms)=1394
                CPU time spent (ms)=41520
                Physical memory (bytes) snapshot=515846144
                Virtual memory (bytes) snapshot=6172655616
                Total committed heap usage (bytes)=272535552
        Shuffle Errors
                BAD_ID=0
                CONNECTION=0
                IO_ERROR=0
                WRONG_LENGTH=0
                WRONG_MAP=0
                WRONG_REDUCE=0
        File Input Format Counters
                Bytes Read=226383771
        File Output Format Counters
                Bytes Written=114167885]]


代码 4‑3 显示了 hadoop jar 执行 MapReduce 任务时的日志输出,其中的一些关键信息有助于检查执行的过程与状态。

任务执行完成后,在输出目录 /user/root/output/ 中有两个新文件生成:一个是 _SUCCESS ,这是一个标识文件,表示这个任务执行完成:另一个是 part-r-00000 ,即任务执行完成后产生的结果文件。显示出 part-r-00000 的内容,如 图 4‑1 所示。

Bd20-7-11.png

图 4 ‑ 1 统计用户登录次数的结果

Bd20-7-12.png

图 4‑1 中有两列数据,第 1 列是用户名 ,第 2 列就是该用户的登录次数。