引语:
之前运行过了hadoop官方自带的第一个例子wordcount,这次我们自己手写一个,这个相当于是编程语言中的helloworld一样.
首先我们了解一下我们要写的MapReduce是处理的哪个部分,我们知道hadoop处理文件是先将要处理的文件拆分成很多个部分,分别处理完成,最后再将结果给汇聚起来,
形成最终的处理结果.(也就是分治法的思想)我们接下来举个单词统计的例子,看看我们写的代码是整个MapReduce过程中的哪些部分.
具体MapReduce的过程例子
首先咱们有这么一个文件,文件内容如下:
hello world hello java
hello hadoop
很简单的一个文件就两行.那么hadoop是怎么做单词统计的呢?我们用步骤来描述下:
第一步:读取这个文件,按行来将这个文件每一行的单词给拆分出来,然后形成很多key/value的结果,处理完就是这样
第二步:排序
排序完会变成这样的结果
第三步:合并
合并后的结果如下
第四步:汇聚结果
到第四步完成,单词统计其实也就完成了.看完这个具体的实例,想必大家对mapreduce的处理过程有了一个比较清晰的理解.
然后我们要知道第二步和第三步是hadoop框架帮助我们完成的,我们实际上需要写代码的地方是第一步和第四步.
第一步对应的就是Map的过程,第四步对应的是Reduce的过程.
编写mapreduce代码
现在我们要做的就是完成第一步和第四步的代码
1.创建项目
创建一个普通的java项目就行,然后一路next点过去,项目名自己取一个.
2.引入到时用到的hadoop的包,我这里用的是hadoop-3.2.0的版本,需要引入哪些包呢?
要引入的包:
(1).hadoop目录下share/hadoop/common下的包(除了那个test的包,官方的测试例子,可以不需要引入)
(2).和上一条一样的common下lib中的包
(3).hadoop目录下share/hadoop/mapreduce下的包
(4).和上一条一样mapreduce下的lib中的包
然后在idea中引入这些包,点击File->Project Structure->Modules
点击右边的小加号来引入刚才说的那些jar包
3.引入包完成以后,我们创建一个叫WordCount的java文件,然后开始敲代码
这里直接贴一下代码,__要注意import的部分,是不是和我一样?__因为好些个名字一样的类,来自于不同的jar,容易弄错.
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.