美文网首页
★MapReduce

★MapReduce

作者: elrah | 来源:发表于2017-08-14 21:47 被阅读0次

    1.MapReduce是什么?

    --Hadoop MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。

    2.MapReduce的特点:

       软件框架

       并行处理

       可靠且容错

      大规模集群

       海量数据集

    3.MapReduce的思想:“分而治之”

    (1)Mapper负责“分”

    把简单的任务分解为若干个“简单的任务”来处理:

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

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

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

    (2)Reduce负责对map阶段的结果进行汇总

    至于需要多少个Reducer,可以根据具体问题,通过在mapred-site.xml配置文件里设置参数mapred.reduce.tasks的值,缺省值为1。

    4.MapReduce工作机制

    MapReduce工作机制 MapReduce运行机制 MapReduce作业工作流程图

    ★★作业执行涉及4个独立的实体:★★

    (1)客户端,用来提交MapReduce的作业

    (编写MapReduce程序,配置作业,提交作业,这就是程序员完成的工作)

    (2)JobTracker,用来协调作业的运行

    (初始化作业,分配作业,与TaskTracker通信,协调整个作业的执行)

    (3)TaskTracker,用来处理作业划分后的任务

    (保持与JobTracker的通信,在分配的数据片段上执行Map或Reduce任务。)

    (4)HDFS,用来在其他实体间共享作业文件

    (保存作业的数据、配置信息等等,最后结果也是保存在hdfs上面)

    JobTracker VS TaskTracker:

    JobTracker只能有一个,就和hdfs里的namenode一样存在单点故障;

    TaskTracker可以有多个

    5.mapreduce运行步骤

         在hadoop中,一个mapreduce作业会把输入的数据集分为若干独立的数据块,由Map任务以完全并行地方式处理。

    框架会对Map的输出先进行排序,然后把结果输入给Reduce任务。

    作业的输入和输出都会被存储在文件系统中,整个框架负责任务的调度和监控,以及重新执行已经关闭的任务。

    MapReduce框架和分布式文件系统是运行在一组相同的节点,计算节点和存储节点都是在一起的。

         详细步骤:

    首先是客户端要编写好mapreduce程序,配置好mapreduce的作业也就是job,

    接下来就是提交job了,提交job是提交到JobTracker上的,这个时候JobTracker就会构建这个job,具体就是分配一个新的job任务的ID值

    接下来它会做检查操作,这个检查就是确定输出目录是否存在,如果存在那么job就不能正常运行下去,JobTracker会抛出错误给客户端,接下来还要检查输入目录是否存在,如果不存在同样抛出错误,如果存在JobTracker会根据输入计算输入分片(Input Split),如果分片计算不出来也会抛出错误,这些都做好了JobTracker就会配置Job需要的资源了。

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

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

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

    任务分配好后就是执行任务了。在任务执行时候jobtracker可以通过心跳机制监控tasktracker的状态和进度,同时也能计算出整个job的状态和进度,而tasktracker也可以本地监控自己的状态和进度。当jobtracker获得了最后一个完成指定任务的tasktracker操作成功的通知时候,jobtracker会把整个job状态置为成功,然后当客户端查询job运行状态时候(注意:这个是异步操作),客户端会查到job完成的通知的。如果job中途失败,mapreduce也会有相应机制处理,一般而言如果不是程序员程序本身有bug,mapreduce错误处理机制都能保证提交的job能正常完成。

    Job job;

    if(job.waitForComplete(true)?0:1    //等待job的完成

    {

    System.out.println("ok")

    else

    System.out.println("failure")

    }

    6.MapReduce的输入输出

    一个MapReduce作业的输入和输出类型:

    会有三组<key,value>键值对类型的存在

    相关文章

      网友评论

          本文标题:★MapReduce

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