在安装并配置好Hadoop环境之后,需要运行一个实例来验证配置是否正确,Hadoop就提供了一个简单的wordcount程序,其实就是统计单词个数的程序,这个程序可以算是Hadoop中的“Hello World”了。
MapReduce
原理
MapReduce其实就是采用分而治之的思想,将大规模的数据分成各个节点共同完成,然后再整合各个节点的结果,得到最终的结果。这些分节点处理数据都可以做到并行处理,大大缩减了工作的复杂度。
过程
MapReduce可以分成两个阶段,其实就是单词拆成map和reduce,这其实是两个函数。map函数会产生一个中间输出,然后reduce函数接受多个map函数产生的一系列中间输出然后再产生一个最终输出。
WordCount展示
前期工作
启动hadoop
cd /usr/hadoop/hadoop-2.6.2/
sbin/start-dfs.sh
sbin/start-yarn.sh
创建本地数据文件
cd ~/
mkdir ~/file
cd file
echo "Hello World" > test1.txt
echo "Hello Hadoop" > test2.txt
这样就创建了两个txt文件,里面分别有一个字符串:Hello World,Hello Hadoop。我们通过wordcount想要得到的结果是这样的:Hello 2,World 1,Hadoop 1。
在HDFS上创建输入文件夹
hadoop fs -mkdir /input
创建好我们可以通过
hadoop fs -ls /
来查看结果:
将数据文件传到input目录下
hadoop fs -put ~/file/test*.txt /input
同样,我们可以通过
hadoop fs -ls /input
来查看是否上传成功:
如果看不到任何结果,说明在hadoop的配置中存在问题,或者是防火墙没有关闭,导致节点连接不通。
运行程序
运行wordcount
hadoop jar /你的hadoop根目录/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar wordcount /input /output
运行这条命令后,Hadoop会启动一个JVM来运行MapReduce程序,而且会在集群上创建一个output文件夹,将结果存在其中。
我们来看看结果:
注意点:
这个目录一定要填对,要不然会报jar不存在。
输出文件夹一定要是空文件夹。
查看结果
output文件夹中现在有两个文件,我们需要的结果在part-r-00000
这个文件夹中。
hadoop fs -cat /output/part-r-00000
我们就可以看到最终的wordcount结果了: