美文网首页
MapReduce-分布式计算引擎

MapReduce-分布式计算引擎

作者: 一个喜欢烧砖的人 | 来源:发表于2018-09-16 15:11 被阅读61次

    MepReduce背景

    • 来源于google的mepreduce克隆版

    mepreduce的特点

    • 易于编程
    • 良好的扩展性
    • 高容错性
    • 适合pb级以上的海量数据的离线处理

    mepreduce应用场景

    • 简单的搜索统计
    • 搜索引擎建立索引(mepreduce的初衷)
    • 海量数据的查找
    • 复杂数据的算法分析(聚类算法、分类算法、推荐算法、图算法等)

    mepreduce的缺点

    • 实时计算
    • 流式计算
    • DAG计算
      多个应用程序存在依赖关系,后一个应用程序的输入为前一个应用程序的输出

    mepreduce的编程模型(基于wordcount)

    image.png
    • input
      输入一大部分文件,什么都有
    • splitting
      分片,任务是把一堆任务切成小文件
      大任务切成小任务
      输入是一堆小文件
    • mapping
      splitting的小文件每片都交给一个map来处理
      输入是一个key-value的键值对
    • shuffling(混洗)
      1、对map后的数据进行混洗
      2、对相同的key进行合并(把key相同的发送给同一个节点)
      3、混洗的依据是key的哈希对reduce的个数的模
      4、取完模后还会进行排序(排序后会使相同的key集中起来,这样以便后续操作)
    • reducer
      对key的value进行统计,就可以输出结果了
      reducer的数量用户自定义
    • result
      结果输出

    mepreduce的作业运行流程-wordcount

    mapreduce将作业的整个运行过程分为两个阶段

    • map阶段
      map阶段由一定数量的map task组成(一个map task可以理解为一个进程)
      1、inputFormat(用户指定)
      2、mapper(用户指定逻辑)
      3、partition(用户指定)
    • reduce阶段
      1、数据远程拷贝
      2、数据按照key排序
      3、数据处理(用户指定)
      4、数据输出格式(用户指定)
      不过map和reduce用户指定 其他的mepreduce有默认设置,可以自己去自定义

    mepeduce的编程模型(数据流向)

    image.png
    • hdfs上的数据根据block为一个块
    • 每个split的数据块交由mapper来处理
    • partition 负责将每个mapper的结果输出到各自的reduce中,partition根据key的hash取reduce数量的模来计算,patition进行分片分开执行并输出本地磁盘,mapper可能在不同的机器上执行,数据输出在本地磁盘,partition还会进行排序(归并排序),mapper阶段完成
    • 接下里就是reduce阶段,
    • reduce开始就先去取各个mapper上的数据,对mapper完成后的partition的数据进行拉取(比如一个mapper机器上同时有好几个partition执行的分片,reduce1只要编号为1的分片)--其实这就是shuffle混洗过程
    • 接下来就开始shuffle排序过程
    • 接下来就是output输出
    • 结束

    mepreduce 优化

    • combiner
      1、其实可以发现在mapper阶段也是可以进行排序来优化的,在mapper输出的时候进行一个局部合并(这个过程称为combiner,通常和reduce的过程是一样的)
      2、合并之后,mapper端的数据量减少,处理起来就会变快
      3、注意combiner的逻辑的可执行型,比如求平均值就不能用,用个数之和就能使用
    • paritioner
      1、parititioner决定了mapper的结果由哪一个reduce处理
      2、这个分区的过程可以自己处理(根据ip,域名都是可以的)

    mepreduce的架构(在yarn基础上)

    image.png

    过程:
    1、client向yarn提交mepreduce任务(直接指向的是resourceManager)
    2、resourceManage找一台空闲的nodeManager,
    3、在这台nodeMenage来启动appMaster
    4、appMaster会向resourceManage申请资源
    5、appMaster申请到资源后会向nodeManager分配任务,并启动起来
    存在问题:

    • appMaster失败
      如果appMaster出现失败,yarn的resourceManage会自动重新启动,启动几次(由用户指定)如果还是失败,则作业启动失败
    • map或者reduce失败
      task周期性的向appMaster定时心跳,一旦挂掉,就会重启,重启固定次数后还是怪调,就会重新申请资源

    相关文章

      网友评论

          本文标题:MapReduce-分布式计算引擎

          本文链接:https://www.haomeiwen.com/subject/bpmxnftx.html