Hadoop1.x 的MapReduce 简单例子WordCount
来源:互联网 发布:淘宝ipad客户端下载 编辑:程序博客网 时间:2024/05/16 14:24
一. 前言
之前笔记里记得案例今天看到了,所以拿出来分享。 **首先介绍一下案例需求,统计出hadoop上的一个hello目录下的文件不同单词的个数,并输出统计结果。**
MapReduce 是一种分布式计算模型,主要分为Map和Reduce两部分,用户只需要实现map()和reduce()函数就可以,一般两个函数之间以key和value这种键值对传递参数
二.代码
import java.io.IOException;import java.net.URI;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;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.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;public class WordCountApp { static final String INPUT_PATH = "hdfs://hadoop1:9000/hello"; static final String OUT_PATH = "hdfs://hadoop1:9000/out"; public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); final Job job = new Job(conf,WordCountApp.class.getSimpleName()); //判断输出文件是否存在,存在就删除 FileSystem fileSystem = FileSystem.get(new URI(INPUT_PATH), conf); Path outPath = new Path(OUT_PATH); if(fileSystem.exists(outPath)){ fileSystem.delete(outPath, true); } // 指定输入目录 FileInputFormat.setInputPaths(job, INPUT_PATH); //指定输入数据进行格式化处理的类 job.setInputFormatClass(TextInputFormat.class); //指定自定义的Mapper类 job.setMapperClass(MyMapper.class); //指定Mapper输出<k,v>类型 job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(LongWritable.class); //分区 job.setPartitionerClass(HashPartitioner.class); //设置reduce个数 job.setNumReduceTasks(1); //指定自定义的Reducer类 job.setReducerClass(MyReduce.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(LongWritable.class); //指定输出的路径 FileOutputFormat.setOutputPath(job, new Path(OUT_PATH)); //指定输出的格式化类 job.setOutputFormatClass(TextOutputFormat.class); //将整个作业提交给JobTracker job.waitForCompletion(true); } /** * k1 每一行起始的位置 * v1 每一行的文本内容 * k2 每一行中的每个单词 * v2 每一行中的每个单词出现的次数,固定值1 * @author mademin * */ static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable>{ @Override protected void map(LongWritable k1, Text v1, Mapper<LongWritable, Text, Text, LongWritable>.Context context) throws IOException, InterruptedException { //将每行文本按照制表符来进行分割 String[] splited = v1.toString().split("\t"); for(String word : splited){ context.write(new Text(word), new LongWritable(1L)); } } } /** * k2 * v2 * k3 整个文件中的不同单词 * v3 整个文件中的不同单词出现总数 * @author mademin * */ static class MyReduce extends Reducer<Text, LongWritable, Text, LongWritable>{ @Override protected void reduce(Text k2, Iterable<LongWritable> v2s, Reducer<Text, LongWritable, Text, LongWritable>.Context context) throws IOException, InterruptedException { long sum = 0L; for(LongWritable v2 : v2s){ sum += v2.get(); } context.write(k2, new LongWritable(sum)); } }}
阅读全文
1 0
- Hadoop1.x 的MapReduce 简单例子WordCount
- MapReduce 的简单例子 WordCount的实现
- 简单的MapReduce程序wordCount
- MapReduce实现简单的Wordcount
- mapreduce-wordcount例子
- MapReduce例子1--wordcount
- MapReduce 例子:WordCount
- mapreduce中最简单的wordcount程序
- MapReduce简单入门 wordcount
- 配置Hadoop2.x的HDFS、MapReduce来运行WordCount程序
- hadoop1.x早期mapreduce slot解析
- Hadoop1.X mapreduce原理和缺陷
- Hadoop2.4.1 简单的wordCount的MapReduce程序
- hadoop1.x与hadoop2.x在HDFS和MapReduce上的区别
- mapreduce编程练习(一)简单的练习 WordCount
- 如何编写最简单的MapReduce之WordCount程序
- hadoop基础----hadoop实战(五)-----myeclipse开发MapReduce---WordCount例子---解析MapReduce的写法
- 学习Hadoop MapReduce与WordCount例子分析
- 在JavaEE开发中我们好多地方都会用到实体类,浅谈一下实体类的作用
- UI
- python项目中不同文件夹py源文件之间如何相互调用--Python import中相对路径的问题
- 通过 JS 实现与后台进行连接,提交表单,将获取到的数据pos给服务器。
- Drools推理引擎
- Hadoop1.x 的MapReduce 简单例子WordCount
- 单向一对多映射和双向一对多映射
- 转,怕自己忘记<c:forEach varStatus="status">中 varStatus的作用
- 35day 新浪微博(CELL转发)
- 为什么越省钱的人却越穷?
- js取得参数的最好的代码,及其他代码搜集
- STORM入门之(Stream Groupings分组方式)
- 嵌套的控制结构、其他控制语句
- DataExcel 设置 函数