MapReduce计算的数据准备
对 hdfs 具体操作细节请参考另一篇博文
在桌面新建一个 testinput.txt 文本
touch /home/hadoop/桌面/testinput.txt
![](https://i-blog.csdnimg.cn/blog_migrate/ff42d58d5bcc7c7853de226e796a9f55.png)
启动 hadoop:
cd /usr/local/hadoop
./sbin/start-dfs.sh
jps
创建 hdfs 虚拟文件 input1 和 input2:
cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /user/hadoop/input1
./bin/hdfs dfs -mkdir -p /user/hadoop/input2
./bin/hdfs dfs -ls # 查看hdfs下的文件目录
将桌面文件 testinput.txt 文件上传至 hdfs 的 input1 文件夹中:
./bin/hdfs dfs -put /home/hadoop/桌面/testinput.txt input1
![](https://i-blog.csdnimg.cn/blog_migrate/da8bad0a5df1aff4d23ce159c46ca0c2.png)
将 etc/hadoop 下的所有 xml 文件上传至 HDFS 的 input2 文件夹中:
./bin/hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input2
![](https://i-blog.csdnimg.cn/blog_migrate/054c3c5784201014f6310a1e3a811028.png)
基于MapReduce的圆周率计算
进入 share/hadoop/mapreduce 文件夹,找到 hadoop-mapreduce-examples-3.2.0.jar :
cd /usr/local/hadoop/share/hadoop/mapreduce
![](https://i-blog.csdnimg.cn/blog_migrate/79fb64f2f97d48ce94d34ce86766e44d.png)
使用 Hadoop 自带例子 pi 计算圆周率:
cd /usr/local/hadoop
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar pi 50 50 # 注意修改为自己的版本号
![](https://i-blog.csdnimg.cn/blog_migrate/8e5a4b0081b6d9e73c9fddfeeb630775.png)
50是运行50次map任务
100是每个map任务投掷次数,所以总投掷次数是50×100=5000
![](https://i-blog.csdnimg.cn/blog_migrate/ad8fc03ea89aef7fa8407062e2de76dd.png)
MapReduce 的 Wordcount 计算
创建 hdfs 虚拟文件 output1(其实本步可以省略):
cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /user/hadoop/output1
使用 MapReduce 的 wordcount 统计 input1 目录中的文本英文单词数:
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /user/hadoop/input1 /user/hadoop/output1/wordcount # 主要修改为自己的版本号
![](https://i-blog.csdnimg.cn/blog_migrate/f8a6e88888809e3f2285683e101f6d3b.png)
查看 output1/wordcount 目录下的文件:
./bin/hdfs dfs -ls output1/wordcount
![](https://i-blog.csdnimg.cn/blog_migrate/b81b45663b9be327699c5ddca0e6925e.png)
查看统计结果:
./bin/hdfs dfs -cat output1/wordcount/part-r-00000
![](https://i-blog.csdnimg.cn/blog_migrate/e72909d6f7fd103eff3de7265cb9dc07.png)
该实验遇到的报错:
![](https://i-blog.csdnimg.cn/blog_migrate/9f3f7e3ea3cb09be2db9c27eecf8c444.png)
/input1 路径不存在,这个摸鱼怪忘加 /user/hadoop/ ,在这里犯二了;该路径应是建立文件时的完整路径😂😂
![](https://i-blog.csdnimg.cn/blog_migrate/493202adf87dbe81e47a5d7dc4d85c9c.png)
/user/hadoop/output1 文件已经存在,wordcount 程序会根据输出数据路径新建文件(所以这也是上面提到可以省略建立虚拟文件 output1),重新指定路径为:/user/hadoop/output1/wordcount
MapReduce的正则表达式计算
创建 hdfs 虚拟文件 output2(同样此步也可以省略):
cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /user/hadoop/output2
使用 MapReduce 的 grep 程序统计 input2 目录中的 XML 文本中满足’dfs[a-z.]+ ’匹配规则的字符:
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep /user/hadoop/input2 /user/hadoop/output2/count 'dfs[a-z.]+' # 主要修改为自己的版本号
![](https://i-blog.csdnimg.cn/blog_migrate/433e2f1ad59952c9c8a08c59c655731d.png)
查看统计结果:
./bin/hdfs dfs -cat output2/count/part-r-00000
![](https://i-blog.csdnimg.cn/blog_migrate/afb2260d1a989d89ca9c08be208ac551.png)
至此,实验内容已经完成了,主要用到了 MapReduce 自带的 pi、wordcount、grep例子
如果还有什么不足,还希望大佬指正!!!
参考文章: