zoukankan      html  css  js  c++  java
  • Hadoop MapReduce基本原理

    一、什么是:

      MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

      源于Google MapReduce论文(04年)。

      Master - Slave 模式。

      MapReduce的核心是:分而治之,并行处理;以及其调度和处理数据的自动化。 

      Hadoop中MR的主要内容:

        hadoop序列化writable接口,数据类型

        应用开发 (debug 单元测试)解决基本数据处理,作业调优

        工作机制  作业提交流程,作业调度,shuffle与排序

        MR类型 输入输出类型

        特性:二次排序(全排、部分排),join

        压缩算法

    二、基本流程:

    1、MR中主要是Map和Reduce两个阶段,其中基本流程是:

      1、mr的数据处理单位是一个split,一个split对应一个map任务,处理时会有多个map任务同时运行;当map从HDFS上读取一个split时,这里会有“移动计算,不移动数据”的机制来减少网络的数据传输,使得效率能最大化;

      2、获取到split时,默认会以TextInputFormat的格式读入,文件中的字符位置的偏移量作为 key,以及每一行的数据作为 value;

      3、之后则进入map函数中进行处理,这个阶段可以获取需要的数据并加以处理,并以key value的形式写出,作为后面reduce函数的输入;

      4、map到reduce之间会有一个shuffle的过程,大致过程是把不同key利用partitioner分散到各个reduce节点上去;

      5、在reduce上会先通过 比较排序(前面shuffl会有预排序) 进行文件的归并,之后进入reduce函数,在每个reduce函数中key是唯一的,对应的value则是一个 Iterable接口类型,通过Iterable可以遍历所有当前key对应的所有value;

      6、之后在reduce中对数据进行处理后,利用OutputFormat对处理后的key value保存到HDFS上即完成了整个流程。

      注:一个split的大小计算:max( minimumSize, min( maximumSize, blockSize ));

                通常 blockSize 在 minimumSize和maximumSize之间,所以一般分片大小就是块大小。

    2、流程图:

      

    3、编程中可定制的类:

      InputFormat —> Mapper —> Partitioner (HashPartitioner) —> Combiner —> Reducer —> OutputFormat

    4、shuffle过程:map输出 到 reduce获取数据的过程。

     
      Map端:
        map输出 -> 写入内存缓冲区,考虑效率进行预排序 ->
        a. 达到缓冲区阈值(0.8),一个线程便开始把内容溢出到磁盘。在溢出到磁盘的过程中,map输出继续写到缓冲区,若此期间缓冲区被填满,map将被阻塞直到写磁盘过程完成。
        b. 每当达到缓冲区阈值时,就会新建一个溢出文件(spill file);因此在任务完成前,会有几个溢出文件,并最终合并成一个已分区且已排序的输出文件。
        c.在写入磁盘之前,线程首先根据reduce把数据划分成相应的分区(partition)。在每个分区中,会按键进行排序,如果有combiner,它就在排序后运行。combiner使得map输出更紧凑,可减少写到磁盘和传到reduce的数据。
     
        如果存在至少3个溢出文件,则combiner会在溢出文件合并前再次运行。如果低于3个则不会运行,因为不值得调用。
     
      Reduce端:
        map的输出存储在运行map任务的tasktracker的节点磁盘上。
     
        获取数据 -> 排序合并 -> reduce
        每个map节点运行时间不一样,只要有一个节点完成,reduce任务就会开始获取其输出。reduce任务有少量并行线程可同时获取map端数据。
        若map端输出很小,则数据会被复制到redeuce任务的JVM内存中。若大于一个指定阈值,则获取的数据会合并后存储到本地磁盘中,合并阶段会维持原map输出的键顺序。或指定有combiner,则会在合并期间运行以降低写入磁盘数据量。
        在redece阶段,会对已排序输出中的每键调用reduce函数,些阶段的输出直接写到HDFS上。
     
      combiner运行3次:分区内、溢出文件大于3、reduce合并文件
      排序运行2次:分区中预排序、reduce排序
      

    三、优缺点:

      优点:

          1. 易于编程
          2. 良好的扩展性,增加机器来扩展计算能力
          3. 高容错性
          4. 适合PB级以上海量数据离线处理。
     
      缺点:
          1. 实时计算
          2. 流式计算
          3. DAG有向图计算
     
      应用:网站pv uv统计,搜索引擎索引,海量数据查找与统计,复杂数据分析算法实现。

      

  • 相关阅读:
    mdx中nonempty 和 non empty的区别
    shrink log和查询数据库 backup,restore,shrink 进度 和 还原历史 的sql (for sqlserver)re
    方差分析 概述
    从 高斯 到 正态分布 到 Z分布 到 t分布
    数据集市 数据仓库 Immon Kimball模型的概念说明
    【React Native 实战】微信登录
    【React Native 实战】商品分类
    一步步学习PHP笔记(李炎恢瓢城web俱乐部-多用户留言系统)01
    wampserver下打开phpMyAdmin出现403错误的问题解决方法
    windows 支持curl命令
  • 原文地址:https://www.cnblogs.com/mzzcy/p/7078346.html
Copyright © 2011-2022 走看看