MapReduce

MapReduce特点:

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

MapReduce系统架构图

MapReduce编程模型:

MapReduce守护进程:

MapReduce框架主要有两个守护进程,jobtracker和tasktracker。jobtraker是管理者,taskertracker是被管理者。

jobtracker:

  • 负责接收用户提交的作业,负责启动跟踪任务执行
  • 管理所有作业(job:用户的一个计算请求)
  • 将作业分成一系列任务(task:由job拆分出来的执行单元)进行调度
  • 将任务指派给tasktracker
  • 作业/任务监控,错误处理等

tasktracker:

  • 负责执行由jobtracker分配的任务,管理各个任务在每个节点执行情况
  • 运行MapTask和ReduceTask
  • 与Jobtracker进行交互,执行命令,并汇报任务状态

MapReduce相关概念

MapTask

  • Map引擎
  • 分析每条数据记录,将数据解析传递给用户自定义的map()函数
  • 将map()函数输出写到本地磁盘(如果是map-only情况,直接输出到HDFS中)

ReduceTask

  • Reduce引擎
  • 从MapTask上远程读取输入数据
  • 对数据进行排序
  • 将数据按照分组传递给用户编写的reduce()函数

MapReduce运行流程

  • 1.在客户端启动一个作业
  • 2.客户端向JobTracker请求作业号
  • 3.客户端向HDFS复制作业的资源文件,这些文件包括打包jar文件,配置文件,以及由客户端计算所得到的输入划分信息。这些文件都存在jobtracker专门为这个job创建的一个文件夹中,以JobID命名。输入划分信息告诉JobTracker应该为这个作业启动多少个map任务等信息
  • 4.客户端向JobTracker提交作业,JobTracker接收到作业以后,把它加入到作业队列,然后JobTracker根据自己的调度算法调度到当前作业时,根据输入划分信息,开始为每个划分新建1个task任务,并把task任务分配给tasktracker执行。这里的分配不是随便分配的,而是遵循数据本地化原则的。(数据本地化Data-Local, 就是将map任务分配给拥有该map所要处理数据的DataNode节点,并将jar拷贝到这个节点,这个叫做移动计算,不是移动数据。)
  • 5.TaskTracker每个一段时间向JobTracker发送心跳,告诉他自己仍然在运行。同时心跳中还带着其他的一些信息,比如当前map任务完成的进度。当jobtracker接收到最后一个map任务发来的信息的时候,便把作业设置为"成功", 当jobclient查询时,将成功信息返回给用户。

shuffle过程:

shuffle是洗牌或者弄乱的意思,在MapReduce中是指从map task输出到reduce task输入这段过程。

results matching ""

    No results matching ""