文档章节

mapreduce wordcount 理解

 又大了一岁
发布于 2015/01/08 15:26
字数 475
阅读 30
收藏 0

话说mapreduce学了一段时间,总有一个问题影响到我,其实特别简单,如:wordcount统计个数,在看代码时总是能看懂,但是真正的逻辑反而一直不明比,比如map端时怎么处理,reduce时又是怎么处理的,现在明白了。

原理是这样的,map端时读取每一行数据,并把每行数据中的一个字符统计一次,如下:

map 数据 {key,value} :

    {0,hello word by word}

    {1,hello hadoop by hadoop}

上面就是map端输入的key与value,在map端处理后会生成以下数据:

   {hello,1} {word,1} {by,1} {word,1}

    {hello,1} {hadoop,1} {by,1} {hadoop,1}

当看到这时大家都能明白,但是在reduce端时,就怎么也看不明白了,不知道是怎么对字符做统一的,再下通过对hadoop原理的分析得出在到reduce端时,会对map端发过来的数据进行清洗,清洗后的数据应该是以下结构:

[{hello},{1,1}] [{word},{1,1}] [{by},{1,1}] [{hadoop},{1,1}]

然后输入到reduce端,reduce会对每一个values做循环操作,对数据进行叠加,并输出到本地,具体代码请继续欣赏,不做多过解析。

public class WordCount extends Configured implements Tool{
 public static class Map extends Mapper<LongWritable,Text,Text,IntWritable>{
  private final static IntWritable one = new IntWritable(1);
  private Text word = new Text();
  public void map(LongWritable key,Text value, Context context)
  throws IOException,InterruptedException{
   String line = value.toString();
   StringTokenizer tokenizer = new StringTokenizer();
   while(tokenizer.hasMoreTokens()){
    word.set(tokenizer.nextToken);
    context.write(word,one);
   }
  }
 }
 
 public static class Reduce extends Reducer<Text,IntWritable,Text,IntWritable>{
  public void reduce(Text key,Iterable<IntWritable> values,Context context)
  throws IOException,InterruptedException{
   int sum = 0 ;
   for(IntWritable val: values) {
    sum += val.get();
   }
   context.write(key,new IntWritable(sum));
  }
 }
 
 public int run(String[] arge) throws Exception{
  Job job = new Job(getConf());
  job.setJarByClass(WordCount.class);
  job.setJobName("wordcount");
  
  job.setOutputKeyClass(Text.class);
  job.setOutputValueClass(IntWritable.class);
  
  job.setMapperClass(Map.class);
  job.setReduceClass(reduce.class);
  
  job.setInputFormatClass(TextInputFormat.class);
  job.setOutputFormatClass(TextInputFormat.class);
  
  FileInputFormat.setInputPaths(job,new Path(args[0]));
  FileInputFormat.setOutputPaths(job, new Path(args[1]));
  
  boolean success = job.waitForCompletion(true);
  return success ? 0 : 1;
 }
 
 public static void main(String[] args) throws Exception{
  int ret = ToolRunner.run(new WordCount(),args);
  System.exit(ret);
 }
}
  

    

© 著作权归作者所有

上一篇: MapReduce原理剖析
下一篇: MapReduce原理剖析
粉丝 0
博文 3
码字总数 626
作品 0
昌平
私信 提问
加载中

评论(0)

大数据技术之_05_Hadoop学习_01_MapReduce_MapReduce概述+Hadoop序列化

第1章 MapReduce概述1.1 MapReduce定义1.2 MapReduce优缺点1.2.1 优点1.2.2 缺点1.3 MapReduce核心思想1.4 MapReduce进程1.5 官方WordCount源码1.6 常用数据序列化类型1.7 MapReduce编程规范...

osc_8vgjpfw9
2019/02/15
4
0
大数据学习笔记之MapReduce

一、神马是高大上的MapReduce   MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算。对于大数据量的计算,通常采用的处理手法就是并行计算。但对许多开发者...

正在加载丶
2017/06/07
0
0
Hadoop_05_运行 Hadoop 自带 MapReduce程序

MapReduce使用   MapReduce是Hadoop中的分布式运算编程框架,只要按照其编程规范,只需要编写少量的业务逻辑代码即可实现 一个强大的海量数据并发处理程序 2. 运行Hadoop自带的MapReduce程...

osc_ft59t5i9
2018/06/16
2
0
【Hadoop】MapReduce概述

MapReduce定义 Mapreduce是一个分布式运算程序的编程思想,是用户开发“基于Hadoop的数据分析应用”的核心框架,其核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式...

Nicht_Sehen
03/31
0
0
【原创 Hadoop&Spark 动手实践 3】Hadoop2.7.3 MapReduce理论与动手实践

开始聊MapReduce,MapReduce是Hadoop的计算框架,我学Hadoop是从Hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密。这个可能是我做技术研究的思路有关,我开始...

Jonson Li
2017/05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Python基础-04元组

4.元组     元组的主要特性为: 1.元组在创建之后,具有不可以更改的特性,因此不能直接给元组的元素赋值 2.元组的元素类型可以为任意类型,如字典、字符串、列表等 3.元组常用于在程序的整...

osc_b2jll5m6
33分钟前
22
0
怎么在流程图中插入超链接?迅捷画图带你两步解决!

怎么在流程图中插入超链接?如何在WORD中插入超链接很多人都知道,但是对于陌生的流程图,很多人在进行流程图展示和讲解的时候,都会选择提前将需要的网页打开,然后手动进行更换。 这种手动...

真不莲
33分钟前
19
0
直播中音视频处理的一般流程

数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放显示 1、数据采集: 摄像机及拾音器收集视频及音频数据,此时得到的为原始数据 涉及技术或协议: 摄像机:CCD、CMOS 拾音器:声...

图玩智能科技
34分钟前
27
0
IntelliJ中的main函数和System.out.println()快捷键

https://blog.csdn.net/shijiebei2009/article/details/44726433

诗书易经
34分钟前
19
0
python 数据可视化实战(1)折线图绘制

  本篇博客新开一个数据分析后的数据可视化的例子讲解,每一篇博客是一个例子。   这节课学习如何绘制一个折线图。题目如下:   代码如下: import matplotlib.pyplot as pltimport m...

osc_xdc1vjza
34分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部