1.图解MapReduceMapReduce整体流程图

并行读取文本中的内容,然后进行MapReduce操作

Map过程:并行读取三行,对读取的单词进行map操作,每个词都以<key,value>形式生成

reduce操作是对map的结果进行排序,合并,最后得出词频。

2.简单过程:

Input:
Hello World Bye World
Hello Hadoop Bye Hadoop
Bye Hadoop Hello Hadoop
Map:
<Hello,1>
<World,1>
<Bye,1>
<World,1>
<Hello,1>
<Hadoop,1>
<Bye,1>
<Hadoop,1>
<Bye,1>
<Hadoop,1>
<Hello,1>
<Hadoop,1>
Sort:
<Bye,1>
<Bye,1>
<Bye,1>
<Hadoop,1>
<Hadoop,1>
<Hadoop,1>
<Hadoop,1>
<Hello,1>
<Hello,1>
<Hello,1>
<World,1>
<World,1>
Combine:
<Bye,1,1,1>
<Hadoop,1,1,1,1>
<Hello,1,1,1>
<World,1,1>
Reduce:
<Bye,3>
<Hadoop,4>
<Hello,3>
<World,2>

MergeSort的过程(ps:2012-10-18)Map:
<Hello,1><World,1><Bye,1><World,1><Hello,1><Hadoop,1><Bye,1><Hadoop,1><Bye,1><Hadoop,1><Hello,1><Hadoop,1>
MergeSort:

  • <Hello,1><World,1><Bye,1><World,1><Hello,1><Hadoop,1>
    |
    <Bye,1><Hadoop,1><Bye,1><Hadoop,1><Hello,1><Hadoop,1>
  • <Hello,1><World,1><Bye,1>
    || <World,1><Hello,1><Hadoop,1> |
    <Bye,1><Hadoop,1><Bye,1> ||
    <Hadoop,1><Hello,1><Hadoop,1>
  • <Hello,1><World,1>
    ||| <Bye,1> || <World,1><Hello,1> |||
    <Hadoop,1> | <Bye,1><Hadoop,1> ||| <Bye,1> ||
    <Hadoop,1><Hello,1> ||| <Hadoop,1>
  • MergeArray
    结果:<Hello,1><World,1> ||| <Bye,1> ||
    <Hello,1><World,1> ||| <Hadoop,1> |
    <Bye,1><Hadoop,1> ||| <Bye,1> ||
    <Hadoop,1><Hello,1> ||| <Hadoop,1> 在|||这一层级
  • MergeArray
    结果:<Bye,1><Hello,1><World,1> ||
    <Hadoop,1><Hello,1><World,1> |
    <Bye,1><Bye,1><Hadoop,1> ||
    <Hadoop,1><Hadoop,1><Hello,1> 在||这一层级
  • MergeArray

    果:<Bye,1><Hadoop,1><Hello,1><World,1><Hello,1><World,1>
    |
    <Bye,1><Bye,1><Hadoop,1><Hadoop,1><Hello,1><Hadoop,1>
    在|这一层级
  • MergeArray结
    果:<Bye,1><Bye,1><Bye,1><Hadoop,1><Hadoop,1><Hadoop,1><Hadoop,1><Hello,1><Hello,1><Hello,1><World,1><World,1>
    排序完成

3.代码实例:
package cn.opensv.hadoop.ch1;

import java.io.IOException;
import java.util.StringTokenizer;

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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

/**
* Hello world!
*
*/
public class WordCount1 {
        public static class Map extends        Mapper<LongWritable, Text, Text, LongWritable> {
       
                private final static LongWritable one = new LongWritable(1);
                private Text word = new Text();

@Override
                public void map(LongWritable key, Text value, Context context)
                                throws IOException, InterruptedException {
                        String line = value.toString();
                        StringTokenizer tokenizer = new StringTokenizer(line);
                        while (tokenizer.hasMoreTokens()) {
                                word.set(tokenizer.nextToken());
                                context.write(word, one);
                        }
                }
        }

public static class Reduce extends Reducer<Text, LongWritable, Text, LongWritable> {
                @Override
                public void reduce(Text key, Iterable<LongWritable> values, Context context)
                                throws IOException, InterruptedException {
                        long sum = 0;
                        for (LongWritable val : values)  {
                                sum += val.get();
                        }
                        context.write(key, new LongWritable(sum));
                }
        }

public static void main(String[] args) throws Exception {
       
                Configuration cfg = new Configuration();
                 Job job = new Job(cfg);         
                 job.setJarByClass(WordCount1.class);

job.setJobName("wordcount1"); // 设置一个用户定义的job名称
               
                job.setOutputKeyClass(Text.class); // 为job的输出数据设置Key类
                job.setOutputValueClass(LongWritable.class); // 为job输出设置value类
                job.setMapperClass(Map.class); // 为job设置Mapper类
                job.setCombinerClass(Reduce.class); // 为job设置Combiner类
                job.setReducerClass(Reduce.class); // 为job设置Reduce类

FileInputFormat.setInputPaths(job, new Path(args[0]));
                FileOutputFormat.setOutputPath(job, new Path(args[1]));
                job.waitForCompletion(true);
        }

}

图解MapReduceMapReduce整体流程图的更多相关文章

  1. FFplay源代码分析:整体流程图(仅供参考)

  2. 敏捷测试(8)--ATDD整体研发流程

    ATDD整体研发流程 有了前面的基于story的敏捷基础,接下来来介绍一下验收测试驱动开发的整个流程. 名词解释: ATD,即验收测试设计(acceptancetest design) PM,即需求整 ...

  3. 图解Go语言内存分配

    目录 基础概念 内存管理单元 内存管理组件 mcache mcentral mheap 内存分配流程 总结 参考资料 Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理. ...

  4. Mybatis技术原理理——整体流程理解

    前言:2018年,是最杂乱的一年!所以你看我的博客,是不是很空! 网上有很多关于Mybatis原理介绍的博文,这里介绍两篇我个人很推荐的博文 Mybatis3.4.x技术内幕和 MyBaits源码分析 ...

  5. [转帖]图解分布式一致性协议Paxos

    图解分布式一致性协议Paxos https://www.cnblogs.com/hugb/p/8955505.html   Paxos协议/算法是分布式系统中比较重要的协议,它有多重要呢? <分 ...

  6. 图解分布式一致性协议Paxos

    Paxos协议/算法是分布式系统中比较重要的协议,它有多重要呢? <分布式系统的事务处理>: Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法,那就 ...

  7. 64位CreateProcess逆向:(二)0环下参数的整合即创建进程的整体流程

    转载:https://bbs.pediy.com/thread-207683.htm 点击下面进入总目录: 64位Windows创建64位进程逆向分析(总目录) 在上一篇文章中,我们介绍了Create ...

  8. [转]FFMPEG视音频编解码零基础学习方法

    在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...

  9. [总结]FFMPEG视音频编解码零基础学习方法--转

    ffmpeg编解码学习   目录(?)[-] ffmpeg程序的使用ffmpegexeffplayexeffprobeexe 1 ffmpegexe 2 ffplayexe 3 ffprobeexe ...

随机推荐

  1. hibernate 用hql做中文排序

    用Hibernate+MySQL的童鞋是不是非常苦恼为什么MySQL不支持中文排序呢?没办法.仅仅有等utf8_unicode_cn 出来了.假设用hibernate即想实现跨库,又想不改代码怎样实现 ...

  2. [CSAPP笔记][第一章计算机系统漫游]

    计算机系统漫游 我们通过追踪hello程序的生命周期来开始对系统的学习—–从它被程序员创建,到系统上运行,输出简单的消息,然后终止.我们沿着这个程序的生命周期,简要介绍一些逐步出现的概念,专业术语和组 ...

  3. Centos 7 python升级(2.7.5-》2.7.11)

    1.安装升级GCC yum install gcc* openssl openssl-devel ncurses-devel.x86_64  bzip2-devel sqlite-devel pyth ...

  4. Ext树控件第一次勾选父节点子节点没选中

    项目中同事提出了这样一个bug 问题: 第一次勾选父节点子节点竟然没选中,逆天了啊 初步分析: 可能是之前代码的逻辑错误造成的,随进入调试阶段... 调试中发现该参数为空(原来写代码的也太没素质了), ...

  5. Asp.net文件缓存依赖

    Asp.net文件缓存依赖 using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...

  6. C#验证类 可验证:邮箱,电话,手机,数字,英文,日期,身份证,邮编,网址,IP (转)

    namespace YongFa365.Validator { using System; using System.Text.RegularExpressions; /**//// <summ ...

  7. CString常用操作

    ①.CString 类对象的初始化: CString str; CString str1(_T("abc")); CString str2 = _T("defg" ...

  8. hdu 1042 N!(高精度乘法)

    Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!   Input One N in ...

  9. python中json的操作示例

    先上一段示例 # -*- coding: cp936 -*- import json #构造一个示例数据,并打印成易读样式 j = {} j["userName"]="a ...

  10. php函数、类和对象以及类的封装、继承、类的静态方法、静态属性

    1.函数     php内置函数可以直接使用,如果没有安装php扩展即可     自定义函数 //函数function 函数名 function dump($var = null){ //支出默认参数 ...