MapReduce 实现统计单数出现次数
工程配置
在 windows 中配置 hadoop 及环境变量 HADOOP_
下载 winutils.exe 放入 bin 目录中
https://github.com/cdarlint/winutils创建 maven 工程 引入依赖
1
2
3
4
5
6
7
8
9
10<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j</artifactId>
<version>2.14.1</version>
</dependency>编写 log4j 配置文件
参考:https://www.cnblogs.com/orginly/p/14847470.html
整体思路
仿照源码
Map 阶段
- map () 方法中把传入的数据转为 String 类型
- 根据空格切分出单词
- 输出 <单词,1>
1 | package com.orginly.mapreduce.wc; |
Reduce 阶段
- 总各个 key (单词) 的个数,遍历 value 数据进行累加
- 输出 key 的总数
1 | package com.orginly.mapreduce.wc; |
Driver
- 获取配置文件对象,获取 job 对象实例
- 指定程序 jar 的本地路径
- 指定 Mapper / Reduce 类
- 指定 Mapper 输出的 kv 数据类型
- 指定 最终输出的 kv 数据类型
- 指定 job 处理的原始数据路径
- 指定 job 输出结果路径
- 提交作业
1 | package com.orginly.mapreduce.wc; |
验证程序
本地验证
使用 IDEA 运行 Drive 中的 main () 方法
如果出现其他异常请查看 https://www.cnblogs.com/orginly/p/15392871.html
- 先自动运行一次,此时会 args 下标异常
- 编辑运行配置添加参数
- 重新运行
Yarn 集群验证
- 把程序打成 jar 包,改名为 wordCount.jar 上传到 Hadoop 集群
1
2
3
4# 上传到服务器
rz
# 重命名
mv wordCount-1.0-SNAPSHOT.jar wordCount.jar
- 启动 Hadoop 集群 (Hdfs,Yarn)
- 使用 Hadoop 命令提交任务运行
因为是集群,源文件不能存放在本地目录,需要上传至 HFDS 进行处理1
hadoop jar wordCount.jar com.orginly.mapreduce.wc.WordCountDriver /mapReduce/wc.txt /wcoutput
执行成功
如果执行命令时出现版本过低提示,请安装服务器所使用的 jdk 版本进行 jar 的打包