目录
MapReduce编程规范
用户编写的程序分成三个部分:Mapper、Reducer、Driver
1、Mapper阶段
1)用户自定义的Mapper要继承自己的父类。
2)Mapper的输入数据是KV对的形式(KV的类型可自定义)
3)Mapper中的业务逻辑写在map()方法中。
4)Mapper的输出数据是KV对的形式(KV的类型可自定义)
5)map()方法(MapTask进程)对每一个<K,V>调用一次。
2、Reducer阶段
1)用户自定义的Reducer要继承自己的父类。
2)Reducer的输入数据类型对应Mapper的输出数据类型,也是KV。
3)Reducer的业务逻辑写在reduce()方法中。
4)ReduceTask进程对每一组相同k的<k,v>组调用一次reduce()方法。
3、Driver阶段
相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象。
WordCount案例实操
本地测试
1、需求
统计出给出的文本文件中统计出每一个单词出现的总次数。
1)输入数据
新建一个文本文件命名为:HYF.txt
2)期望输出数据
HYF 2;LJY1;LQQ 2;
CZF 1; MGQ 1;CDH 2; WJJ 1;
2、需求分析
按照MapReduce编程规范,分别编写Mapper、Reducer、Driver。
环境准备
1)常见waven工程,命名为MapReduceDemo
文件》新建》项目
更改maven下的配置
文件》设置》搜索栏》输入maven
在pom.xml文件中添加如下依赖
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.1.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
</dependencies>
在项目的src/main/resources目录下,新建一个文件,命名为“log4j.properties”
操作:在resources下单击右键》新建》文件
在log4j.properties文件中填入
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
在项目src/main/java下创建一个 软件包,命名为:com.atguigu.mapreduce.wordcou
操作:java路径下单击右键》新建》软件包
在包com.atguigu.mapreduce.wordcount下新建三个类
分别命名为:
WordCountMapper;WordCountReducer;WordCountDriver
操作:在包下单击右键》新建》java类