MapReduce原理与机制


前言

MapReduce·不仅是一个简单而强大的接口,而是包含了一系列并行处理、容错处理、本地化运算和负载均衡等技术的让进实现,提供了一个完整的大尺度并行运行环境。其中Map处理的一个数据列,进行处理获得中间结果。Reduce是对Map处理过的数据,在进行一次处理。

一、MapReduce原理与机制

1. 机制

主要有两个特殊的工作节点,一类是工作节点(Worker),用于执行Map或Reduce任务,一类是主控程序(Master),用于将Map和Reduce分配到合适工作机上。

2.原理

  1. 用户程序中的MapReduce库将输入的数据文件分为M个片段,每个片段的大小在16~64MB,然后在计算机集群上启动很多程序副本。
  2. 其中的一个程序副本被指定为主控程序,其余的为工作机。主控程序指定M个空闲工作机运行Map任务,R个空闲的工作机运行Reduce任务。
  3. 被指定的Map工作机从对应的输入文件片段中读取需要处理的数据集,并进行处理获取得中间结果。
  4. Map工作机产生的中间结果先被缓存在内存中,并定期写入每个Map工作的本地硬盘。写入本地硬盘的中间结果通过分区函数被分为R个分区,并且中间结果在本地硬盘的位置信息会发送到主控程序,由主控程序通知Reduce。
  5. 当Reduce工作机收到主控程序发来的中间结果位置信息后,通过远程处理请求将位于Map工作机本地硬盘数据读取到Reduce工作机中,以准备进行相应的处理。
  6. Reduce工作机在读取到所需要的全部中间数据后,对数据进行操作,并按照指定的Reduce函数进行处理,结果被输出到一个最终的输出文件中。
  7. 在所有的Map和Reduce任务执行完成后,主控程序将激活用户程序,用户程序的执行回到MapReduce请求的发生点。

二、MapReduce组件

  1. JobClient: JobClient是基于MapReduce接口库编写的客户端程序,负责提交MapReduce作业。
  2. JobTracker:JobTracker是应用与MapReduce模块之间的控制协调者,它负责协调MapReduce作业的执行,当一个MapReduce作业提交到集群中,JobTrack负责确定后续执行计划,包括需要处理哪些文件、分配任务的Map和Reduce执行节点、监控任务的执行、重新分配失败的任务等。每个Hadoop集群中只有一个JobTracker。
  3. TaskTracker:TaskTracker·负责执行由JobTracker分配的任务,每个TaskTracker可以启动一个或多个Map或Reduce任务。同时,TaskTracker与JobTracker间通过心跳(HeartBeat)机制保持通信,以维护整个集群的运行状态。
  4. MapTask、ReduceTask:MapTask和ReduceTask是由TaskTracker启动的负责具体执行Map任务和Reduce任务的程序。

以上这些组件协同工作执行一个分布式并行数据技术任务流程如下

  1. MapReduce程序启动一个JobClient实例以开启整个MapReduce作业(Job)。
  2. JobClient通过getNewJobId()j接口想JobTracker发出请求,以获得一个新的作业ID。
  3. JobClient根据作业流请求指定的输入文件计算数据模块的划分,并将完成作业需要的资源,包括JAR文件、配置信息、数据块、存放到HDFS中属于JobTracker·的以作业ID命名的目录下,一些文件(例如JAR文件)可能会以冗余备份的形式存放在多个节点上。
  4. 完成上述准备工作后,JobClient通过调用JobTracker·的submitJob()接口提交此作业。
  5. JobTracker将提交作业的作业放到一个作业队列中等待进行作业调度以完成作业初始化工作。作业初始化主要是创建一个代表此作业的运行对象。作业运行对象中封装了作业包含的任务和任务运行状态记录信息用于后续跟踪相关任务和执行进度。
  6. JobTracker还需要从HDFS文件系统中取出JobClient放好的输入数据,并根据输入数据创建对应数量的Map任务。同时,根据JobConfig配置文件中定义的数量生成Reduce任务。
  7. 在TaskTracker和JobTracker间通过心跳机制维持通信,TaskTracker发送的心跳信息中包含了当前是否可执行新任务的信息,根据这个信息,JobTracker将Map任务和Reduce任务分配到空闲的TaskTracker节点。
  8. 被分配了任务的TaskTracker从HDFS文件系统中取出所需的文件,包括JAR程序文件和任务对应的数据文件,并存入本地磁盘,并启动一个TaskRunner程序示例准备运行任务。
  9. TaskRunner在一个新的Java虚拟机中根据任务类型创建出MapTask或ReduceTask进行运算。在新的Java虚拟机中运行MapTask和ReduceTask的原因是避免这些任务的运行异常会影响TaskTracker的正常运行。MapTask和ReduceTask会定时与TaskRunner进行通信报告进度,直到任务完成。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值