一种基于预调度的任务分配方法,首先在主节点接收到子节点的心跳信息时,对该节点的负载进行判断,如果负载较轻则进行任务的预分配。子节点在接收到主节点返回的心跳指令后,如果发现预调度指令则启动预调度线程,并在后台循环判断预调度条件是否满足。如果条件满足则将之前心跳信息中的预调度任务加入待调度任务池,并启动该任务。当该预调度任务执行完成后,关闭该线程。该发明专利技术能够减少原hadoop系统的心跳-分配任务模式中两次心跳之间对资源的浪费。
【技术实现步骤摘要】
一种基于预调度的任务分配方法
本专利技术属于计算机
,具体涉及一种云计算环境下Hadoop在运行过程中的基于预调度的任务分配方法。
技术介绍
Hadoop是由Apache开源组织开发的一个高可靠性和高可扩展性的存储与分布式并行计算平台,最早是作为开源搜索引擎项目Nutch的基础平台而开发的,之后从Nutch项目中独立出来,成为典型的开源云计算平台之一,其核心实现了用于分布式计算的MapReduce计算框架和用于分布式存储的HDFS(HadoopDistributedFileSystem)文件系统。MapReduce计算框架的实现主要包括两部分:Jobtracker和TaskTracker。Jobtracker作为中心节点对子节点TaskTracker进行任务分配,默认情况下每台计算机包含一个TaskTracker进程。Jobtracker和TaskTracker之间通过心跳方式进行通信。TaskTracker会进入一种循环运行状态,向Jobtracker定期发送心跳报告。JobTracker根据TaskTracker当前的负载和资源情况,对其分配任务并通过心跳信息返回。每一个TaskTracker都有固定数量的资源(slot),用以执行任务。TaskTracker在接收到Jobtracker中的任务指令后,会将待调度任务加入TaskLauncher的待执行任务队列,由TaskLauncher按照时间顺序依次执行队列中的任务。从上述流程可以看出,在现有的Hadoop中,Tasktracker需要周期性的通过心跳向Jobtracker索要任务(task)。在这种模式下,即使Tasktracker上出现了空闲资源(slot)时,依然要等这个周期结束时才能通过心跳通知Jobtracker。最坏情况下Tasktracker甚至可能要等待一个心跳周期。而在hadoop的默认设定中,当集群节点数量不超过300时,心跳默认为3秒。当集群数目超过300时,每增加一百台节点,心跳增加1秒。可见,原hadoop系统的心跳-分配任务的模式对资源的浪费是比较严重的。
技术实现思路
本专利技术的目的在于解决由于周期性的心跳通信模式产生的延时,使得子节点上两次心跳间产生的资源无法被及时利用的问题,提出了基于预调度的任务分配方法,通过为子节点预先分配任务以防止其出现资源闲置,从而提高了集群整体的资源利用率和性能。为达到上述目的,本专利技术采用的技术方案如下:1)启动主节点JobTracker,开始主循环并启动IPCHandler监听和处理子节点的心跳信息;2)IPCHandler循环判断是否有子节点发来心跳信息,若没有则返回步骤1);若有心跳信息到来则判断该子节点之前是否执行了预调度任务,若没有执行预调度任务则转步骤3),若执行了预调度任务则查看前次预调度任务是否成功,若失败则记录该失败任务的子节点编号,成功则从预调度任务队列和待调度任务队列删除已完成的任务;3)判断该子节点的负载是否较轻,若该子节点负载较轻,则为其在待调度任务队列中寻找符合下列条件的预调度任务,即当一个任务满足:①该任务处于可运行的状态;②该任务未在此子节点上失败过;③该任务满足数据本地性;这三个条件时,选中该任务并将其加入预调度任务列表,JobTracker将预调度任务和其他待执行任务一起加入心跳信息中,否则,按普通任务指令进行;否则,返回步骤1);4)JobTracker将心跳信息返回子节点。所述的判断该子节点的负载是否较轻,是根据预先分配任务即其数量占总体任务的比例由用户自行配置,默认是5%,同时在当前尚未运行的任务集合中去掉该任务的信息,将其加入预分配任务列表。所述的子节点(TaskTracker)端与主节点(JobTracker)端相关的部件包括以下几个部分:1)主节点(JobTracker)端相关的部件为IPCHandler,用于处理子节点的心跳请求和任务预分配流程;2)子节点(TaskTracker)端的部件为:①TaskLauncher:即任务执行部件,其从待执行任务队列(TaskQueue)中取出待执行任务,放入相应的资源槽(slot)中执行该任务;②TaskPreScheduler:即预调度线程,负责在满足预调度的条件下,将预先存储在预调度任务队列(TaskPreScheduleQueue)中的任务取出,放入待执行队列,执行预调度。所述的子节点(TaskTracker)从主节点(JobTracker)接收到心跳信号后,将其中的任务指令存入待执行任务队列(TaskQueue)并通知消费者(TaskLauncher)。TaskLauncher则按照时间顺序依次执行TaskQueue队列中的任务;如果出现了TaskQueue队列为空且此时离下一次心跳周期还有较长时间,系统中又有空闲资源的情况下,会启动预调度线程TaskPreScheduler,将先前预分配的任务放入TaskQueue队列并通知TaskLauncher线程开始工作。所述的子节点TaskTracker接收预分配的任务后按下列步骤进行:1)TaskTracker启动后开始主循环,同时启动任务的执行线程TaskLauncher;2)TaskTracker的主循环接收到主节点返回的心跳信息,该返回的心跳信息中包含着分配的任务指令,如果心跳信息中包含预调度指令则保存该预调度任务,启动预调度线程TaskPreScheduler,并对TaskPreScheduler进行计时,如果超时,将预调度失败结果存入心跳信息后执行步骤5),否则继续执行步骤3);3)TaskPreScheduler会持续的判断当前是否满足如下条件:①TaskLauncher的待执行任务池是否为空;②此时距离下一次心跳开始的时间是否足够长;③当前是否有空闲资源;如果条件均满足则TaskPreScheduler就会将先前保存的预调度任务加入TaskLauncher的待执行任务池中并通知TaskLauncher开始执行;否则返回TaskTracker主循环;4)当该任务完成后,TaskTracker销毁TaskPreScheduler线程,保存任务的执行结果;5)TaskTracker通过心跳信息通知JobTracker,预调度流程结束。主节点(JobTracker)接收到子节点(TaskTracker)发出的心跳信息(心跳信息中包含子节点的负载等信息)后,对负载较轻的子节点,预先分配任务(其数量占总体任务的比例可由用户自行配置,默认是5%),同时在当前尚未运行的任务集合中去掉该任务的信息,将其加入预分配任务列表。子节点(TaskTracker)收到主节点返回的心跳信息(返回的心跳信息中包含着分配的任务指令)后,将其存入任务池,而后为每个预先分配的任务寻找合适的时机进行执行并将结果返回主节点。如果在限定时间内还未执行,则该任务的预调度过程失败,并通过心跳将结果返回主节点。JobTracker收到心跳后,如果是已完成预调度,则在预调度任务队列中删除该任务,否则重新寻找适合预调度的节点和任务。本专利技术的有益效果是:针对Hadoop原模型中心跳周期使得两次心跳间资源无法及时利用的问题,通过提前给子节点分配任务,使得子节点在本文档来自技高网...
【技术保护点】
一种基于预调度的任务分配方法,其特征包括以下步骤:1)启动主节点Job?Tracker,开始主循环并启动IPC?Handler监听和处理子节点的心跳信息;2)IPC?Handler循环判断是否有子节点发来心跳信息,若没有则返回步骤1);若有心跳信息到来则判断该子节点之前是否执行了预调度任务,若没有执行预调度任务则转步骤3),若执行了预调度任务则查看前次预调度任务是否成功,若失败则记录该失败任务的子节点编号,成功则从预调度任务队列和待调度任务队列删除已完成的任务;3)判断该子节点的负载是否较轻,若该子节点负载较轻,则为其在待调度任务队列中寻找符合下列条件的预调度任务,即当一个任务满足:①该任务处于可运行的状态;②该任务未在此子节点上失败过;③该任务满足数据本地性;这三个条件时,选中该任务并将其加入预调度任务列表,Job?Tracker将预调度任务和其他待执行任务一起加入心跳信息中,否则,按普通任务指令进行;否则,返回步骤1);4)Job?Tracker将心跳信息返回子节点。
【技术特征摘要】
1.一种基于预调度的任务分配方法,其特征包括以下步骤:1)启动主节点JobTracker,开始主循环并启动IPCHandler监听和处理子节点的心跳信息;2)IPCHandler循环判断是否有子节点发来心跳信息,若没有则返回步骤1);若有心跳信息到来则判断该子节点之前是否执行了预调度任务,若没有执行预调度任务则转步骤3),若执行了预调度任务则查看前次预调度任务是否成功,若失败则记录该失败任务的子节点编号,成功则从预调度任务队列和待调度任务队列删除已完成的任务;3)判断该子节点的负载是否较轻,若该子节点负载较轻,则为其在待调度任务队列中寻找符合下列条件的预调度任务,即当一个任务满足:①该任务处于可运行的状态;②该任务未在此子节点上失败过;③该任务满足数据本地性;这三个条件时,选中该任务并将其加入预调度任务列表,JobTracker将预调度任务和其他待执行任务一起加入心跳信息中,否则,按普通任务指令进行;否则,返回步骤1);4)JobTracker将心跳信息返回子节点;所述的子节点TaskTracker接收预分配的任务后按下列步骤进行:1)TaskTracker启动后开始主循环,同时启动任务的执行线程TaskLauncher;2)TaskTracker的主循环接收到主节点返回的心跳信息,该返回的心跳信息中包含着分配的任务指令,如果心跳信息中包含预调度指令则保存该预调度任务,启动预调度线程TaskPreScheduler,并对TaskPreScheduler进行计时,如果超时,将预调度失败结果存入心跳信息后执行步骤5),否则继续执行步骤3);3)TaskPreScheduler会持续的判断当前是否满足如下条件:①TaskLauncher的待执行任务队列是否为空;②此时距离下一次心跳开始的时间是否足够长;③当前是否有空闲资源;如果条件均满足则TaskPreScheduler就会将先前保存的预调度任务加入TaskLauncher的待执行任务队列中...
【专利技术属性】
技术研发人员:董小社,刘强,朱正东,陈衡,
申请(专利权)人:西安交通大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。