MapReduce经典案例--WordCount代码
一.MapReduce工作的三阶段
1.Map阶段
map阶段将要处理的任务切分成一个个的MapTask,每个MapTask各自计算自己负责计算的内容,也就是将计算分布式。
map阶段有两步:
1.设置TextInputFormat类,将数据切分为<k1,v1>,输入到第二步。这里k1和v1的切分由hadoop框架帮我们完成。
2.自定义Map逻辑,将第一步的结果转化为<k2,v2>,输出结果。
2.Shuffle阶段
1.对输出的<k2,v2>进行分区
2.对不同分区的数据按照相同的key排序
3.对分组的数据初步规约,降低数据的网络拷贝
4.对数据分组,相同的key的value放在一个集合中
注意:在编程中,如果不写shuffle代码,会采用默认的分区分组方法。因此在实际工程中更具需求此处是可选的。
3.Reduce阶段
Reduce将上面的MapTask和Shuffle的计算结果进行整合得到最终输出。
Reduce有两步:
1.对多个 Map 任务的结果进行排序以及合并, 编写 Reduce 函数实现自己的逻辑, 对输 入的 Key-Value 进行处理, 转为新的 Key-Value(K3和V3)输出。
2.设置 TextOutputFormat 处理并保存 Reduce 输出的 Key-Value 数据
二.WordCount代码编写
1.准备
首先确保hadoop集群能正常启动(dfs集群和yarn集群),然后准备一份文本上传到hdfs中。这里不在赘述。
2.pom.xml中需要添加的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>hdfs_api</artifactId>
<groupId>com.sora</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../hdfs_api/pom.xml</relativePath>
</parent>
<packaging>jar</packaging>
<modelVersion>4.0.0</modelVersion>
<artifactId>mapreduce</art