zoukankan      html  css  js  c++  java
  • MapReduce工作原理(简单实例)

    Map-Reduce框架的运作完全基于<key,value>对,即数据的输入是一批<key,value>对,生成的结果也是一批<key,value>对,只是有时候它们的类型不一样而已Key和value的类由于需要支持被序列化(serialize)操作,所以它们必须要实现Writable接口,而且key的类还必须实现WritableComparable接口,使得可以让框架对数据集的执行排序操作 

    一个Map-Reduce任务的执行过程以及数据输入输出的类型如下所示: 

    (input)<k1,v1> -> map -> <k2,v2> -> combine -> <k2,v2> -> reduce -> <k3,v3>(output) 

    下面通过一个的例子并结合源代码来详细说明这个过程 
    3.1       WordCount示例 

    这也是Hadoop自带的一个例子,目标是统计文本文件中单词的个数 

    假设有如下的两个文本文件来运行WorkCount程序: 

    Hello World Bye World 


    Hello Hadoop GoodBye Hadoop 


    3.2  map数据输入 

    Hadoop针对文本文件缺省使用LineRecordReader类来实现读取,一行一个key/value对,key取偏移量,value为行内容 

    如下是map1的输入数据: 
    Key1 Value1 
    0 Hello World Bye World 

    如下是map2的输入数据: 
    Key1 Value1 
    0 Hello Hadoop GoodBye Hadoop 

    3.3  map输出/combine输入 

    如下是map1的输出结果 
    Key2 Value2 
    Hello 1 
    World 1 
    Bye 1 
    World 1 

    如下是map2的输出结果 
    Key2 Value2 
    Hello 1 
    Hadoop 1 
    GoodBye 1 
    Hadoop 1 
    3.4    combine输出 

    Combiner类实现将相同key的值合并起来,它也是一个Reducer的实现 

    如下是combine1的输出 
    Key2 Value2 
    Hello 1 
    World 2 
    Bye 1 

    如下是combine2的输出 
    Key2 Value2 
    Hello 1 
    Hadoop 2 
    GoodBye 1 
    3.5    reduce输出 

    Reducer类实现将相同key的值合并起来。 

    如下是reduce的输出 
    Key2 Value2 
    Hello 2 
    World 2 
    Bye 1 
    Hadoop 2 
    GoodBye 1 

    即实现了WordCount的处理  

  • 相关阅读:
    FFT学习及简单应用(一点点详细)
    Codeforces 1131 (div 2)
    【NOI2012】魔幻棋盘
    【hdu多校联考第二场】Odd Shops
    【Helvetic Coding Contest 2018】B2. Maximum Control (medium)
    解线性同余方程组
    Math teacher's homework
    【NOIP模拟赛】一道挖掉背景的数学题
    逆向基础-模块隐藏之断链
    解决请求筛选模块被配置为拒绝包含的查询字符串过长的请求
  • 原文地址:https://www.cnblogs.com/seurain/p/3350670.html
Copyright © 2011-2022 走看看