Hadoop的简单单词统计案例
程序员文章站
2022-04-28 08:37:32
...
Hadoop的简单单词统计案例
在Hadoop学习过程中,单词统计作为一个最基本的案例,非常简单实用,是每一个入门菜鸟必须要掌握的一个例子,可以通过这个简单的小案例了解Hadoop的基本运行原理和MapReduce程序的开发流程
引入相关Hadoop目录相关Jar文件:
(hdfs(必须),common(必须),mapreduce(必须))
引入配置文件:
core-site.xml;hdfs-site.xml;……
编写Map程序:
package cn.guyouda.hadoop.mapreduce.wordcount;
import java.io.IOException;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
/**
*
* @author Youda
* Map需要四个泛型参数
* KEYIN:输入参数:默认是要处理的文本中的某一行的偏移量
* VALUEIN:输入参数:要处理的某一行文本内容
* VALUEOUT:输出给Reduce的数据类型
* KEYOUT:输出给Reduce的偏移量
*
* 由于需要网络传输,故参数需要序列化
* 但是Java自带的序列化会携带一些冗余信息,不利于大量的网络传输
* 所以Hadoop对Long,String进行了封装,变为LongWritable,Text
*
*/
public class WordCountMapper extends Mapper<LongWritable, Text, Text, LongWritable>{
@Override
protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, LongWritable>.Context context)
throws IOException, InterruptedException {
// 处理具体的业务逻辑
String text = value.toString();
String[] words = StringUtils.split(text," |,|\\.");
for(String word:words){
context.write(new Text(word), new LongWritable(1));
}
}
}
编写Reduce程序:
package cn.guyouda.hadoop.mapreduce.wordcount;
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
/**
*
* @author Youda
*
*/
public class WordCountReducer extends Reducer<Text, LongWritable, Text, LongWritable>{
@Override
protected void reduce(Text arg0, Iterable<LongWritable> arg1,
Reducer<Text, LongWritable, Text, LongWritable>.Context arg2) throws IOException, InterruptedException {
Long value = 0L;
for(LongWritable num:arg1){
value += num.get();
}
arg2.write(arg0, new LongWritable(value));
}
}
编写控制程序:
package cn.guyouda.hadoop.mapreduce.wordcount;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
/**
*
* @author Youda
*指定Map和Reduce类
*指定作业需要处理的数据位置
*还可以指定数据输出的结果路径
*/
public class WordCountRunner {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf);
job.setJarByClass(WordCountRunner.class);
//指定Map和Reduce类
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);
//指定Reduce的输出类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
//指定Map的输出类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);
//指定源文件夹和输出文件夹
FileInputFormat.setInputPaths(job, new Path("/wordcount/srcdata/"));
FileOutputFormat.setOutputPath(job, new Path("/wordcount/output/"));
//提交:参数:是否显示处理进度
System.exit(job.waitForCompletion(true)?0:1);
}
}
在Hadoop中创建文件夹需要统计的单词所在文件夹并上传
hadoop fs -mkdir /wordcont
hadoop fs -mkdir /wordcount/srcdata
hadoop fs -put XXXX.txt /wordcount/srcdata
注:在创建文件夹和上传文件之前需要启动HDFS(start-dfs.sh)输出文件夹不能自己创建,否则程序运行时会报错
运行程序:
hadoop jar Count.jar cn.guyouda.hadoop.mapreduce.WordCountRunner
运行结束以后会在输出文件夹创建结果文件
注:运行程序前必须启动YARN(start-yarn.sh)
显示统计结果:
hadoop fs -cat /wordcount/output/part-r-00000
上一篇: Python解决八皇后问题示例
下一篇: Python3爬取前程无忧招聘数据教程
推荐阅读
-
AJAX级联下拉框的简单实现案例
-
hadoop入门之统计单词在文件中出现的个数示例
-
Python3实现统计单词表中每个字母出现频率的方法示例
-
Mybatis入门案例中设计模式的简单分析
-
布同 统计英文单词的个数的python代码
-
php+mysql开发的最简单在线题库(在线做题系统)完整案例
-
【LeeCode 简单 字符串 python3】557 反转字符串中的单词 III
-
简单的vuex 的使用案例笔记
-
python统计文本文件内单词数量的方法
-
经典问题(c++/python)素数、杨辉三角(金字塔型)、统计单词数、简单计算器、密码安全程度、凯撒密码加密、汉诺塔 (python课设实验实例)-- biaobiao88