zoukankan      html  css  js  c++  java
  • 大数据学习之八——MapReduce工作机制

    1.MapReduce的特点

    软件框架、并行处理、可靠且容错、大规模集群、海量数据集

    2.mapper和reducer

    mapper负责“分”:把复杂的任务分解为若干个“简单的任务”来处理。简单的任务包含三层含义:

    (1)数据或计算的规模相对原任务要大大缩小;

    (2)就近计算原则,任务会分配到存放着所需数据的节点上进行计算;

    (3)这些小任务可以并行计算,彼此间几乎没有依赖关系。

    reducer负责对map阶段的结果进行汇总。

    3.MapReduce的工作机制

    (1)实体间的交互

    如图所示,包含四个独立的实体

    ·客户端:编写mapreduce程序,配置作业,提交作业,这就是程序员完成的工作;

    ·jobtracker:初始化作业,分配作业,与TaskTracker通信,协调整个作业的执行。jbotracker是一个java应用程序,它的主类是JobTracker

    ·tasktracker:保持与JobTracker的通信,在分配的数据片段上执行Map或Reduce任务,TaskTracker和JobTracker的不同有个很重要的方面,就是在执行任务时候TaskTracker可以有n多个,JobTracker则只会有一个。tasktracker是java应用程序,它的主类是TaskTracker

    ·HDFS文件式分布系统:保存作业的数据、配置信息等等,最后的结果也是保存在hdfs上面。用来在其他实体间共享作业文件

    MapReduce的运行步骤:

    A. 首先是客户端要编写好mapreduce程序,配置好mapreduce的作业也就是job, 接下来提交job到JobTracker上,这个时候JobTracker就会构建这个job,具体就是分配一个新的job任务的ID值

    B. 接下来jobtracker检查就是输出目录是否存在,如果存在那么job就不能正常运行下去,JobTracker会抛出错误给客户端;检查输入目录是否存在,如果不存在同样抛出错误.。如果存在JobTracker会根据输入,计算输入分片(Input Split),并配置Job需要的资源。

    C. 分配好资源后,JobTracker初始化作业job,初始化主要做的是将Job放入一个内部的队列,让配置好的作业调度器能调度到这个作业,作业调度器会初始化这个job,初始化就是创建一个正在运行的job对象(封装任务和记录信息),以便JobTracker跟踪job的状态和进程。

    D. 初始化完毕后,作业调度器会获取输入分片信息(input split),每个分片创建一个map任务。

    E. 接下来进行任务分配,tasktracker会运行一个简单的循环机制定期发送心跳给jobtracker,心跳间隔是5秒,程序员可以配置这个时间,心跳就是jobtracker和tasktracker沟通的桥梁,通过心跳,jobtracker可以监控tasktracker是否存活,也可以获取tasktracker处理的状态和问题,同时tasktracker也可以通过心跳里的返回值获取jobtracker给它的操作指令。

    F. 执行任务。在任务执行时候jobtracker可以通过心跳机制监控tasktracker的状态和进度,同时也能计算出整个job的状态和进度,而tasktracker也可以本地监控自己的状态和进度。当jobtracker获得了最后一个完成指定任务的tasktracker操作成功的通知时候,jobtracker会把整个job状态置为成功,然后当客户端查询job运行状态时候,客户端会查到job完成的通知。

    (2)

    在Hadoop中,一个MapReduce作业会把输入的数据集切分为若干独立的数据块,由Map任务以完全并行的方式处理;框架会对Map的输出先进行排序,然后把结果输入给Reduce任务;作业的输入和输出都会被存储在文件系统中,整个框架负责任务的调度和监控,以及重新执行已经关闭的任务;MapReduce框架和分布式文件系统是运行在一组相同的节点,计算节点和存储节点都是在一起的。

    MapReduce作业的处理流程简略图:

    按照时间顺序包括:输入分片(input split)、map阶段、combiner阶段和reduce阶段。

    输入分片(input split):在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务。输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组,输入分片(input split)往往和hdfs的block(块)关系很密切;map阶段:程序员编写map函数,因此map函数效率相对好控制,而且一般map操作都是本地化操作也就是在数据存储节点上进行;Combiner阶段:是一个本地化的reduce操作,它是map运算的后续操作,主要是在map计算出中间文件前做一个简单的合并重复key值的操作;shuffle阶段:将map的输出作为reduce的输入的过程就是shuffle;reduce阶段:和map函数一样也是程序员编写的,最终结果是存储在hdfs上的。 

  • 相关阅读:
    titanium开发教程0107分组和嵌套view
    titanium开发教程0103理解windows和views
    titanium开发教程0202创建按钮
    titanium开发教程0106理解 ZDepth
    titanium开发教程0204创建开关
    titanium开发教程0201监听事件
    Flex更改Image
    R语言中统计数据框中指定字符出现的次数
    linux shell实现将匹配字符行的最后一个字符替换为指定字符
    plink 软件中 updatemap 命令
  • 原文地址:https://www.cnblogs.com/m-study/p/8367067.html
Copyright © 2011-2022 走看看