一、准备工作
本节讲解MapReduce入门案例,统计一个文本文件中的单词出现次数。首先我们要下载相应的依赖。
pom.xml
org.apache.hadoop
hadoop-common
2.6.0-cdh5.4.7
provided
org.apache.hadoop
hadoop-hdfs
2.6.0-cdh5.4.7
org.apache.hadoop
hadoop-mapreduce-client-app
2.6.0-cdh5.4.7
jdk.tools
jdk.tools
1.7
system
${JAVA_HOME}/lib/tools.jar
junit
junit
4.9
cloudera
https://repository.cloudera.com/artifactory/cloudera-repos/
src/main/resources/log4j.propertieslog4j.rootLogger=DEBUG,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
准备单词文本word.txthello you
helo me
接下来,将这个文件上传到hdfs中"/mapreduce"目录下。hadoop fs -mkdir /mapreduce
hadoop fs -put word.txt /mapreduce
按照上一节的讲解,我们知道一个MapReduce任务是分为2个阶段的Map阶段,和Reduce阶段。Mapper阶段负责映射,Reduce阶段负责按照相同key进行归一。
MapReduce框架提供了Mapper和Reducer类,分别用于执行Mapper阶段和Reducer阶段的任务。我们只要自定义自己的类,分别继承这两个类并覆盖map方法和reduce方法,写上我们自己的业务逻辑即可。
在这里,我们将自定一个类TokenizerMapper继承Mapper,自定义IntSumReducer继承Reducer。
二 Mapper实现
分析
Mapper类的声明如下:public class Mapper {....}
这个类的声明上有四个泛型,对于