MapReduce-分布式计算引擎

MepReduce背景

  • 来源于google的mepreduce克隆版

mepreduce的特点

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

mepreduce应用场景

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

mepreduce的缺点

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

mepreduce的编程模型(基于wordcount)

《MapReduce-分布式计算引擎》 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的编程模型(数据流向)

《MapReduce-分布式计算引擎》 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基础上)

《MapReduce-分布式计算引擎》 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定时心跳,一旦挂掉,就会重启,重启固定次数后还是怪调,就会重新申请资源
    原文作者:一个喜欢烧砖的人
    原文地址: https://www.jianshu.com/p/9587e994390d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞