• MapReduce简述、工作流程及新旧API对照


    什么是MapReduce?

    你想数出一摞牌中有多少张黑桃。直观方式是一张一张检查而且数出有多少张是黑桃。
    MapReduce方法则是:
    1. 给在座的全部玩家中分配这摞牌。


    2. 让每一个玩家数自己手中的牌有几张是黑桃,然后把这个数目汇报给你。
    3. 你把全部玩家告诉你的数字加起来,得到最后的结论。

    MapReduce概述

    MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题。

    它的核心设计理念是移动计算。而不是移动数据。

    MapReduce合并了两种经典函数:
    映射( Mapping)对集合里的每一个目标应用同一个操作。即。假设你想把表单里每一个单元格乘以二,那么把这个函数单独地应用在每一个单元格上的操作就属于mapping。
    化简( Reducing )遍历集合中的元素来返回一个综合的结果。

    即。输出表单里一列数字的和这个任务属于reducing。

    MapReduce由两个阶段组成: Map和Reduce,用户仅仅须要实现map()和reduce()两个函数。就可以实现分布式计算。很easy。


    这两个函数的形參是key、 value对,表示函数的输入信息。
    MapReduce在多于10PB数据时趋向于变慢。

    Mapreduce原理

    运行步骤:
    1. map任务处理
    1.1 读取输入文件内容,解析成key、 value对。 对输入文件的每一行,解析成key、value对。每一个键值对调用一次map函数。
    1.2 写自己的逻辑,对输入的key、 value进行处理,转换成新的key、 value输出。


    1.3 对输出的key、 value进行分区。
    1.4 对不同分区的数据,依照key**进行排序、分组**。

    同样key的value放到一个集合中。
    1.5 (可选)分组后的数据进行归约。

    2.reduce任务处理
    2.1 对多个map任务的输出,依照不同的分区,通过网络copy到不同的reduce节点。


    2.2 对多个map任务的输出进行合并、排序。 写reduce函数自己的逻辑。对输入的key、 values处理,转换成新的key、 value输出。
    2.3 把reduce的输出保存到文件里。

    MR工作流程

    1)作业配置

    1、编写Map和Reduce处理函数
    2、配置输入输出路径
    3、其它配置,如输出压缩等

    2)提交作业

    1、向JobTracker请求。getNewJobId()
    2、检查job的相关愉出路径,提交job以及相关的jar到JobTracker,
    相关的libjars是通过distributedCache方式传递到JobTracker。
    3、JobClient计算输入分片。把splitMetainInfo写入JobSplit。


    4、把job.xml配置文件发送到JobTracker。
    5、调用JobSubmissionProtocol的submitjob方法真正去提交作业。

    3)作业初始化

    1、JobTracker接收到Client的submitJob()方法调用后,会把调用放到内部队列中,交由TaskScheduler调度。
    2、创建一个代表正在运行作业的对象JoblnProgress。
    3、JoblnProgress的initTasks()方法的初始化工作:
    A.读取作业的分片信息
    B.创建Map任务与Reduce任务,为每一个Map Task和Reduce Task生成TasklnProgress对象。
    C.reduce的数最由mapred.reduce.tasks属性决定。而map的数量是由输入分片的个数决定的。

    4、任务分配

    1、JobTracker与TaskTracker之间的通信与任务分配是通过心跳机制完毕的。
    2、TaskTracker会主动向JobTracker询问是否有作业。假设自己有空暇的slot,就能够在心跳阶段得到JobTracker发送过来的Map任务或Reduce任务。
    3、TaskTracker->transmitHeatBeat。
    4、拷贝全部信息到本地(代码。配置信息。数据分片)。

    5、任务运行

    申请到任务后,TaskTracker须要做例如以下事情:
    1、拷贝代码到本地。
    2)拷贝任务信息到本地。
    3)启动JVM运行任务。
    A.代码能够查看 TaskTracker->startNewTask->localizeJob。然后调用launchTaskForJob启动taskrunner去运行task。
    B.TaskRunner分为MapTaskRunner和ReduceTaskRunner。

    6、进度和状态更新

    1、Task在运行过程中.把自己的状态发送给TaskTracker。由TaskTracker再汇报给JobTracker。
    2、任务进度是通过计数器实现的。

    7、作业完毕

    1、JobTracker在接收到最后一个任务完毕后,才会将任务标志成成功状态。


    2、同一时候会运行把中间结果后删除等操作。

    Hadoop2.6.0源代码作业提交流程

    MapReduce新旧API对照

    1、新的API倾向于使用抽象类,而不是接口。由于这更easy扩展,能够加入一个方法(用默认的实现)到一个抽象类,而不需改动类之前的实现方法。在新的API中,Mapper和Reducer都是抽象类。

    2、新的API是在org.apache.hadoop.mapreduce包(和子包)中的。之前版本号的API则是放在org.apache.hadcop.mapred中的。

    3、新的API广泛使用context.object(上下文对象),并同意用户代码与MapReduce系统进行通信。比如,MapContext基本上充当着JobConf的OutputCollector和Reporter的角色

    4、新的API统一了配置

    的API有一个特殊的JobConf对象用于作业配置,这是一个对于Hadoop通常的Configuration对象的扩展。在新的API中,这样的差别没有了。全部作业配置通过Configuration来完毕。作业控制的运行由Job类来负责。而不是JobClient。它在新的API中已经荡然无存。

  • 相关阅读:
    移动端a标签点击图片有阴影处理
    sublime vue 语法高亮插件安装
    mongodb 命令
    MongoDB给数据库创建用户
    windows32位系统 安装MongoDB
    ES6之主要知识点(十)Proxy
    ES6之主要知识点(九)Set和Map
    ES6之主要知识点(八)Symbol
    ES6之主要知识点(七)对象
    Ueditor 1.4.3 插入表格后无边框无颜色,不能正常显示
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7168660.html
Copyright © 2020-2023  润新知