您的位置:首页 > 其它

WordCount,第一个MapReduce程序

2013-10-18 17:15 555 查看
本文假设你已经安装并配置好了Hadoop。什么?如果你还不会的话,请看看这一篇文章《在Ubuntu Linux上安装Apache Hadoop》。我们将在Hadoop上运行我们的第一个MapReduce程序WordCount。该程序从txt文件中读取若干篇文章,计算每个单词出现的次数,最终以txt文件的形式输出计算结果。在计算结果中,我们可以看到每一行的开头是一个出现在文章中的单词,以及该单词在所有文章中出现的次数。如果你现在不知道什么是MapReduce,那也没有关系。本文的目的是通过运行WordCount,作为一个示例,演示如何运行MapReduce程序。至于什么是MapReduce,MapReduce的机制,如何编写MapReduce程序,将在以后讨论。

0.准备

我从Project Gutenberg上找了3本英文电子书,用作WordCount的输入,请选择Plain Text UTF-8格式下载:

The Outline of Science, Vol. 1 (of 4) by J. Arthur Thomson

The Notebooks of Leonardo Da Vinci

Ulysses by James Joyce

我将三本电子书存储在/tmp/gutenberg中,让我们通过ls命令来看一下:



如果你的Hadoop还没有进行格式化,或者没有启动,现在请格式化后启动。

/usr/local/hadoop/hadoop-1.2.1/bin/hadoop namenode -format
/usr/local/hadoop/hadoop-1.2.1/bin/start-all.sh

在我们运行MapReduce程序之前,我们首先需要将位于本地文件系统上的三本电子书复制到HDFS上。

cd /usr/local/hadoop/hadoop-1.2.1/
bin/hadoop dfs -copyFromLocal /tmp/gutenberg /user/hduser/gutenberg
bin/hadoop dfs -ls /user/hduser
bin/hadoop dfs -ls /user/hduser/gutenberg

上述命令的输出结果如下图所示:



1.启动MapReduce程序

完成上面的步骤之后,现在让我们运行WordCount。

cd /usr/local/hadoop/hadoop-1.2.1
bin/hadoop jar hadoop-examples-1.2.1.jar wordcount /user/hduser/gutenberg /user/hduser/gutenberg-output

这条命令将从HDFS中读取/user/hduser/gutenberg目录下的文件进行计算处理,并将结果存储到HDFS中的/user/hduser/gutenberg-output目录。

如果一切顺利,你将看到下图所示的结果:



现在,我们去HDFS中看看输出结果:

cd /usr/local/hadoop/hadoop-1.2.1
/bin/hadoop dfs -ls /user/hduser

/user/hduser目录中有:



该目录中存放了我们的输入文件夹,文件夹中有3本电子书,和一个输出文件夹,用来存放计算结果。

/user/hduser/gutenberg-output目录中有:



该目录中存放了3个文件,计算结果在part-r-00000文件中。

如果你想修改Reduce的tasks,比如讲Reduce的tasks修改为16,可以输入以下命令:

cd /usr/local/hadoop/hadoop-1.2.1
bin/hadoop jar hadoop-examples-1.2.1.jar wordcount -D mapred.reduce.tasks=16 /user/hduser/gutenberg /user/hduser/gutenberg-output


2.从HDFS中取得你的计算结果

到目前为止,所有的输出结果只是在HDFS上,没有取回本地。但由于我们采用伪分布模式,所有在HDFS上的文件其实都在一台机器上。通过输入以下命令,可以直接在HDFS上读取计算结果:

cd /usr/local/hadoop/hadoop-1.2.1
bin/hadoop dfs -cat /user/hduser/gutenberg-output/part-r-00000

当然,你也可以选择从HDFS复制计算结果到本地:
cd /usr/local/hadoop/hadoop-1.2.1
mkdir /tmp/gutenberg-output
bin/hadoop dfs -getmerge /user/hduser/gutenberg-output /tmp/gutenberg-output
head /tmp/gutenberg-output/gutenberg-output

你可以看到下图所示的输出结果:



可以看到part-r-00000的前10行内容,第一列是3篇电子书中出现的单词,第二列是该单词出现的次数。这正是我们想要看到的结果。

3.Hadoop的网页接口

你在conf/hadoop-default.xml中可以看到Hadoop提供的网页接口:

NameNode http://localhost:50070/

JobTracker http://localhost:50030/

TaskTracker http://localhost:50060/


4.参考资料

Running Hadoop on Ubuntu Linux (Single-Node Cluster),Michael G. Noll,http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: