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的处理  

  • 相关阅读:
    apache配置
    windows 查看端口号,杀进程
    c/c++ 拷贝控制 右值与const引用
    c/c++ 多线程 多个线程等待同一个线程的一次性事件
    c/c++ 多线程 等待一次性事件 异常处理
    c/c++ 多线程 等待一次性事件 std::promise用法
    c/c++ 多线程 等待一次性事件 packaged_task用法
    c/c++ 多线程 等待一次性事件 future概念
    c/c++ 多线程 利用条件变量实现线程安全的队列
    c/c++ 多线程 一个线程等待某种事件发生
  • 原文地址:https://www.cnblogs.com/seurain/p/3350670.html
Copyright © 2011-2022 走看看