互联网

用 Hadoop 进行分布式数据处理(入门)

确认工作已经放在 HDFS 中之后,就可以执行 MapReduce 函数了。这个函数只需要一个命令,但是需要很长的请求,见清单 6。这个命令请求执行一个 JAR。它实际上实现许多功能,但是这个示例只使用 wordcount。jobtracker 守护进程请求 datanode 执行 MapReduce 作业,这会产生相当多的输出(这里的输出比较少是因为只处理两个文件)。它显示 map 和 reduce 函数的进度,然后提供与文件系统的 I/O 和记录处理相关的统计数据。

清单 6. 执行计算单词频率的 MapReduce 作业

# hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-

0.20.2+228-examples.jar

wordcount input output

10/04/29 17:36:49 INFO input.FileInputFormat: Total input paths to process : 2

10/04/29 17:36:49 INFO mapred.JobClient: Running job: job_201004291628_0009

10/04/29 17:36:50 INFO mapred.JobClient: map 0% reduce 0%

10/04/29 17:37:00 INFO mapred.JobClient: map 100% reduce 0%

10/04/29 17:37:06 INFO mapred.JobClient: map 100% reduce 100%

10/04/29 17:37:08 INFO mapred.JobClient: Job complete: job_201004291628_0009

10/04/29 17:37:08 INFO mapred.JobClient: Counters: 17

10/04/29 17:37:08 INFO mapred.JobClient: Job Counters

10/04/29 17:37:08 INFO mapred.JobClient: Launched reduce tasks=1

10/04/29 17:37:08 INFO mapred.JobClient: Launched map tasks=2

10/04/29 17:37:08 INFO mapred.JobClient: Data-local map tasks=2

10/04/29 17:37:08 INFO mapred.JobClient: FileSystemCounters

10/04/29 17:37:08 INFO mapred.JobClient: FILE_BYTES_READ=47556

10/04/29 17:37:08 INFO mapred.JobClient: HDFS_BYTES_READ=111598

10/04/29 17:37:08 INFO mapred.JobClient: FILE_BYTES_WRITTEN=95182

10/04/29 17:37:08 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=30949

10/04/29 17:37:08 INFO mapred.JobClient: Map-Reduce Framework

10/04/29 17:37:08 INFO mapred.JobClient: Reduce input groups=2974

10/04/29 17:37:08 INFO mapred.JobClient: Combine output records=3381

10/04/29 17:37:08 INFO mapred.JobClient: Map input records=2937

10/04/29 17:37:08 INFO mapred.JobClient: Reduce shuffle bytes=47562

10/04/29 17:37:08 INFO mapred.JobClient: Reduce output records=2974

10/04/29 17:37:08 INFO mapred.JobClient: Spilled Records=6762

10/04/29 17:37:08 INFO mapred.JobClient: Map output bytes=168718

10/04/29 17:37:08 INFO mapred.JobClient: Combine input records=17457

10/04/29 17:37:08 INFO mapred.JobClient: Map output records=17457

10/04/29 17:37:08 INFO mapred.JobClient: Reduce input records=3381

处理结束之后,检查结果。这个作业的作用是计算单词在输入文件中出现的次数。输出是一个包含元组的文件,元组表示单词和它在输入中出现的次数。找到输出文件之后,可以通过 hadoop-0.20 实用程序使用 cat 命令查看数据(见清单 7)。

清单 7. 检查 MapReduce wordcount 操作的输出

# hadoop-0.20 fs -ls /user/root/output

Found 2 items

drwxr-xr-x - root supergroup 0 2010-04-29 17:36 /user/root/output/_logs

-rw-r--r-- 1 root supergroup 30949 2010-04-29 17:37 /user/root/output/part-r-00000

#

# hadoop-0.20 fs -cat output/part-r-00000 | head -13

!= 1

"Atomic 2

"Cache 2

"Control 1

"Examples 1

"Has 7

"Inter-CPU 1

"LOAD 1

"LOCK" 1

"Locking 1

"Locks 1

"MMIO 1

"Pending 5

#

还可以使用 hadoop-0.20 实用程序从 HDFS 中提取文件(见清单 8)。只需使用 get 实用程序(它与前面在 HDFS 中写文件所用的 put 相似)。对于 get 操作,指定 HDFS 中要提取的文件(来自 output 子目录)和在本地文件系统中要写的文件 (output.txt)。

清单 8. 从 HDFS 提取输出

# hadoop-0.20 fs -get output/part-r-00000

output.txt

# cat output.txt | head -5

!= 1

"Atomic 2

"Cache 2

"Control 1

"Examples 1

#

[!--page.stats—]
希望看到您的想法,请您发表评论x