本文假设你已经安装并配置好了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
我将三本电子书存储在/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/