java程序员的大数据之路(8):MapReduce的工作机制
2017-09-26 15:35
621 查看
概述
Hadoop运行作业时的整个过程如果所示。包含如下4个独立的实体。
客户端:提交MapReduce作业。
jobtracker:协调作业的运行。它的主类是JobTracker。
tasktracker:运行作业划分后的任务。它的主类是TaskTracker。
分布式文件系统(一般为HDFS):用来在其他实体间共享作业文件。
作业的提交
JobClient的runJob()方法是用于新建JobClient实例并调用submitJob()方法的便捷方式。提交作业后,runJob()每秒轮询作业的进度,如果发现自上次报告后有改变,便把进度报告到控制台。作业完成后,如果成功,就显示作业计数器;如果失败,打印错误信息。submitJob()方法的执行过程
向jobtracker请求一个新的作业ID检查作业的输出说明。例如,如果输出目录已存在,则不提交作业,并将错误返回给MapReduce程序。
计算作业的输入分片
将运行作业所需要的资源复制到jobtracker文件系统中,以作业ID命名的目录下
告知jobtracker作业准备执行
作业的初始化
jobtracker接收到作业准备执行的信息后,交由作业调度器负责调度,并进行初始化(创建正在运行的作业的对象用来封装任务和记录信息)。为了创建任务列表,作业调度器首先获取JobClient已经计算好的输入分片信息,然后为每一个分片创建一个map任务。创建reduce任务的数量由mapred.reduce.task属性决定任务的分配
tasktracker会定期发送heartbeat给jobtracker,并通过heartbeat告知jobtracker它是否准备好运行新任务。对于map任务和reduce任务,tasktracker有固定数量的任务槽。默认调度器在处理reduce任务槽之前,会填满空闲的map任务槽。对于一个map任务,jobtracker会考虑数据本地化(理想情况下),当然也有可能是机架本地化。
任务的执行
任务执行过程1. 首先将作业所需要的JAR文件复制到tasktracker,同时,tasktracker将应用程序所需要的全部文件从分布式缓存复制到本地磁盘。
2. tasktracker为任务新建一个本地工作目录,把JAR文件中的内容解压到这个目录下
3. tasktracker新建一个TaskRunner实例来运行该任务
作业的完成
当jobtracker收到作业最后一个任务已完成的通知后,便把作业的状态设置为成功。在JobClient查询状态时,便知道任务已成功完成,于是JobClient打印一条消息告知用户,然后从runJob()方法返回。最后,jobtracker清空作业的工作状态,指示tasktracker也清空作业的工作状态。
相关文章推荐
- java程序员的大数据之路(9):MapReduce的类型
- java程序员的大数据之路(10):MapReduce的排序
- java程序员的大数据之路(11):MapReduce的连接
- java程序员的大数据之路(7):基于文件的数据结构
- 工作三年的java程序员修行之路
- java程序员的大数据之路(5):HDFS压缩与解压缩
- java程序员的大数据之路(16):Hive简介
- 大数据之路-Hadoop-5-HDFS原理解析及NameNode、DataNode工作机制
- java程序员工作三年的修行之路
- java程序员的大数据之路(6):定制的Writable类型
- 工作三年的java程序员修行之路
- bug笔记 - Java --- 网络编程使用BufferedInputStream从缓冲区中读不到数据(浅析BufferedInputStram和BufferedOutputStream的工作机制)
- java程序员的大数据之路(4):编程调用HDFS
- java程序员的大数据之路(13):Pig入门
- java程序员的大数据之路(15):Pig Latin用户自定义函数
- java程序员的大数据之路(12):Hadoop的守护进程
- java程序员的python之路(数据类型)
- 用Java的加密机制来保护你的数据
- 用Java的加密机制来保护你的数据
- 转: 用”堆栈区数据复制”理解Java赋值和参数传递机制的心得