MapReduce 的简单例子 WordCount的实现
来源:互联网 发布:谈恋爱软件靠谱吗 编辑:程序博客网 时间:2024/05/29 04:28
MapReduce 是由Google公司的JeffreyDean 和 Sanjay Ghemawat 开发的分布式编程模型。
学过并行算法的同学们应该知道其实现原理。不懂可以看课件以及博客。附上一张原理图:
然后我们要编写map 和 reduce 程序,这里当然是用火的不能再火的hadoop,具体的逻辑就写在注释里了,代码如下
map
package wordCount;import org.apache.commons.lang.StringUtils;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;/** * Created by zhangguanlong on 2017/11/6. *///前两个泛型是指定mapper输入数据的类型 //map reduce 的输入输出都是以key - value 对的形式封装的 //默认情况下,框架传递的mapper的输入数据中,key是要处理的文本中一行的起始偏移量,这一行的内容作为value //使用hadoop自己的类型,实现了自己的序列化接口public class WCMapper extends Mapper<LongWritable,Text,Text,LongWritable>{ //mapreduce框架每读一行数据,就调用一次该方法 @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //具体业务逻辑 写在此方法体中,业务处理的数据已经在参数中被传递进来 key value //key 是这一行数据的起始偏移量 value 是这一行文本的内容 //拿到一行,切分单词 String line =value.toString(); String[] words=StringUtils.split(line," "); //遍历这个单词数组,输出为k-v形式 for (String word:words){ context.write(new Text(word),new LongWritable(1)); } }}reduce
package wordCount;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;/** * Created by zhangguanlong on 2017/11/6. */public class WCReducer extends Reducer<Text,LongWritable,Text,LongWritable>{ //框架在map处理完之后,将所有k—v对缓存起来,进行分组,然后传递一个组<key,values>,调用一次reduce方法 @Override protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException { long count =0; //遍历value 的list进行累加求和 for (LongWritable value:values){ count+=value.get(); } //输出这一个单词的统计结果 context.write(key,new LongWritable(count)); }}
程序写完了,但只有这些还不够,还要有个类用来描述这个任务,因为map、reduce都是分散的,一个jar包里可能会有好多个map和reduce,所以运行时指定一下
要用哪一个map和reduce,写一个作业(job)类
package wordCount;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;/** * 用来描述一个特定的作业 * 比如,该作业使用那个类作为map,reduce * 可指定该作业要处理的数据所在的路径 * 指定该作业输出的结果放在那个路径 * Created by zhangguanlong on 2017/11/6. */public class WCRunner { public static void main(String[] args) throws Exception{ Configuration configuration=new Configuration(); Job job=Job .getInstance(configuration); //classloader 加载时 //设置整个 job所用的类在哪个jar包 job.setJarByClass(WCRunner.class); //改job,使用的map reduce的类 job.setMapperClass(wordCount.WCMapper.class); job.setReducerClass(wordCount.WCReducer.class); //指定map\reduce的输出数据k-V类型 job.setOutputKeyClass(Text.class); job.setMapOutputValueClass(LongWritable.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(LongWritable.class); //指定原始数据存放路径 FileInputFormat.setInputPaths(job,new Path("/wc/srcdata/")); //处理结果 输出数据存放路径 FileOutputFormat.setOutputPath(job,new Path("/wc/output")); //将job提交给集群运行 job.waitForCompletion(true); }}程序要跑的话需要放到hadoop环境中,我们先把程序打成ja包,然后把包传到hadoop集群服务器上去,可以用sftp传一下
然后hadoop要启动好,hdfs 和yarn
启动好应该是这样
[hadoop@zhang ~]$ jps3646 NodeManager6023 Jps3238 DataNode3390 SecondaryNameNode2888 NameNode3547 ResourceManager然后按照把数据放到代码中的路径,接着
[hadoop@zhang ~]$ hadoop jar HProject.jar wordCount.WCRunner
运行,打印的日志正常如下
然后在输出目录下找到结果
其中占零字节的_success文件只是个标志,结果存放在part-r-00000里,这是hadoop自动生成的。
细节如图。
阅读全文
1 0
- MapReduce 的简单例子 WordCount的实现
- MapReduce实现简单的Wordcount
- Hadoop1.x 的MapReduce 简单例子WordCount
- 简单的MapReduce程序wordCount
- WordCount的MapReduce的实现
- MapReduce: WordCount的Eclipse实现
- 并行wordcount的MapReduce实现
- mapreduce中最简单的wordcount程序
- 使用python实现MapReduce的wordcount实例
- MapReduce自带wordcount的实现
- Hadoop-MapReduce之WordCount的实现
- Hadoop中WordCount例子的实现
- Hadoop2.4.1 简单的wordCount的MapReduce程序
- mapreduce编程练习(一)简单的练习 WordCount
- 如何编写最简单的MapReduce之WordCount程序
- mapreduce-wordcount例子
- MapReduce例子1--wordcount
- MapReduce 例子:WordCount
- LKM可加载内核模块简单实例编写
- sqlalchemy 多对多关系
- 接口和抽象类
- 字符串转为小数 保留两位数字
- java中HashMap的使用方法及与Map的关系
- MapReduce 的简单例子 WordCount的实现
- 导出Excel
- 采用oracle创建用户并授予dba权限 1)创建用户: create user wmlt identified by wmlt; 2)授予dba权限 grant connect,resou
- PDFJSInNet(pdf播放)
- ReactNative 技术交流群
- JAVA中将一个List等分成n个list的工具方法
- 黄金十年,致穿越而来的 Web 开发者
- 使用hibernate-validate 校验参数bean
- ios 关于UIBottom的image的上下左右方向排列