基于能耗感知的Storm大数据节能调度方法
技术领域
本发明涉及大数据处理领域和能耗领域,特别涉及基于能耗感知的Storm大数据节能调度方法。
背景技术
当今社会是一个高速发展的社会,科技发达,信息利通,人们之间的交流越来越密切,生活也越来越方便,大数据就是这个高科技时代的产物。大数据的应用也在越来越彰显他的优势,它占领的领域也越来越大,电子商务、O2O、物流配送等,各种利用大数据进行发展的领域正在协助企业不断地发展新业务,创新运营模式。有了大数据这个概念,对于消费者行为的判断,产品销售量的预测,精确的营销范围以及存货的补给已经得到全面的改善与优化。大数据首先带来的难题是能耗。在全球大数据的背景下,如何降低处理大数据的能耗就显得尤为重要。为了在大数据环境下实现绿色数据流计算,了解大数据环境中的总能耗是非常重要的。我们需要了解如何最大限度地减少数据中心的能源消耗,以及解决大多数现有研究中的高能耗和响应时间长的问题。这证明了为大数据流计算环境能耗建模,优化资源调度和优化框架的重要性,从而能最大限度地降低能耗,在大数据流式计算中实现低能耗的目标。
Storm是一个分布式的,容错的实时计算系统,如图1所示。Storm也可以处理大批量的数据,但是Storm在保证高可靠性的前提下还可以让处理进行的更加实时,所有的信息都会快速被处理或输出。Storm具备容错和分布计算这些特性,这就让Storm可以扩展到不同的机器上进行大批量的数据处理。Storm还有以下特性:易于扩展,只需要添加机器和改变对应的topology拓扑设置。Storm使用Zookeeper进行集群协调,这样可以充分的保证大型集群的良好运行;强健壮性,storm集群非常容易管理,轮流重启节点不影响应用;高容错,一旦topology递交,Storm会一直运行它直到topology被dectivate或者被kill。而在执行中出现错误时,也会由Storm重新分配任务,可以保证每个数据流作业被完全执行;语言无关性,尽管通常使用Java,但是Storm中的topology可以用任何语言设计;可调试的本地模式,Storm有一个“本地模式”,可以在处理过程中完全模拟Storm集群,可以快速进行开发和单元测试;编程模型简单,只需编写Spout和solt部分的实现,因此极大地降低了实时大数据流式计算的复杂性。
Storm实时计算能力源于其强大的并行调度机制及调度策略,实现中系统默认任务调度器使用轮询调度的策略,首先是计算集群中可供分配的slot资源,并判断当前已分配给运行topology的slot是否需要重新分配,然后对可分配的slot进行排序。计算topology的executor信息,最后将资源平均地分配给topology。Storm中运行的实时应用程序都对应一个topology,即各个组件间的消息流动形成了逻辑上的一个拓扑结构。现阶段主要需要解决的问题是如何提高计算能效和降低数据中心成本。
发明内容
针对以上storm系统默认调度算法没有考虑能耗的不足,本发明的目的在于提供一种基于能耗感知的Storm节能调度算法,使得总任务槽(slot)分配任务能耗的总和最小,包括构建改进的基于Storm计算框架的大数据计算能耗模型,并建立任务与计算资源的能耗优先顺序表,提交topology任务,提交任务之后包括以下步骤:
S1、判断在能耗模型的数据库中是否有该topology任务的能耗信息,若有则按照数据库中worker的能耗优先级为低能耗的worker进程分配任务;
S2、否则将该topology任务分配到集群中各个节点的各个worker上;
S3、监控每个worker进程上的能耗信息并写入能耗模型的数据库;
S3、根据能耗模型评判该任务的优先级,并更新优先级列表,重新提交该topology任务并返回步骤S1。
进一步的,如图2,步骤1中改进的基于Storm计算框架包括Storm调度器、主节点、从节点和数据库,从节点中设置有监控模块,监控模块用于监控从节点能耗信息,并将数据信息写入数据库,数据库将该数据信息调度给Storm调度器,Storm调度器根据能耗信息对任务的优先级进行排序并直接或间接控制主节点、从节点的任务优先级。
进一步的,Storm调度器包括backtype.storm.scheduler.DefaultScheduler调度器和Strom的lib文件下的DirectScheduler调度器。
进一步的,所述构建基于Storm计算框架的大数据计算能耗模型包括:
Terec=min(∑0≤i<I∑0≤j<Jwij);
其中,Terec表示提交的任务能耗最小总和,I表示storm集群中node节点的总数量,J表示单个node节点上的worker进程数量总和,wij则表示第i个node节点上的第j个worker进程的能耗和。
进一步的,第i个node节点上的第j个worker进程的能耗和wij表示为:
其中,表示第i个node节点上的第j个worker进程上的第p个线程excutor的能耗,E为线程的总数量。
进一步的,第i个node节点上的第j个worker进程上的第p个excutor任务的能耗表示为:
其中,表示上的第l个任务,T表示任务的总个数。
进一步的,建立任务与计算资源的能耗优先顺序表包括根据节点i上第j个进程worker的单位能耗wva来评判优先级,wva值越低则将具有更高的优先级,则节点i上第j个进程worker的单位能耗wva表示为:
其中,ek表示的能耗,tk表示的执行时间,nwtij表示在节点i上的第j个节点上的总数量,表示节点i上的第j个进程worker上的第k个task。
本发明的目的是提出一种基于能耗感知的Storm节能调度策略,整体的想法就是求在每个任务槽(slot)分配任务能耗的总和最小的问题。基于能耗模型,提出新的能耗感知调度算法,找到能耗最低的任务槽(slot),为其优先分配任务,在分配任务期间同时考虑任务执行时间满足服务等级协议(Service-Level Agreement,SLA)条件。这个新的调度策略算法能够提高大数据程序的运行能效,同时满足SLA。通过提高数据中心大数据计算的能效将会显著地降低整个数据中心的成本。
附图说明
图1为传统基于Storm计算框架;
图2为本大明改进的基于Storm计算框架;
图3为本大明提交任务的流程示意图;
图4为本发明的实施过程中topolog y任务的数据表示意图;
图5为本发明的实施过程中node节点的数据表示意图;
图6为本发明的实施过程中worker进程的数据表示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
针对storm系统默认调度算法没有考虑能耗的不足,本发明的目的在于提供一种基于能耗感知的Storm节能调度算法,使得总任务槽(slot)分配任务能耗的总和最小,以达到节能的目的,如图3,包括以下步骤:
S1、构建基于Storm计算框架的大数据计算能耗模型;
S2、建立任务与计算资源的能耗优先顺序表;
S3、根据worker先级表选取评价标准最优的计算资源,优先为其分配计算任务,同时保证并行计算任务均衡分配;
S4、再次提交任务时,讲按照改进过后的调度器进行资源调度。
Storm大数据框架下,一个大数据应用(topology)在提交到大数据处理平台storm进行处理时,会按照调度策略由Nimbus负责分配到具体的节点上去执行。topolopy表示具体的一个拓扑任务,包含了I个node节点,每个节点上又包含了多个worker进程;对于任意的worker进程上会运行一个或者多个excutor线程,一个excutor线程上运行一个或者多个task任务,则可以将这些topolopy任务、node节点、worker进程、excutor线程以及task任务之间的关系表示为:
topology={node0,node1,...,nodei,...,nodeI-1};
nodei={worker0,worker1,...,workerJ,...,workerJ-1};
workerj={excutor0,excutor1,...,excutore,...,excutorE-1};
excutore={task0,task1,...,taskt,...,taskT-1};
其中,一个拓扑任务topolopy中包括I个node节点,节点nodei上包括J个worker进程,进程workerj上包括E个线程,线程excutore上包括T个任务。
本发明改进的基于Storm计算框架包括Storm调度器、主节点、从节点和能耗模型数据数据库,每个从节点包括多个worker进程和一个监控模块,监控模块用于监控从节点能耗信息,并将数据信息写入能耗模型数据块,能耗模型数据库将该数据信息调度给Storm调度器,Storm调度器根据能耗模型数据库中任务的优先级直接或间接控制主节点、从节点完成任务;新增的监控模块用于监控节点的数据,并储存在数据库中。
对于每个topology能耗的计算包括以下步骤:
topolopyec=∑0≤i<I∑0≤j<Jwij;
其中,topolopyec表示提交的任务能耗总和,I表示storm集群中node节点的总数量,J表示单个node节点上的worker数量总和。
wij则表示节点i上的第j个worker的能耗和,表示为:
其中,p表示节点i上的第j个worker上的第p个excutor任务。
表示节点i上的第j个worker上的第p个excutor任务的能耗,表示为:
其中,表示上第l个任务。
本发明的最终目的是为了降低Storm在进行大数据运算的时候的能耗,所
以目标函数,即所述构建基于Storm计算框架的大数据计算能耗模型包括:
Terec=min(∑0≤i<I∑0≤j<Jwij)。
按照默认的任务调度,只是考虑了相对的负载均衡,没有考虑到处理中的能耗问题,这样的处理方法显然会导致Terec相对较高,即在同样配置的Storm集群中处理相同的任务就会消耗更多能耗,任务的放置方式将决定Strom处理数据的能耗大小。
在提交topology任务后,监控每个worker上的task的cpu和内存的使用情况,对于任意的worker进程的能耗优先级进行评判,评判标准为:
其中,在节点i上的第j个worker上的第k个task定义为ek表示task任务k的能耗,tk表示task任务k的执行时间,nwtij表示在节点i上的第j个节点上的task总数量,那么就有节点i上第j个worker的单位能耗为wva,评价worker进程的能耗优先级将依据wva,wva值越低则将具有更高的优先级,反之亦然。再次提交相同任务的时候,将从数据库中读取优先级顺序表,优先把任务放置在优先级高的worker进程上执行。
在任务执行完后,再用最近的执行任务监控的能耗信息更新worker优先级顺序表,实时的提供最新的能耗感知策略。
本发明的实施包括能耗评价和调度策略两大模块。能耗评价模块对应执行完一个topology的所有spout/bolt之后的能耗,参照能耗模型得到topology的运行能耗,同时还具有更新更新优先级顺序表的功能。调度模块则是参照优先级顺序表,增加新的调度器按照优先级顺序表进行任务调度。
能耗评价包含了计算node节点上的各个worker进程上的执行时间和总能耗的功能。加入监控模块后,可以得到每个worker进程上执行任务开始到结束的时间,也能获取到一定间隔时间内slot上的能耗消耗情况和执行的对应时间。
对于在一定时间内具体的workerw进程的能耗计算表示为:
其中,C0、C1和C2为常数,Ucpu、Umemory分别表示进程workerw的CPU和内
存的使用情况,可以用监控脚本使用top命令获取。
又由具体某一worker进程上的能耗和等于分布到上面的所有task的运行能耗和,所以表示为:
在这一模块中,将把任务在worker进程上运行时间和产生的能耗写入数据库中,为后面修改调度策略提供依据。
Storm默认的调度器是backtype.storm.scheduler.DefaultScheduler,如果用户没有指定自己的调度器,那么Storm本身就会使用这个默认的调度器进行topology进行调度分配。所以要新加入调度器DirectScheduler到Strom的lib文件下,该调度器在任务被首次调度时,把任务分配到各个worker上去,监控能耗情况,更新到数据库优先级顺序表中,topology数据表设计如图4表中定义了topology任务的名称和Id,并定义了其数据类型及其数据长度;node数据表设计如图5,定义了该节点的Id和该节点下的所有worker,及其数据类型及其数据长度;worker数据表设计如图6,表中包括该进程worker具体运行于哪一个topology任务下、运行于该任务的哪一个节点Id,该进程的workerId以及平均能耗wva,下次提交任务时按照优先级顺序表进行任务分配。
本发明首次提出任务与计算资源的能耗优先顺序表和Storm的能耗评测方法,以此为依据修改了Storm的默认调度策略,做出最优能耗的任务分配。同时在任务运行完成后,更新各个节点的能耗优先顺序表;这样做的优点包括:使能耗感知的Storm节能调度方法具有动态扩展性。本调度算法适用于重复运行相同大数据应用的场景,策略表机制在每次运行时动态更新,起到能耗感知的作用。当物理集群变化时,策略表更新机制可以及时感知到未知数据,探测更新。
进程资源依据评价标准排序,用数据库保存排序后的结果。这样容易拿到评价标准最优的进程,优先分配任务。评价标准是取当前阶段下的平均能耗;这样分配的优点包括:改进了原生Storm调度只是简单的按照轮询的方式,没有考虑进程资源能耗不同以及进程间资源消耗的问题。使本发明提出的节能调度方法有效降低应用运行时的能耗。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。