WordCount代码编写
来源:互联网 发布:js classname 编辑:程序博客网 时间:2024/06/08 17:07
本文是在win下装的linux虚拟机,在linux安装的hadoop环境,从而实现一个简单的单词计数功能。
目的:对于words.txt文本文件,对文本中的单词进行统计。
- 代码流程
- Map
- Reduce
- 通过job对象组装
- 打jar包
代码流程
- 分析具体的业务逻辑,确定输入数据的样式。
- 自定义一个类,这个类要继承Mapper类,并重写map方法,在map方法中实现具体的业务逻辑,然后将新的key,value输出。
- 自定义一个类,这个类要继承Reducer类,并重写reduce方法,在reduce方法中实现具体的业务逻辑,然后将新的key,value输出
- 最后将自定义的map和reduce通过job对象组装起来。
Map
package cn.master.hadoop.mr;import java.io.IOException;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;public class WCMapper extends Mapper<LongWritable, Text, Text, LongWritable>{ //Mapper的参数为输入和输出 ,输入和输出都是key value 的形式。 //重写map方法。 @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //接收数据v1 String line = value.toString(); //切分数据 String[] words = line.split(" "); //循环 for(String w:words){ //出现一次,记一个1,输出 context.write(new Text(w), new LongWritable(1)); } }}
Reduce
package cn.master.hadoop.mr;import java.io.IOException;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;public class WCReducer extends Reducer<Text, LongWritable, Text, LongWritable>{ @Override protected void reduce(Text k2, Iterable<LongWritable> v2s, Context context) throws IOException, InterruptedException { //接收数据 //定义一个计数器 long counter = 0; //循环v2s for(LongWritable i : v2s){ counter += i.get() ; } //输出 context.write(k2, new LongWritable(counter)); }}
通过job对象组装
package cn.master.hadoop.mr;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;public class WordCount { public static void main(String[] args) throws Exception { Job job =Job.getInstance(new Configuration());//构建job对象 //注意:main方所所在的类设置进去 job.setJarByClass(WordCount.class); //组装map和reduce //设置mapper相关的属性 job.setMapperClass(WCMapper.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(LongWritable.class); FileInputFormat.setInputPaths(job, new Path("/words.txt"));//hdfs下的path,一般通过参数传递 //设置reduce相关的属性 job.setReducerClass(WCReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(LongWritable.class); FileOutputFormat.setOutputPath(job, new Path("/wcout418")); //提交任务 job.waitForCompletion(true);//true:在执行过程中打印进度和详情 }}
打jar包
选择项目,右键->export->jar file 可以在运行的时候选择程序入口,也可以打包时选择程序入口。
虚拟机上执行“hadoop jar 路径 ” 从而得出结果。
1 0
- WordCount代码编写
- hadoop之WordCount代码编写
- 【3-3】Wordcount代码编写
- win下wordcount代码编写
- 3-3 wordcount代码编写 mapper+reducer,wordcount
- Storm的wordcount代码编写与分析
- Hadoop之Mapreduce------>入门级程序WordCount代码编写
- WordCount代码
- hadoop mapreduce wordcount编写
- 【hadoop】wordcount实例编写
- Hadoop MapReduce WordCount程序编写
- Hadoop入门WordCount代码
- hadoop wordcount 代码
- Hadoop WordCount代码
- MR代码实例-wordcount
- Trident WordCount代码示例
- wordcount和sort代码
- WordCount代码实现
- Android 自定义组合控件,属性
- Search a 2D Matrix 解题报告
- Unity读取内部、外部资源详解
- mysql优化——explain详解
- bug初步访问时:mysql
- WordCount代码编写
- SQL charindex 通过id字符串获取数据
- SEO年度工作总结
- 图森未来算法科学家李定华浙江ACM省赛现场演讲
- 创建自己的404.html页面
- 为什么做的报表领导不满意,如何提升报表的价值?
- vue2.0导航菜单切换
- Android中Spinner根据value来选择选中项
- dumpsys命令用法