根据前面介绍:
hdfs负责海量数据存储
而MapReduce负责海量数据计算
所以, 这篇博客 会用代码详细介绍MapReduce中典型的wordcount(单词计数)例子的过程.
新建一个java project, 这里我用maven构建.
项目构建
1 | 打开项目的pom.xml文件, 导入我们项目所需的依赖. |
程序分析
1 | * 比如有一段话: (需要进行分词操作) |
编写代码
首先编写Map的处理过程代码:
1 | 新建Mapper 继承 org.apache.hadoop.mapreduce.Mapper |
再编写 Reduce 过程代码:
1 | import org.apache.hadoop.io.LongWritable; |
最后编写主函数即入口函数:
1 | package mapreduce; |
最后一步, 打成jar包.
由于是用maven构建项目的, 打包方式有很多, 这里我介绍一种最简单的方式, 在pom.xml中使用maven插件的方式打包, 只要配置下, 指定下jar的运行的主类即可. 我的主类是 mapreduce.WordCountMain(在idea中直接右键copy PATH) 即可.
1 | <plugins> |
然后我是直接用的idea自带的maven projects生命周期中的packaeg点击直接打包, 当然 你也可以用命令行的方式 mvn package, 也可以先clean下,再package.
打包的结果 wc.jar
最后就是测试自己写的程序是否有问题.
直接在命令行中 hadoop jar wc.jar /input/data.txt /output (注意路径是hdfs上的文件路径, 不是本机上的)
这里的/input/data.txt /output 两个参数将作为wc.jar的主程序args[0], args[1] 传入.
就可以得到结果了, 使用 hdfs dfs -cat /output/part-r-00000 既可以查看各单词统计的结果
结束
到此, 一个mapreduce的wordcount程序就已经完成了, 相当于我们一开始写代码的时都要写一个Hello World程序.
注意, 重要的是一定要理解mapreduce这个过程. map + reduce = job, map的输出就是reduce的输入. 理解了这个过程, 再写其他程序之前也这样分析下, 写程序就不是什么难事了. 加油哦. 共勉!