MapReduce实现词频统计案例:
1> 定义WordMapper类继承Mapper类,重新map方法,用于读取每行数据
Mapper父类参数说明:
args1 LoginWritable: 表示每次读取文件块的一行所指的长度偏移量
args2 Text : 每次读取文件块的一行文本内容
args3 Text : 上下文存储的key的数据类型
args4 IntWritable: 每次统计的单词的数量的类型
2> 定义WordReducer类继承Reducer类,用于对每一个shuffle之后的单词的出现次数的计算:
参数说明:
args1 Text : map的输出参数key,作为reducer输入参数类型
args2 Intwriable : map的输出参数value的值,作为reducer的输入参数value的类型
args3 Text:统计reducer计算处理之后输出结果的key值得数据类型
args4 Text: 通过reducer计算处理之后输入侧结果的value值的数据类型
3> 通过一个用于驱动的带有主函数的类实现mapreducer作业任务的提交处理操作:
该驱动类实现用于本地hadoop的mapreduce程序实现打的单词词频统计。
通过本地mapreduce程序实现词频统计可能会出现异常,这时候需要我们去github等网站下载 hadoop.dll程序,并且把hadoop.dll程序放到本地windows系统的c:/widonw/system32目录下。
提交到hdfs服务器进行词频统计:
这里需要设置fs.defaultFS的参数:hdfs://hadoop00:8020 , 其中hadoop00 代表的是centos服务器的主机名,也可以也可以直接使用IP地址:hdfs://192.168.38.100:8080
如果要直接使用centos服务器主机名的话,需要在本地的windows系统的hosts中进行映射配置:
路径:C:\Windows\System32\drivers\etc\hosts
配置完成之后,通过运行主函数可以直接实现对hdfs服务器上的word.txt文件的统计
执行时需要配置路径参数:/input/word.txt /output
4> 以jar包的形式上传到centos服务器上面运行:
1. 使用maven打包工具:
在pom.xml文件中添加打包编译配置,配置使用jdk的指定版本进行编译:
org.apache.maven.plugins
maven-compiler-plugin
3.3
1.8
2.配置好maven的环境变量:
path: D:\maven.3.3.0\bin
3.打开cmd命令窗口,进入到java项目的跟目录执行编译创建jar包的命令:
mvn clean package -Dmaven.test.skip=true
在java项目的target目录下会生成一个com.hadooptest-0.0.1-SNAPSHOT.jar的jar包,jar包的名称跟项目名相同。
4.上传jar包到centos服务器的制定的目录:/opt/mysoft/task
5.编写执行脚本: vim /opt/mysoft/task/shell/ wordcount_20200402.sh
hadoop jar /opt/mysoft/com.hadooptest-0.0.1-SNAPSHOT.jar com/mr/wordcount/WordCountDriver hdfs://hadoop00:8020/input hdfs://hadoop00:8020/output
脚本说明:
hadoop jar : 执行jar包的命令
/opt/mysoft/com.hadooptest-0.0.1-SNAPSHOT.jar :jar包的绝对路径
com/mr/wordcount/WordCountDriver : jar包执行的主函数的类名
hdfs://hadoop00:8020/input : 输入参数1
hdfs://hadoop00:8020/output :输出参数2
6.通过脚本执行
./opt/mysoft/task/shell/wordcount.sh
7.执行完成查看结果
hdfs dfs -ls /output