发明内容
本发明实施例提供一种应用于分布式文件系统的任务调度方法和设备,能够准确的将将要处理的数据块预先从HDD中读取到SSD中,提高了缓存的命中率。
本发明第一方面提供一种应用于分布式文件系统的MapReduce任务调度方法,包括:
元数据节点获取待处理的任务对应的数据块的标识,并根据所述数据块的标识获取所述数据块的待读取副本的存储信息;
所述元数据节点根据所述待读取副本的存储信息,向所述待读取副本所在的数据节点发送预取指令,所述预取指令用于指示所述数据节点从所述数据节点的硬盘驱动器中读取所述数据块,并将所述数据块写入所述数据节点的固态硬盘;
所述元数据节点将所述数据块的元数据添加到预取数据成功表,所述预取数据成功表中的任务优先被所述元数据节点调度,在所述元数据节点调度所述待处理的任务时,所述元数据节点根据所述预取数据成功表中保存的所述数据块的元数据从所述数据节点的固态硬盘中读取所述数据块。
结合本发明第一方面,在本发明第一方面的第一种可能的实现方式中,所述元数据节点根据所述数据块的标识获取所述数据块的待读取副本的存储信息,包括:
所述元数据节点根据所述任务对应的数据块的标识,获取所述数据块的副本信息;
所述元数据节点根据所述数据块的副本信息,获取所述数据块的各个副本所在的数据节点的资源使用率,确定资源使用率最低的数据节点;
若所述资源使用率最低的数据节点只有一个,则所述元数据节点将所述资源使用率最低的数据节点上的副本作为所述数据块的待读取副本,并获取所述待读取副本的存储信息;
若所述资源使用率最低的数据节点为多个,则所述元数据节点获取所述各资源使用率最低的数据节点的预取数据块个数,从所述各资源使用率最低的数据节点中选取预取数据块个数最少的数据节点上的副本作为所述数据块的待读取副本,并获取所述待读取副本的存储信息。
结合本发明第一方面的第一种可能的实现方式,在本发明第一方面的第二种可能的实现方式中,所述元数据节点在将所述数据块的元数据添加到预取数据成功表之后,所述方法还包括:
所述元数据节点将所述数据节点的预取计数值加1。
结合本发明第一方面以及第一方面的第一种和第二种可能的实现方式,在本发明第一方面的第三种可能的实现方式中,所述元数据节点获取待处理的任务对应的数据块的标识之前,所述方法还包括:
所述元数据节点接收客户端提交的MapReduce作业;
所述元数据节点将所述MapReduce作业划分为多个待处理的任务。
结合本发明第一方面,在本发明第一方面的第四种可能的实现方式中,所述元数据节点根据所述数据块的标识获取所述数据块的待读取副本之前,所述方法还包括:
所述元数据节点判断所述预取数据成功表中是否包含所述数据块的元数据;
若不包含,则所述元数据节点根据所述数据块的标识获取所述数据块的待读取副本。
本发明第二方面提供一种元数据节点,包括:
获取模块,用于获取待处理的任务对应的数据块的标识,并根据所述数据块的标识获取所述数据块的待读取副本的存储信息;
发送模块,用于根据所述待读取副本的存储信息,向所述待读取副本所在的数据节点发送预取指令,所述预取指令用于指示所述数据节点从所述数据节点的硬盘驱动器中读取所述数据块,并将所述数据块写入所述数据节点的固态硬盘;
处理模块,用于将所述数据块的元数据添加到预取数据成功表,所述预取数据成功表中的任务优先被所述元数据节点调度,在所述元数据节点调度所述待处理的任务时,所述处理模块还用于根据所述预取数据成功表中保存的所述数据块的元数据从所述数据节点的固态硬盘中读取所述数据块。
结合本发明第二方面,在本发明第二方面的第一种可能的实现方式中,所述获取模块具体用于:
根据所述任务对应的数据块的标识,获取所述数据块的副本信息;
根据所述数据块的副本信息,获取所述数据块的各个副本所在的数据节点的资源使用率,确定资源使用率最低的数据节点;
若所述资源使用率最低的数据节点只有一个,则将所述资源使用率最低的数据节点上的副本作为所述数据块的待读取副本,并获取所述待读取副本的存储信息;
若所述资源使用率最低的数据节点为多个,则获取所述各资源使用率最低的数据节点的预取数据块个数,从所述各资源使用率最低的数据节点中选取预取数据块个数最少的数据节点上的副本作为所述数据块的待读取副本,并获取所述待读取副本的存储信息。
结合本发明第二方面的第一种可能的实现方式,在本发明第二方面的第二种可能的实现方式中,所述处理模块还用于:
将所述数据节点的预取计数值加1。
结合本发明第二方面以及第二方面的第一种和第二种可能的实现方式,在本发明第二方面的第三种可能的实现方式中,所述获取模块还用于:
接收客户端提交的MapReduce作业;
将所述MapReduce作业划分为多个待处理的任务。
结合本发明第二方面,在本发明第二方面的第四种可能的实现方式中,所述获取模块还用于:
判断所述预取数据成功表中是否包含所述数据块的元数据;
若不包含,则根据所述数据块的标识获取所述数据块的待读取副本。
本发明实施例的应用于分布式文件系统的MapReduce任务调度方法和设备,元数据节点通过获取待处理的任务对应的数据块的标识,并根据该数据块的标识获取该数据块的待读取副本的存储信息,然后,元数据节点根据该待读取副本的存储信息,向待读取副本所在的数据节点发送预取指令,以将该数据块从该数据节点的HDD中预取到SSD中,在预取成功后,元数据节点将所该数据块的元数据添加到预取数据成功表,后续在调度该待处理的任务时,元数据节点根据该数据块的元数据直接从该数据节点的SSD中读取该数据块。由于从SSD中读取数据的速率比从HDD中读取快的多,从而提到了数据块的读取速率,提高任务的处理效率,从而能够提高整个分布式文件系统的性能。现有技术中,在预取数据时是基于对过去的访问情况估计将来,有一定的粗略性,而本实施例中,由于MapReduce中元数据节点预先知道有哪些待处理的任务,以及这些任务对应的数据块的标识,因此,元数据节点能够准确的将将要处理的数据块预先从HDD中读取到SSD中,提高了缓存的命中率。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的任务调度方法主要应用于分布式文件系统中,图1为一种分布式文件系统的架构示意图,如图1所示,该分布式文件系统包括:元数据节点11和多个数据节点12,元数据管理节点11中存储有元数据,元数据是描述存储在分布式网络系统中的数据及其环境的数据,具体描述了分布式网络系统都存储了哪些数据,这些数据的存储位置、大小、名字空间等信息。元数据管理节点还用于监控数据节点的心跳和维护数据块的副本信息,数据节点用于管理自己节点上存储的数据。通常一个文件会被划分成一个或多个数据块,这些数据块存储在一组数据节点上。为了保证分布式网络存储系统的高可靠性,分布式网络存储系统为每个数据块具有多个副本,多个副本存储在不同的数据节点上。
MapReduce是一个开源的计算框架,主要用于大规模数据集中进行并行运算,非常适合运行在分布式文件系统中。MapReduce框架包括:客户端、作业跟踪器(Jobtracker)和任务跟踪器(TaskTracker),JobTracker对应于分布式文件系统中的元数据节点,TaskTracker对应于分布式文件系统中的数据节点。MapReduce采用主/从结构(Master/Slaver),Master是一个全局管理者,功能包括:作业管理、状态监控和任务调度等,即MapReduce中的JobTracker。Slave:负责任务的执行和任务状态的回报,即MapReduce中的TaskTracker。客户端向JobTracker提交作业(Job),Jobtracker会将作业划分为多个任务(Task)。TaskTracker一直通过远程过程调用协议(RemoteProcedureCallProtocol,简称RPC)向JobTracker发送心跳(heartbeat)询问有没有任务可做,如果有,Jobtracker会派发任务给TaskTracker执行,TaskTracker是实际任务的执行者。
图2为本发明实施例一提供的应用于分布式文件系统的任务调度方法的流程图,如图1所示,本实施例的方法可以包括以下步骤:
步骤101、元数据节点获取待处理的任务对应的数据块的标识,并根据该数据块的标识获取该数据块的待读取副本的存储信息。
在本步骤之前,元数据节点接收客户端提交的MapReduce作业,并将该MapReduce作业划分为多个待处理的任务。具体的,一个MapRedcue作业是通过客户端向元数据节点的JobTracker提交的,JobTracker接到客户端的作业请求后把其加入作业队列中,并将该MapReduce作业划分为多个任务。元数据节点还用于监听数据节点发送的心跳信息,具体地,该心跳信息由数据节点上的TaskJobtracker发送,该心跳信息中包括数据节点的资源使用情况和任务运行情况等信息,TaskTracker与JobTracker和Task之间采用了RPC协议进行通信。
在将作业划分为多个任务后,元数据节点获取每个任务对应的数据块的标识(blockID),并根据各数据块的标识获取各数据块的待读取副本的存储信息。为了保证分布式文件系统的可靠性,分布式文件系统中每个数据块都具有多个副本,这些副本分别存储在不同的数据节点上,这些副本的内容完全相同,只是存储位置不同。元数据节点需要从数据块的多个副本中选择一个待读取副本,从待读取副本所在的数据节点中读取该数据块。元数据节点根据该数据块的标识获取该数据块的待读取副本的存储信息,具体为:
首先,元数据节点根据待处理的任务对应的数据块的标识,获取该数据块的副本信息。
元数据节点中存储有各数据块的信息,数据块的信息具体为数据块的标识、大小、数据块的副本信息等。元数据节点根据该任务对应的数据块的标识,查询获取到该数据块的副本信息,数据块的副本信息包括数据块的副本个数、数据块副本的存储信息等,数据块副本的存储信息具体为数据块副本存储的数据节点以及数据节点的地址信息。
然后,元数据节点根据该数据块的副本信息,获取该数据块的各个副本所在的数据节点的资源使用率,确定资源使用率最低的数据节点。
元数据节点根据数据块的副本信息,能够获知数据块的各副本所在的数据节点,然后,元数据节点获取该数据块的各个副本所在的数据节点的资源使用率。数据节点会定期通过心跳信息等方式向元数据节点上报自己的资源使用率,因此,元数据节点上存储有该数据块的各个副本所在的数据节点的资源使用率,元数据节点从该数据块的多个副本所在的数据节点中选择资源使用率最低的数据节点。若资源使用率最低的数据节点只有一个,则元数据节点将资源使用率最低的数据节点上的副本作为该数据块的待读取副本。若资源使用率最低的数据节点为多个,则元数据节点进一步获取各资源使用率最低的数据节点的预取数据块个数,从各资源使用率最低的数据节点中选取预取数据块个数最少的数据节点上的副本作为数据块的待读取副本。这里只是列举了一种确定待读取副本的方法,当然,元数据节点还可以根据其他方法确定待读取副本。
元数据节点会为每个数据节点维护一个预取数据块个数,该预取数据块个数表示从数据节点的HDD中预取数据成功的数据块的个数,预取成功的数据块被存储到SSD中。数据节点的预取数据块个数越大,说明SSD中存储的预取数据越多,SSD剩余的存储空间越小,数据节点的预取数据块个数越小,说明SSD中存储的预取数据越少,SSD剩余的存储空间越大,因此,元数据节点在选取待读取副本时,优先选取预取数据块个数最少的数据节点上的副本作为数据块的待读取副本。
步骤102、元数据节点根据该待读取副本的存储信息,向该待读取副本所在的数据节点发送预取指令,该预取指令用于指示该数据节点从该数据节点的硬盘驱动器中读取该数据块,并将该数据块写入该数据节点的固态硬盘。
本实施例中,数据节点采用SSD和HDD混合存储方法,SSD的读取速率比HDD的速率快的多,因此,将SSD作为缓存,元数据节点会预先将要处理的数据块从HDD中读取到SDD中。具体地,元数据节点在获取待处理的任务对应的数据块的待读取副本的存储信息后,根据该待读取副本的存储信息,向该待读取副本所在的数据节点发送预取指令,该预取指令用于指示该待读取副本所在的数据节点从自己的硬盘驱动器中读取该数据块,并将该数据块写入自己的固态硬盘。该预取指令中包括该数据块的标识,该待读取副本所在的数据节点在接收到该预取指令后,根据该预取指令中包括的该数据块的标识,将该数据块的标识对应的数据从HDD中读出并写入SSD中。
该待读取副本所在的数据节点在将该数据块从HDD预取到SSD之后,若SSD的存储空间已满,该待读取副本所在的数据节点可以采用现有的任意一种页面替换策略淘汰掉一个数据块。常用的页面替换算法有最近最少使用页面置换算法(LeastRecentlyUsed,简称LRU)和最近最不常用页面置换算法(LeastFrequentlyUsed,简称LFU),LRU优先淘汰最长时间未被使用的页面,LFU优先淘汰一定时期内被访问次数最少的页面。在某个数据节点淘汰掉一个数据块之后,元数据节点会将该数据节点的预取数据块个数减1。
步骤103、元数据节点将该数据块的元数据添加到预取数据成功表,该预取数据成功表中的任务优先被元数据节点调度,在元数据节点调度该待处理的任务时,元数据节点根据该预取数据成功表中保存的该数据块的元数据从该数据节点的固态硬盘中读取该数据块。
在该待读取副本所在的数据节点成功将该数据块从HDD中读出并写入SSD后,该待读取副本所在的数据节点会向元数据节点上报数据预取成功消息,元数据节点在接收到该数据预取成功消息后,将该数据块的元数据信息添加到预取数据成功表中,同时元数据节点会将该待读取副本所在的数据节点的预取数据块个数加1。预取数据成功表中保存有所有预取成功的数据块的标识和元数据,元数据节点在后续调度任务时,优先调度预取数据成功的任务,以保证在读取数据块时,尽量从SSD中读取,由于从SSD中读取数据的速率比从HDD中读取快的多,从而提到了数据块的读取速率,提高任务的处理效率,从而能够提高整个分布式文件系统的性能。
后续在元数据节点调度该待处理的任务时,元数据节点根据该预取数据成功表中保存的该数据块的元数据从该数据节点的SSD中读取该数据块。该数据块的元信息中记录有该数据块的存储位置,具体为该数据块的待读取副本所在的数据节点,预取数据成功表中的数据块默认都存储在数据块所在数据节点的SSD中,因此,元数据节点根据该数据块的待读取副本所在的数据节点的地址,从该数据块的待读取副本所在的数据节点的SSD中读取该数据块。
本实施例,元数据节点通过获取待处理的任务对应的数据块的标识,并根据该数据块的标识获取该数据块的待读取副本的存储信息,然后,元数据节点根据该待读取副本的存储信息,向待读取副本所在的数据节点发送预取指令,以将该数据块从该数据节点的HDD中预取到SSD中,在预取成功后,元数据节点将所该数据块的元数据添加到预取数据成功表,后续在调度该待处理的任务时,元数据节点根据该数据块的元数据直接从该数据节点的SSD中读取该数据块。由于从SSD中读取数据的速率比从HDD中读取快的多,从而提到了数据块的读取速率,提高任务的处理效率,从而能够提高整个分布式文件系统的性能。现有技术中,在预取数据时是基于对过去的访问情况估计将来,有一定的粗略性,而本实施例中,由于MapReduce中元数据节点预先知道有哪些待处理的任务,以及这些任务对应的数据块的标识,因此,元数据节点能够准确的将将要处理的数据块预先从HDD中读取到SSD中,提高了缓存的命中率。
在上述实施例一的基础上,可选地,元数据节点根据该数据块的标识获取该数据块的待读取副本之前,所述方法还包括:元数据节点判断预取数据成功表中是否包含该数据块的元数据,若不包含,则元数据节点根据该数据块的标识获取数据块的待读取副本,进一步执行上述实施例一的方法,将该数据块从HDD中预取到SSD中。若包含,说明该数据块已经预取成功,元数据节点不需要执行实施例一的方法。
图3为本发明实施例二提供的元数据节点的结构示意图,如图3所示,本实施例的元数据节点可以包括:获取模块21、发送模块22和处理模块23。
其中,获取模块21,用于获取待处理的任务对应的数据块的标识,并根据所述数据块的标识获取所述数据块的待读取副本的存储信息;
发送模块22,用于根据所述待读取副本的存储信息,向所述待读取副本所在的数据节点发送预取指令,所述预取指令用于指示所述数据节点从所述数据节点的硬盘驱动器中读取所述数据块,并将所述数据块写入所述数据节点的固态硬盘;
处理模块23,用于将所述数据块的元数据添加到预取数据成功表,所述预取数据成功表中的任务优先被所述元数据节点调度,在所述元数据节点调度所述待处理的任务时,所述处理模块23还用于根据所述预取数据成功表中保存的所述数据块的元数据从所述数据节点的固态硬盘中读取所述数据块。
所述获取模块21具体用于:根据所述任务对应的数据块的标识,获取所述数据块的副本信息。然后,根据所述数据块的副本信息,获取所述数据块的各个副本所在的数据节点的资源使用率,确定资源使用率最低的数据节点。若所述资源使用率最低的数据节点只有一个,则将所述资源使用率最低的数据节点上的副本作为所述数据块的待读取副本,并获取所述待读取副本的存储信息;若所述资源使用率最低的数据节点为多个,则获取所述各资源使用率最低的数据节点的预取数据块个数,从所述各资源使用率最低的数据节点中选取预取数据块个数最少的数据节点上的副本作为所述数据块的待读取副本,并获取所述待读取副本的存储信息。
可选地,所述处理模块23还用于:在将所述数据块的元数据添加到预取数据成功表之后,将所述数据节点的预取计数值加1。
进一步地,所述获取模块21还用于:在获取待处理的任务对应的数据块的标识之前,接收客户端提交的MapReduce作业,将所述MapReduce作业划分为多个待处理的任务。
可选地,所述获取模块21还用于:在根据所述数据块的标识获取所述数据块的待读取副本之前,判断所述预取数据成功表中是否包含所述数据块的元数据;若不包含,则根据所述数据块的标识获取所述数据块的待读取副本。
本实施例的装置,可以用于执行实施例一提供的技术方案,其实现原理类似,此处不再赘述。
图4为本发明实施例三提供的元数据节点的结构示意图,如图4所示,本实施例的元数据就节点300包括:处理器31、存储器32、通信接口33和系统总线34,所述存储器32和所述通信接口33通过所述系统总线34与所述处理器31连接并完成相互间的通信;所述通信接口33用于与其他设备进行通信,所述存储器32,用于存储计算机执行指令321;所述处理器31,用于运行所述计算机执行指令321执行如下所述的方法:
获取待处理的任务对应的数据块的标识,并根据所述数据块的标识获取所述数据块的待读取副本的存储信息;
根据所述待读取副本的存储信息,向所述待读取副本所在的数据节点发送预取指令,所述预取指令用于指示所述数据节点从所述数据节点的硬盘驱动器中读取所述数据块,并将所述数据块写入所述数据节点的固态硬盘;
将所述数据块的元数据添加到预取数据成功表,所述预取数据成功表中的任务优先被所述元数据节点调度,在所述元数据节点调度所述待处理的任务时,根据所述预取数据成功表中保存的所述数据块的元数据从所述数据节点的固态硬盘中读取所述数据块。
所述处理器31在根据所述数据块的标识获取所述数据块的待读取副本的存储信息时,具体用于:
根据所述任务对应的数据块的标识,获取所述数据块的副本信息;
根据所述数据块的副本信息,获取所述数据块的各个副本所在的数据节点的资源使用率,确定资源使用率最低的数据节点;
若所述资源使用率最低的数据节点只有一个,则将所述资源使用率最低的数据节点上的副本作为所述数据块的待读取副本,并获取所述待读取副本的存储信息;
若所述资源使用率最低的数据节点为多个,则获取所述各资源使用率最低的数据节点的预取数据块个数,从所述各资源使用率最低的数据节点中选取预取数据块个数最少的数据节点上的副本作为所述数据块的待读取副本,并获取所述待读取副本的存储信息。
在将所述数据块的元数据添加到预取数据成功表之后,所述处理器31还用于:将所述数据节点的预取计数值加1。
所述处理器31在获取待处理的任务对应的数据块的标识之前,还用于:接收客户端提交的MapReduce作业;将所述MapReduce作业划分为多个待处理的任务。
所述处理器31在根据所述数据块的标识获取所述数据块的待读取副本之前,还用于:判断所述预取数据成功表中是否包含所述数据块的元数据;若不包含,则根据所述数据块的标识获取所述数据块的待读取副本。
本实施例的元数据节点,可以用于执行实施例一提供的技术方案,其实现原理类似,此处不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。