Jobtracker向Tasktracker下发命令
来源:互联网 发布:angularjs 2.0不用node 编辑:程序博客网 时间:2024/06/15 02:02
在Jobtracker更新状态以后,Jobtracker要为Tasktracker构造一个HeartbeatResponse对象作为心跳应答,该对象主要有2个部分内容:下达给Tasktracker的命令和下次心跳的时间**下达命令**Jobtracker将下达给Tasktracker的命令封装成TasktrackerAction类,主要包括了ReinitTrackerAction(重新初始化)、LaunchTaskAction(运行新任务)、KillTaskAction(杀死任务)、KillJobAction(杀死作业)、CommitTaskAction(提交任务)五种。ReinitTrackerAction:Jobtracker接到Tasktracker发送过来的心跳信息后,首先要进行一致性检查。如果发现异常情况,则会要求Tasktracker重新对自己进行初始化,已恢复到一致性的状态。当出现下面2中不一致情况时,Jobtracker会向Tasktracker下达ReinitTrackerAction命令 1、丢失上次心跳应答信息:Jobtracker会保存向每个Tasktracker发送的最近心跳应答信息,如果Jobtracker未刚刚重启且一个Tasktracker并非初次连接Jobtracker(initialContact!=true)而最近心跳应答丢失了, 2、丢失Tasktracker状态信息:jobTracker接收到任何一个心跳信息后,会将Tasktracker状态(封装在类TaskTrackerStatus中)信息保存起来,如果一个Tasktracker非初次连接Jobtracker但状态信息却不存在, LaunchTaskAction:该类封装了Tasktracker新分配的任务,Tasktracker接收到该命令后会启动一个子进程运行该任务,Hadoop将一个作业分解后的任务分成2大类:计算型任务和辅助型任务,其中,计算型任务是处理实际数据的任务,包括Map Task和Reduce Task2种(对应的TaskType类中的MAP和REDUCE2种类型),由专门的任务调度器对它们进行调度,而辅助型任务则不会处理实际的数据,通常用户同步计算型任务或者清理磁盘上无用的目录,包括job-setup task、job-cleanup task、和task-cleanup task三种(对应的ActionType是JOB_SETUP JOB_CLEANUP TASK_CLEANUP),其中job-setup task 和job-cleanup task 分别用作计算型任务开始运行同步标识和结束运行同步标识,而task-cleanup task 则用于清理失败计算型任务已经写到磁盘的部分结果,这种任务由Jobtracker负责调度,运行优先级高于计算型任务。 如果一个正常的Tasktracker尚有空闲的slot(acceptNewTasks=true),则Jobtracker会为该Tasktracker分配新任务,任务顺序是先辅助型任务在计算型任务,选择顺序依次为job-cleanup task 、task-cleanup task 、job-setup task .//优先选择辅助型任务,选择优先级从高到低依次是 job-cleanup task 、task-cleanup task 、job-setup task这样可以要完成了的作业快速结束,提交的的作业立刻进入运行状态
List tasks = getSetupAndCleanupTasks(taskTrackerStatus); if (tasks == null ) { tasks = taskScheduler.assignTasks(taskTrackers.get(trackerName)); }//如果没有辅助型任务,则选择计算型任务,由任务调度器选择一个或者多个计算型任务 if (tasks != null) { for (Task task : tasks) { expireLaunchingTasks.addNewTask(task.getTaskID()); if(LOG.isDebugEnabled()) { LOG.debug(trackerName + " -> LaunchTask: " + task.getTaskID()); }/将分配的任务封装成LaunchTaskAction对象 actions.add(new LaunchTaskAction(task)); } }
KillTaskAction:该类封装了Tasktracker需杀死的任务,Tasktracker收到该命令后杀掉对应任务、清理工作目录和释放slot,导致Jobtracker向Tasktracker发送该命令的原因有很多主要:1、用户使用 hadoop job -kill-task 或者 hadoop job -fail-task 杀死一个任务或者使一个任务失败2、启用了推测执行机制后,同一份数据可能同时由2个task attempt 处理,当其中一个task attempt执行成功后,另一个处理相同数据的task attempt将会被杀掉3、某个作业运行失败,它的其他任务将被杀掉4、Tasktracker在一定时间内未汇报心跳,则Jobtracker认为其死掉,它上面所有task均标注为死亡
KillJobAction:该类封装了Tasktracker待清理的作业,tasktracker接收到该命令后,会清理作业的临时目录,导致Jobtracker向Tasktracker发送该命令的原因很多
1、用户使用 hadoop job -kill 或者hadoop job -fail杀死一个作业或者使一个作业失败2、作业完成,通知Tasktracker清理该作业的工作目录3、作业运行失败,即同一个作业失败的task数目超过一定比例CommitTaskAction:该类封装了Tasktracker需要提交的任务。为了防止同一个TaskInProcess的2个同时运行的Task Attempt同时打开一个文件或者往一个文件中写数据而产生冲突,Hadoop让每个Task Attempt 写到单独一个文件中(以TaskAttemptID命名,比如attempt_201606092312_0008_r_000000_0)中,通常而言,hadoop让每个Task Attempt将计算结果写到临时目录${mapred.output.dir}/temporary/_${taskid}中,当某个task Attempt成功运行完成,再将运算结果转移到最终目录${mapred.output.dir}中,hadoop将一个成功运行完成的task Attempt结果文件从临时目录"提升"至最终目录的过程,称为“提交任务”。当TaskInProgress中一个任务被提交后,其他任务将会被杀死,同时意味着该TaskInProgress运行完成调整心跳间隔 Tasktracker心跳时间间隔大小应该适度,如果太小,则Jobtracker需要处理高并发的心跳连接请求,必然产生不小的并发压力,如果太大,空闲的资源不能及时汇报给Jobtracker(进而个tasktracker分配任务),造成资源浪费,进而降低了系统的吞吐率。Tasktracker汇报心跳的时间间隔并不是一成不变的,它会随着集群的规模的动态调整而变化,以便能够合理利用Jobtracker的并发处理能力,在hadoop mapreduce中,只有Jobtracker知道某一时刻集群的规模,因此由Jobtracker为每个Tasktracker计算下一次汇报心跳的时间间隔,并通过心跳机制告诉Tasktracker。 Jobtracker允许用户通过参数配置心跳的时间间隔加速比,即每增加mapred.heartbeats.in.second(默认是100,最小1)个节点心跳时间间隔增加mapreduce.jobtracker.heartbeats.scaling.factor(默认是1,最小是0.01)秒。同时为了防止用户参数设置不合理而对Jobtracker产生较大的负载,Jobtracker要求心跳时间间隔至少为3秒
public int getNextHeartbeatInterval() { // 获取当前Tasktracker的总数, int clusterSize = getClusterStatus().getTaskTrackers(); //计算新的心跳间隔 int heartbeatInterval = Math.max( (int)(1000 * HEARTBEATS_SCALING_FACTOR * ((double)clusterSize / NUM_HEARTBEATS_IN_SECOND)), HEARTBEAT_INTERVAL_MIN) ; return heartbeatInterval; }
0 0
- Jobtracker向Tasktracker下发命令
- TaskTracker向JobTracker发送心跳时的问题
- JobTracker和TaskTracker
- JobTracker和TaskTracker
- JobTracker和TaskTracker
- JobTracker和TaskTracker概述
- JobTracker,TaskTracker简述
- Hadoop JobTracker和TaskTracker
- hadoop jobtracker与tasktracker
- JobTracker和TaskTracker
- JobTracker和TaskTracker详解
- JobTracker和TaskTracker概述
- JobTracker和TaskTracker
- JobTracker和TaskTracker
- JobTracker和TaskTracker
- JobTracker和TaskTracker概述
- JobTracker和TaskTracker
- taskTracker和jobTracker 启动失败
- 基础知识(一)
- 先插入数据再建立索引与先建立索引再插入数据 的区别
- 高并发量网站解决方案
- 学习整理——Java内存区域划分
- 搜索姿势——谷歌高级搜索
- Jobtracker向Tasktracker下发命令
- Linux下的文件及文件后缀名
- HDU-2024C语言合法标识符
- Ubuntu配置任意版本的apt-get镜像
- 公钥私钥加解密原理
- 基础知识(二)-Servlet
- android 启动页与数据保存
- 算法题:求从n个数组任意选取一个元素的所有组合
- VMware + CentOS 网络设置为NAT模式