构建一个Mapreduce作业

时间:2021-02-04 18:19:36

一、下载数据

这些数据即将作为mapreduce作业的输入

$ wget http://www.gutenberg.org/cache/epub/4300/pg4300.txt
$ wget http://www.gutenberg.org/files/5000/5000-8.txt
$ wget http://www.gutenberg.org/cache/epub/20417/pg20417.txt

并将下载到的三个.txt文件全放在本地的一个gutenberg文件夹下,假设放在/usr/local/hadoop/tmp/gutenberg下

构建一个Mapreduce作业

二、启动hadoop集群

如果之前已经停止了hadoop,那么此时需要重新启动

/usr/local/hadoop/$ start-all.sh

三、将本地数据复制到HDFS

在我们运行mapreduce作业之前,需要先把输入数据复制到hadoop的文件系统HDFS

1.在hdfs中创建目录/user/hduser,-p代表创建路径中的各级父目录

/usr/local/hadoop$ hdfs dfs -mkdir -p /user/hduser/

2.将本地的gutenberg文件夹下的所有内容复制到HDFS中

/usr/local/hadoop$ bin/hadoop dfs -copyFromLocal ./tmp/gutenberg /user/hduser/

可以看到/user/hduser/下多了一个文件夹gutenberg

/usr/local/hadoop$ bin/hadoop fs -ls /user/hduser

构建一个Mapreduce作业

查看hdfs中/user/hduser/gutenberg文件夹中是否有三个txt文件

/usr/local/hadoop$ bin/hadoop fs -ls /user/hduser/gutenberg

构建一个Mapreduce作业

说明数据已经成功复制到hdfs中了。

四、运行mapreduce作业

以wordcount为例,下面为运行命令

/usr/local/hadoop$ bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount /user/hduser/gutenberg /user/hduser/gutenberg-output

注意!!!

share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar——对于不同hadoop版本,路径以及名称都可能不一样哦

/user/hduser/gutenberg ——输入数据所在文件夹

/user/hduser/gutenberg-output——输出结果所在文件夹

运行后可以看到这样的过程:

构建一个Mapreduce作业

构建一个Mapreduce作业

构建一个Mapreduce作业

构建一个Mapreduce作业

五、查看输出数据所在文件夹

/usr/local/hadoop$ bin/hadoop dfs -ls /user/hduser

构建一个Mapreduce作业

/usr/local/hadoop$ bin/hadoop dfs -ls /user/hduser/gutenberg-output

构建一个Mapreduce作业

六、采用-D选项,修改reducer个数

再次运行时一定要新建一个存放输出数据的文件夹或者将原来的删掉!!!我新建的是gutenberg-output1

/usr/local/hadoop$ bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount -D mapred.reduce.tasks=16 /user/hduser/gutenberg /user/hduser/gutenberg-output1

#查看输出结果,位于part-r-00000文件中

/usr/local/hadoop$ bin/hadoop dfs -cat /user/hduser/gutenberg-output1/part-r-00000

七、将HDFS中的数据文件下载到本地

运行完mapreduce作业之后,如果你想把输出结果下载到本地,则可以使用下面这一命令:

hadoop fs -get <hdfs_src> <localdst>

#以下载gutenberg-output1文件夹中的part-r-00000文件为例,到本地时可以使用原来的文件名

/usr/local/hadoop$ sudo bin/hadoop fs -get /user/hduser/gutenberg-output1/part-r-00000 /home/

可以看到/home/文件夹下有了一个part-r-00000文件:

构建一个Mapreduce作业

#也可以在下载到本地时自定义文件名,比如自定义为hdfile:

/usr/local/hadoop$ sudo bin/hadoop fs -get /user/hduser/gutenberg-output1/part-r-00000 /home/hdfile

如果需要将gutenberg-output1文件夹中的所有文件合并连接成本地目标文件,且文件名也为gutenberg-output1,则使用hadoop fs -getmerge命令

/usr/local/hadoop$ sudo bin/hadoop fs -getmerge /user/hduser/gutenberg-output1 /home/gutenberg-output1

可以看到home/下多了一个文件gutenberg-output1

构建一个Mapreduce作业