mapreduce入门程序之---wordcount
mapreduce是hadoop生态中非常重要的一部分,顾名思义,主要分为两部分,map和reduce,他们各司其职,map的主要功能是用来对待处理的文档进行处理,主要是对数据进行按行读取,分割,然后根据用户需要进行不同的判断,清晰,直到得到目标的干净数据。reduce程序主要是对map传来的数据进行汇总,求和。最后经统计的结果输入到目标文件中。具体代码如下:
WCMapper.java
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;
//4个泛型,前两个是mapper输入数据的类型KENY是输入的key的类型,VALUIN是指的value的类型
//map和reduce的数据的输入输出都是以key-value的形式存在的
//默认情况下框架传递给我们的mapper框架输入数据,key是要处理文本的中一行的起始位置的偏移量,这一行的内容作为value
public class WCMapper extends Mapper {
//mapredure框架每度一行数据就会调用一次方法,递归调用
     @Override
    protected void map(LongWritable key, Text value, Context context)
    		throws IOException, InterruptedException {
//具体业务逻辑写在这个方法中,而且我们要处理的数据已经被框架传递进来,在方法的key-value参数中
    	 //key这一行数据的其实偏移量   value是这一行的内容
//将这一行的内容转换为String类型
    	 String line = value.toString();
    	 //将这一行内容进行分割
    	 String[] words = StringUtils.split(line," ");
    	 //遍历数组,以k-v的形式 k:单词   v:1
    	 for(String word : words) {
    		 context.write(new Text(word),new LongWritable(1));
    	 }
}
}
WCReducer.java
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{
//map的数据处理完成之后对,将所有的kv对缓存起来,进行分组,然后传递一个分组,调用一次reduce
	//
	@Override
	protected void reduce(Text key, Iterable values,Context contest) throws IOException, InterruptedException {
		long count = 0;
		//遍历valueslist,进行累加求和
		for(LongWritable value:values) {
			count +=value.get();
		}
		//输出一个文件的统计结果
		contest.write(key,new LongWritable(count));
}
}
WCRunner.java
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;
public class WCRunner {
//用来描述一个特定的job,比如改作业指定那个类是逻辑处理中的map,那个类是逻辑处理中发的reduce
	//还可以指定改作业要处理的数据的所在的路径
	//还可以指定作业完成后输出结果放到的哪个路径中
	public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
		Configuration conf = new Configuration();
Job job = Job.getInstance(conf);
	    //设置整个job所要用到的jar包的类所在的位置
		job.setJarByClass(WCRunner.class);
//本job所使用的mapper和reduce
	    job.setMapperClass(WCMapper.class);
	    job.setReducerClass(WCReducer.class);
//指定reduce的kv类型
	    job.setOutputKeyClass(Text.class);
	    job.setOutputValueClass(LongWritable.class);
//指定map的kv类型
	    job.setMapOutputKeyClass(Text.class);
	    job.setMapOutputValueClass(LongWritable.class);
//指定元数据指定在哪里
            //这里的文件路径既可以windows中的文件路径,也可以是hdfs中的路径,前提是可以互相通讯
	    FileInputFormat.setInputPaths(job,new Path("/home/hadoop/data-shixun/wordcount/srcdata.txt"));
	    FileOutputFormat.setOutputPath(job, new Path("/home/hadoop/data-shixun/wordcount/output"));
	    //将job提交给集群
	    job.waitForCompletion(true);
	}
}
代码中相应部分都有详细的注释。
mapreduce入门程序之---wordcount的更多相关文章
- Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码
		
Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...
 - MapReduce编程入门实例之WordCount:分别在Eclipse和Hadoop集群上运行
		
上一篇博文如何在Eclipse下搭建Hadoop开发环境,今天给大家介绍一下如何分别分别在Eclipse和Hadoop集群上运行我们的MapReduce程序! 1. 在Eclipse环境下运行MapR ...
 - 第02讲:Flink 入门程序 WordCount 和 SQL 实现
		
我们右键运行时相当于在本地启动了一个单机版本.生产中都是集群环境,并且是高可用的,生产上提交任务需要用到flink run 命令,指定必要的参数. 本课时我们主要介绍 Flink 的入门程序以及 SQ ...
 - 第1节 MapReduce入门:11、mapreduce程序的入门
		
1.1.理解MapReduce思想 MapReduce思想在生活中处处可见.或多或少都曾接触过这种思想.MapReduce的思想核心是“分而治之”,适用于大量复杂的任务处理场景(大规模数据处理场景). ...
 - map-reduce入门
		
map-reduce入门 近期在改写mahout源代码,感觉自己map-reduce功力不够深厚,因此打算系统学习一下. map-reduce事实上是一种编程范式,从统计词频(wordCount)程序 ...
 - 【Hadoop离线基础总结】MapReduce入门
		
MapReduce入门 Mapreduce思想 概述 MapReduce的思想核心是分而治之,适用于大量复杂的任务处理场景(大规模数据处理场景). 最主要的特点就是把一个大的问题,划分成很多小的子问题 ...
 - hadoop笔记之MapReduce的应用案例(WordCount单词计数)
		
MapReduce的应用案例(WordCount单词计数) MapReduce的应用案例(WordCount单词计数) 1. WordCount单词计数 作用: 计算文件中出现每个单词的频数 输入结果 ...
 - hadoop的第一个hello world程序(wordcount)
		
在hadoop生态中,wordcount是hadoop世界的第一个hello world程序. wordcount程序是用于对文本中出现的词计数,从而得到词频,本例中的词以空格分隔. 关于mapper ...
 - 大数据学习day32-----spark12-----1. sparkstreaming(1.1简介,1.2 sparkstreaming入门程序(统计单词个数,updateStageByKey的用法,1.3 SparkStreaming整合Kafka,1.4 SparkStreaming获取KafkaRDD的偏移量,并将偏移量写入kafka中)
		
1. Spark Streaming 1.1 简介(来源:spark官网介绍) Spark Streaming是Spark Core API的扩展,其是支持可伸缩.高吞吐量.容错的实时数据流处理.Sp ...
 
随机推荐
- Laravel5.6---从头做一个项目web
			
简介:类似论坛的项目,纯web,响应式,主要包含登录注册.支付.评论.富文本.文章列.个人中心等 目录: 1.初始化项目 ======================================= ...
 - Centos 端口被占用,kill被占用的进程
			
1.yum install lsof 2.输入netstat -tln,查看系统当前所有被占用端口 3.根据端口查询进程,输入lsof -i :9555,切记不要忘了添加冒号 4. 既然知道进程号了, ...
 - Qt错误: 程序数据库管理器不匹配 请检查安装
			
错误提示: C1902: 程序数据库管理器不匹配:请检查安装解决 解决方法: 到D:\VisualStudio2015\VC\bin目录下面拷贝mspdbsrv.exe.mspdb140.dll.ms ...
 - Django admin 页面中文名称加s,去除s的设置
			
class UserInfo(models.Model): #字段 #字段 #字段 class Meta: verbose_name_plural = '用户列表'
 - Exchange 退信550 5.1.11 RESOLVER.ADR.ExRecipNotFound
			
问题描述: 在Exchange 2013环境下,某客户将一个用户的邮箱test@abc.com禁用,过了几天又想连接该邮箱,但是却没有找到禁用的邮箱,然后客户就Enable-MailBox重新创建了一 ...
 - WIN8输入法的问题
			
在win8下输入法的添加和删除,使用第三方的软件很难处理好,而且容易造成系统的不稳定.比如搜狗输入法有个输入法管理器. 正确的做法: 1.Win+C打开侧边栏,点击 设置,选择“更改电脑设置” 这个选 ...
 - python链式对比
			
参考 https://www.cnblogs.com/shanghongyun/p/10519579.html 为什么Python中“2==2>1”结果为True在Python中,你可能会发现这 ...
 - 用 Python 加密文件
			
生活中,有时候我们需要对一些重要的文件进行加密,Python 提供了诸如 hashlib,base64 等便于使用的加密库. 但对于日常学习而言,我们可以借助异或操作,实现一个简单的文件加密程序,从而 ...
 - Python爬取微信公众号素材库
			
这是我的之前写的代码,今天发布到博客园上,说不定以后需要用. 开始: #coding:utf-8 import werobot import pymongo class Gongzhonghao( ...
 - 关于Bigdecimal的问题
			
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行 ...