CN106371912A - 一种流式计算***的资源调度方法和装置 - Google Patents
一种流式计算***的资源调度方法和装置 Download PDFInfo
- Publication number
- CN106371912A CN106371912A CN201510429901.7A CN201510429901A CN106371912A CN 106371912 A CN106371912 A CN 106371912A CN 201510429901 A CN201510429901 A CN 201510429901A CN 106371912 A CN106371912 A CN 106371912A
- Authority
- CN
- China
- Prior art keywords
- allocated
- thread
- currently
- determines
- distributed
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Multi Processors (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明提供了一种流式计算***的资源调度方法和装置,其中方法包括:S1、获取输入的计算工作信息;S2、依据所述计算工作信息确定的进程数目,将对应数目的进程分配给工作节点;S3、将依据所述计算工作信息确定的线程列表中的各线程依据以下原则中的至少一种进行分配:属于相同处理单元的线程优先被分配在不同进程上;具有通信关系的线程优先被分配在相同进程上。本发明能够提高流式计算***的容灾能力或***性能。
Description
【技术领域】
本发明涉及计算机应用技术领域,特别涉及一种流式计算***的资源调度方法和装置。
【背景技术】
JStorm是参考storm的实时流式计算框架,在网络IO、线程模型、资源调度、可用性及稳定性上做了持续改进,已被越来越多企业使用。JStorm集群由一个调度节点和多个工作节点组成。调度节点主要负责进行任务调度,并将调度结果送至zookeeper。工作节点分别监听zookeeper,获取分配给自身的任务并执行任务,主要架构如图1中所示。在每个工作节点上都拥有一定的Slot资源。每一个Job(工作)都可以看做Topology(计算拓扑),其中包含多级处理单元,每个处理单元运行的实例被称作Task(任务),一个Task为一个线程。运行Task的进程称为Worker,Job的总进程数为Worker数。每个工作节点的一个Slot资源上能够运行一个Worker。
目前无论是JStorm还是Storm,使用的调度方式都是平均分配原则,虽然提高了资源利用率,但并没有考虑容灾能力和***性能。
【发明内容】
有鉴于此,本发明提供了一种资源调度的方法和装置,以便于提高流式计算***的容灾能力或***性能。
具体技术方案如下:
本发明提供了一种流式计算***的资源调度方法,该方法包括:
S1、获取输入的计算工作信息;
S2、依据所述计算工作信息确定的进程数目,将对应数目的进程分配给工作节点;
S3、将依据所述计算工作信息确定的线程列表中的各线程依据以下原则中的至少一种进行分配:
属于相同处理单元的线程优先被分配在不同进程上;
具有通信关系的线程优先被分配在相同进程上。
根据本发明一优选实施方式,依据所述计算工作信息确定进程数目包括:
将所述计算工作信息中包含的进程数目、线程的总数以及工作节点当前剩余的Slot总数中的最小值,作为确定出的进程数目。
根据本发明一优选实施方式,所述S2包括:
将所述对应数目的进程逐一进行分配,按照当前剩余Slot数目从多到少的顺序分别将进程分配给工作节点,每个Slot上分配一个进程。
根据本发明一优选实施方式,依据所述属于相同处理单元的线程优先被分配在不同进程上的原则对线程列表中的线程进行分配包括:
A11、确定在所述S2分配的进程中,已经被分配与当前待分配的线程属于相同处理单元的线程数目最小的进程;
A12、将当前待分配的线程分配至所述A11确定的进程中的一个。
根据本发明一优选实施方式,所述A12包括:
如果所述A11确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A11确定出的进程多于一个,则继续执行A13;
A13、在所述A11确定出的进程中,确定符合以下条件的进程:该进程所在工作节点上所有进程已被分配的与当前待分配的线程属于相同处理单元的线程总数最小;
A14、将当前待分配的线程分配至所述A13确定的进程中的一个。
根据本发明一优选实施方式,所述A14包括:
如果所述A13确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A14确定出的进程多于一个,则继续执行A15;
A15、在所述A13确定出的进程中,确定已被分配线程数目最小的进程;
A16、将当前待分配的线程分配至所述A15确定的进程中的一个。
根据本发明一优选实施方式,所述A16包括:
如果所述A15确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A15确定出的进程多于一个,则继续执行A17;
A17、在所述A15确定出的进程中,确定符合以下条件的进程:该进程所在工作节点上所有进程已被分配的线程总数最小;
A18、将当前待分配的线程分配至所述A17确定的进程中的一个。
根据本发明一优选实施方式,依据所述具有通信关系的线程优先被分配在相同进程上的原则对线程列表中的线程进行分配包括:
A21、确定在所述S2分配的进程中,已经被分配与当前待分配的线程具有通信关系的线程总数最大的进程;
A22、将当前待分配的线程分配至所述A21确定的进程中的一个。
根据本发明一优选实施方式,所述A22包括:
如果所述A21确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A21确定出的进程多于一个,则继续执行A23;
A23、在所述A21确定出的进程中,确定符合以下条件的进程:该进程所在工作节点上已被分配的与当前待分配的线程具有通信关系的线程总数最大;
A24、将当前待分配的线程分配至所述A23确定的进程中的一个。
根据本发明一优选实施方式,该方法还包括:
每分配一个线程给进程后,判断该进程上已被分配的线程总数是否超过线程数目均值,如果是,则将该进程排除于后续的分配;
其中所述线程数目均值由依据所述计算工作信息确定的线程总数与进程数目求均值后确定。
本发明还提供了一种流式计算***的资源调度装置,该装置包括:
获取单元,用于获取输入的计算工作信息;
进程分配单元,用于依据所述计算工作信息确定的进程数目,将对应数目的进程分配给工作节点;
线程分配单元,用于将依据所述计算工作信息确定的线程列表中的各线程依据以下原则中的至少一种进行分配:
属于相同处理单元的线程优先被分配在不同进程上;
具有通信关系的线程优先被分配在相同进程上。
根据本发明一优选实施方式,所述进程分配单元在依据所述计算工作信息确定进程数目时,具体用于:将所述计算工作信息中包含的进程数目、线程的总数以及工作节点当前剩余的Slot总数中的最小值,作为确定出的进程数目。
根据本发明一优选实施方式,所述进程分配单元,具体用于:将所述对应数目的进程逐一进行分配,按照当前剩余Slot数目从多到少的顺序分别将进程分配给工作节点,每个Slot上分配一个进程。
根据本发明一优选实施方式,所述线程分配单元在依据所述属于相同处理单元的线程优先被分配在不同进程上的原则对线程列表中的线程进行分配时,具体执行以下操作:
A11、确定在所述进程分配单元分配的进程中,已经被分配与当前待分配的线程属于相同处理单元的线程数目最小的进程;
A12、将当前待分配的线程分配至所述A11确定的进程中的一个。
根据本发明一优选实施方式,所述线程分配单元在执行操作A12时,具体执行:
如果在所述A11中确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A11确定出的进程多于一个,则继续执行A13;
A13、在所述A11确定出的进程中,确定符合以下条件的进程:该进程所在工作节点上所有进程已被分配的与当前待分配的线程属于相同处理单元的线程总数最小;
A14、将当前待分配的线程分配至所述A13确定的进程中的一个。
根据本发明一优选实施方式,所述线程分配单元在执行操作A14时,具体执行:
如果在所述A13中确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A14确定出的进程多于一个,则继续执行A15;
A15、在所述A13确定出的进程中,确定已被分配线程数目最小的进程;
A16、将当前待分配的线程分配至所述A15确定的进程中的一个。
根据本发明一优选实施方式,所述线程分配单元在执行所述A16时,具体执行:
如果在所述A15中确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A156确定出的进程多于一个,则继续执行A17;
A17、在所述A15确定出的进程中,确定符合以下条件的进程:该进程所在工作节点上所有进程已被分配的线程总数最小;
A18、将当前待分配的线程分配至所述A17确定的进程中的一个。
根据本发明一优选实施方式,所述线程分配单元在依据所述具有通信关系的线程优先被分配在相同进程上的原则对线程列表中的线程进行分配时,具体执行以下操作:
A21、确定在所述进程分配单元分配的进程中,已经被分配与当前待分配的线程具有通信关系的线程总数最大的进程;
A22、将当前待分配的线程分配至所述A21确定的进程中的一个。
根据本发明一优选实施方式,所述线程分配单元在执行操作A22时,具体执行:
如果在所述操作A21确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A21确定出的进程多于一个,则继续执行A23;
A23、在所述A21确定出的进程中,确定符合以下条件的进程:该进程所在工作节点上已被分配的与当前待分配的线程具有通信关系的线程总数最大;
A24、将当前待分配的线程分配至所述A23确定的进程中的一个。
根据本发明一优选实施方式,该装置还包括:
分配辅助单元,用于在所述线程分配单元每分配一个线程给进程后,判断该进程上已被分配的线程总数是否超过线程数目均值,如果是,则将该进程排除于后续的分配;
其中所述线程数目均值由依据所述计算工作信息确定的线程总数与进程数目求均值后确定。
由以上技术方案可以看出,本发明中将属于相同处理单元的线程优先被分配在相同进程上,使得进程的故障对计算工作的影响降低,提高容灾能力,或者将具有通信关系的线程优先被分配在相同进程上,尽量减少线程间引起的进程间通信开销,提高***性能。
【附图说明】
图1为JStorm的主要架构示意图;
图2为本发明实施例提供的主要方法流程图;
图3为本发明实施例提供的详细方法流程图;
图4为本发明实施例提供的装置结构图。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
图2为本发明实施例提供的主要方法流程图,如图2中所示,该方法可以包括以下步骤:
在201中,获取输入的Job信息。
本发明实施例中,当需要在流式计算***中运行一个计算工作时,通常该计算工作为实时计算工作,会向流式计算***输入Job信息,在JStorm或Storm中,一个实时计算工作的逻辑被封装在一个Topology对象中。在该Topology中定义了Worker数目、Task、各Task之间执行关系构成的有向环状图,该有向环状图中定义了各Task之间的执行顺序,通常以Task间消息流动的逻辑拓扑结构形式体现。Worker是运行处理计算逻辑的进程,Worker中每一个线程称为一个Task。另外,通常同一种类的Task会被作为一个处理单元,处理单元信息以及处理单元包含的Task信息也在Job信息中有定义。
为了使上述概念更加明确,在此举一个例子,假设存在这样一个实时计算工作:通过对搜索日志进行分析从而建立用户需求的分类模型。这一实时计算工作可以分成三个处理单元:1)拉取搜索日志;2)对搜索日志进行特征提取和样本分类;3)利用提取的特征和样本分类进行分类模型的训练。在Job信息中进行如下定义:定义4个Worker,上述3个处理单元,每个处理单元中分别包含3个Task。这样,这一实时计算工作就需要对该4个Worker和9个Task进行分配。
在202中,按照负载分担原则,依据该Job信息确定的Worker数目,将对应数目的Worker分配给工作节点。
获取到Job信息后,主要进行两部分的分配:先将Worker分配至工作节点,再将Task分配至Worker。本步骤是前者的分配,采用的是负载分担原则,尽量平均地将Worker分配至工作节点。
在203中,将依据Job信息确定的Task列表中的各Task依据以下原则中的至少一种进行分配:属于相同处理单元的Task优先被分配在不同Worker上;具有通信关系的Task优先被分配在相同Worker上。
Job信息中定义的Task构成Task列表,对Task列表中的各Task分别进行分配。在进行分配时,属于相同处理单元的Task优先被分配在不同Worker上,使得Worker的故障对Topology的影响降低,提高容灾能力。具有通信关系的Task优先被分配在相同Worker上,尽量减少Task间的进程间通信开销,提高***性能。
需要说明的是,上述步骤203中的两个原则可以仅采用其中的一个,也可以都采用并优先采用其中一个。
下面通过图3所示实施例对同时采用上述两个原则,并优先采用属于相同处理单元的Task优先被分配在不同Worker上的原则的方式进行详细描述。图3为本发明实施例提供的详细方法流程图,如图3所示,该流程可以具体包括以下步骤:
在301中,获取输入的Job信息。
在302中,将Job信息中定义的Worker数目、Task的总数以及工作节点当前剩余的Slot总数中的最小值,作为确定出的Worker数目,假设该Worker数目确定出为N。
由于一个Slot上仅能够运行一个Worker,即便Job信息中定义的Worker数目大于当前剩余的Slot总数,也仅能够按照当前剩余的Slot总数来运行Worker。另外,也可能由于误定义的原因,使得Worker数目大于Task的总数,这种情况下是用不上那么多Worker的,最多仅需要Task总数的Worker。鉴于以上两个原因,在本步骤中,可以依据Job信息中定义的Worker数目、Task的总数以及工作节点当前剩余的Slot总数中的最小值,来确定实际分配的Worker数目。
在303中,将工作节点按照剩余的Slot数目从大到小的顺序进行排列。
在304中,将N个数目的Worker逐一进行分配,分别分配给当前剩余Slot数目最多的工作节点。
在对Worker进行分配时,原则上可以采用按照当前剩余Slot数目从多到少的顺序分别将进程分配给工作节点,本步骤中分配给当前剩余Slot数目最多的工作节点是其中一种优选的实施方式。
上述步骤303并非必要的步骤,在本发明实施例中,在进行Worker分配的时候,尽量使得各工作节点上的Worker数量平均。举个例子,假设存在三个工作节点:A、B和C,5个Worker需要分配,工作节点A、B和C上的剩余Slot数量分别为:3、2、1,那么首先将一个Worker分配至工作节点A上。此时工作节点A、B和C上的剩余Slot数量分别为:2、2、1,从工作节点A和B中任选一个工作节点分配一个Worker,假设将第二个Worker分配至工作节点A。此时工作节点A、B和C上的剩余Slot数量分别为:1、2、1,将第三个Worker分配至工作节点B。此时工作节点A、B和C上的剩余Slot数量分别为:1、1、1,将第四个Worker分配至任一个工作节点,假设分配至工作节点A。此时工作节点A、B和C上的剩余Slot数量分别为:0、1、1,将第五个Worker分配至工作节点B或C。
在305中,依据Job信息确定Task列表,依据Task总数与上述确定出的Worker数目N确定每个Worker上容纳的Task数目均值,假设为M。
本步骤中确定M的值是为了使得Worker上运行的Task数量尽量平均,在后续会描述到,控制每个Worker上容纳的Task数目不超过M。M值的确定可以采用每个Worker上容纳的Task数目均值向上取整的方式。假设Job信息中定义的Task总数为12,确定出的Worker数目为5,那么M值取3。
在306中,从Task列表中取出一个Task分别作为待分配的Task执行以下步骤:
在307中,确定步骤304分配的Worker中,已经被分配与当前待分配的Task属于相同处理单元的Task数目最小的Worker。
步骤304分配的Worker可以形成一个Worker列表,将待分配的Task分配至该Worker列表中的某一个Worker上。本步骤中,是尽量保证相同处理单元的Task被分配在不同Worker上,从而提高容灾能力。
在308中,判断307确定出的Worker是否仅有一个,如果是,执行309;否则,执行310。
在309中,将当前待分配的Task分配至该确定出的Worker,执行步骤321。
在310中,在307确定出的Worker中,确定符合以下条件的Worker:该Worker所在工作节点上所有Worker已被分配的与当前待分配的Task属于相同处理单元的Task总数最小。
本步骤的目的,是尽量保证相同处理单元的Task被分配在不同工作节点上,从而提高容灾能力。
在311中,判断310确定出的Worker是否仅有一个,如果是,执行309;否则,执行312。
在312中,在310确定出的Worker中,确定已被分配的Task数目最小的Worker。
本步骤的目的是,尽量保证Task被平均分配在Worker上。
在313中,判断312确定出的Worker是否仅有一个,如果是,执行309;否则,执行314。
在314中,在312确定出的Worker中,确定符合以下条件的Worker:该Worker所在工作节点上所有Worker已被分配的Task总数最小。
本步骤的目的是,尽量保证Task被平均分配在工作节点上。
在315中,判断314确定出的Worker是否仅有一个,如果是,执行309;否则,执行316。
在316中,在314确定出的Worker中,已经被分配与当前待分配的Task具有通信关系的Task总数最大的Worker。
本步骤的目的是,尽量保证有通信关系的Task被分配在相同Worker上,从而减少跨进程通信,提高***性能。Task之间是否具有通信关系可以从Job信息的有向环状图中确定,若两个Task之间存在消息流动,则该两个Task之间存在通信关系。
在317中,判断316确定出的Worker是否仅有一个,如果是,执行309;否则,执行318。
在318中,在316确定出的Worker中,确定符合以下条件的Worker:该Worker所在工作节点上已被分配的与当前待分配的Task具有通信关系的Task总数最大。
本步骤的目的是,尽量保证有通信关系的Task被分配在相同工作节点上,从而减少工作节点之间的网络通信,提高***性能。
在319中,判断318确定出的Worker是否仅有一个,如果是,执行309;否则,执行320。
在320中,从318确定出的Worker中任选一个Worker作为确定出的Worker,执行309。
321:判断该Worker上已被分配的Task总数是否达到M,如果是,执行步骤322,否则,执行323。
将一个Task分配至一个Worker后,如果该Worker上已被分配的Task总数达到M,则将Worker从Worker列表中移除,不再参与后续Task的分配,这样就能够尽量保证Task被平均地分配在各Worker上。
在322中,将该Worker排除于后续的分配。
在323中,从Task列表中取出下一个Task作为待分配的Task,转至执行步骤307,直至Task列表中所有Task分配完毕。
以上是对本发明提供的方法进行的详细描述,下面对本发明提供的装置进行详细描述。图4为本发明实施例提供的流式计算***的资源调度装置结构图,该装置可以设置于流式计算***中的主节点,如图4中所示,该装置可以包括:获取单元01、进程分配单元02和线程分配单元03,还可以包括分配辅助单元04,各组成单元的主要功能如下:
获取单元01负责获取输入的Job信息。该Job信息包含一个实时计算工作的信息,在JStorm或Storm中,一个实时计算工作的逻辑被封装在一个Topology对象中。在该Topology中定义了Worker数目、Task、各Task之间执行关系构成的有向环状图,该有向环状图中定义了各Task之间的执行顺序,通常以Task间消息流动的逻辑拓扑结构形式体现。
进程分配单元02负责按照负载分担原则,依据Job信息确定的Worker数目,将对应数目的Worker分配给工作节点。
首先,进程分配单元02在依据Job信息确定Worker数目时,可以将Job信息中包含的Worker数目、Task的总数以及工作节点当前剩余的Slot总数中的最小值,作为确定出的Worker数目。
另外,进程分配单元02可以将对应数目的Worker逐一进行分配,按照当前剩余Slot数目从多到少的顺序分别将进程分配给工作节点,例如分别分配给当前剩余Slot数目最多的工作节点,每个Slot上分配一个Worker。
线程分配单元03负责将依据Job信息确定的Task列表中的各Task依据以下原则中的至少一种进行分配:属于相同处理单元的Task优先被分配在不同Worker上;具有通信关系的Task优先被分配在相同Worker上。
Job信息中定义的Task构成Task列表,对Task列表中的各Task分别进行分配。在进行分配时,属于相同处理单元的Task优先被分配在不同Worker上,使得Worker的故障对Topology的影响降低,提高容灾能力。具有通信关系的Task优先被分配在相同Worker上,尽量减少Task间的进程间通信开销,提高***性能。
具体地,线程分配单元03在依据属于相同处理单元的Task优先被分配在不同Worker上的原则对Task列表中的Task进行分配时,执行以下操作:
A11、确定在进程分配单元02分配的Worker中,已经被分配与当前待分配的Task属于相同处理单元的Task数目最小的Worker。
A12、将当前待分配的Task分配至A11确定的Worker中的一个。
其中,线程分配单元03在执行操作A12时,如果在A11中确定出的Worker仅有一个,则将当前待分配的Task分配至该确定出的Worker;如果A11确定出的Worker多于一个,则继续执行A13。
A13、在A11确定出的Worker中,确定符合以下条件的Worker:该Worker所在工作节点上所有Worker已被分配的与当前待分配的Task属于相同处理单元的Task总数最小。
A14、将当前待分配的Task分配至A13确定的Worker中的一个。
更进一步地,线程分配单元03在执行操作A14时,如果在A13中确定出的Worker仅有一个,则将当前待分配的Task分配至该确定出的Worker;如果A14确定出的Worker多于一个,则继续执行A15。
A15、在A13确定出的Worker中,确定已被分配Task数目最小的Worker。
A16、将当前待分配的Task分配至A15确定的Worker中的一个。
更进一步地,线程分配单元03在执行A16时,如果在A15中确定出的Worker仅有一个,则将当前待分配的Task分配至该确定出的Worker;如果A156确定出的Worker多于一个,则继续执行A17。
A17、在A15确定出的Worker中,确定符合以下条件的Worker:该Worker所在工作节点上所有Worker已被分配的Task总数最小。
A18、将当前待分配的Task分配至A17确定的Worker中的一个。
对于另一原则,线程分配单元03在依据具有通信关系的Task优先被分配在相同Worker上的原则对Task列表中的Task进行分配时,可以具体执行以下操作:
A21、确定在进程分配单元02分配的Worker中,已经被分配与当前待分配的Task具有通信关系的Task总数最大的Worker。
A22、将当前待分配的Task分配至A21确定的Worker中的一个。
其中,线程分配单元在执行操作A22时,如果在操作A21确定出的Worker仅有一个,则将当前待分配的Task分配至该确定出的Worker;如果A21确定出的Worker多于一个,则继续执行A23。
A23、在A21确定出的Worker中,确定符合以下条件的Worker:该Worker所在工作节点上已被分配的与当前待分配的Task具有通信关系的Task总数最大。
A24、将当前待分配的Task分配至A23确定的Worker中的一个。上述操作A18和A24中,可以将待分配的Task分配至确定的Worker中的任一个,也可以采用其他方式从中选择一个。
上述分配辅助单元04可以在线程分配单元03每分配一个Task给Worker后,判断该Worker上已被分配的Task总数是否超过Task数目均值,如果是,则将该Worker排除于后续的分配。其中Task数目均值由依据Job信息确定的Task总数与Worker数目求均值后确定。分配辅助单元04能够尽量保证Task被平均地分配在各Worker上。
上述两个原则可以同时采用,并优先采用属于相同处理单元的Task优先被分配在不同Worker上的原则。这种情况下,线程分配单元03在执行操作A18后,如果确定出的worker个数多于一个,那么继续执行操作A21,此时操作A21中确定在操作A17确定的Worker中,已经被分配与当前待分配的Task具有通信关系的Task总数最大的Work。
流式计算***中的主节点通过上述装置完成Worker和Task的分配后,将分配结果送至zookeeper,工作节点监听zookeeper,获取分配给自身的worker和task以便后续执行。
需要说明的是,本发明上述实施例仅以JStorm和Storm为例进行描述,对于其他类似架构的流式计算***,本发明实施例提供的方法和装置同样适用,仅仅可能涉及实时计算工作、进程、线程等名称上的差异,核心思想和执行流程类似。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (20)
1.一种流式计算***的资源调度方法,其特征在于,该方法包括:
S1、获取输入的计算工作信息;
S2、依据所述计算工作信息确定的进程数目,将对应数目的进程分配给工作节点;
S3、将依据所述计算工作信息确定的线程列表中的各线程依据以下原则中的至少一种进行分配:
属于相同处理单元的线程优先被分配在不同进程上;
具有通信关系的线程优先被分配在相同进程上。
2.根据权利要求1所述的方法,其特征在于,依据所述计算工作信息确定进程数目包括:
将所述计算工作信息中包含的进程数目、线程的总数以及工作节点当前剩余的资源块Slot总数中的最小值,作为确定出的进程数目。
3.根据权利要求1或2所述的方法,其特征在于,所述S2包括:
将所述对应数目的进程逐一进行分配,按照当前剩余Slot数目从多到少的顺序分别将进程分配给工作节点,每个Slot上分配一个进程。
4.根据权利要求1所述的方法,其特征在于,依据所述属于相同处理单元的线程优先被分配在不同进程上的原则对线程列表中的线程进行分配包括:
A11、确定在所述S2分配的进程中,已经被分配与当前待分配的线程属于相同处理单元的线程数目最小的进程;
A12、将当前待分配的线程分配至所述A11确定的进程中的一个。
5.根据权利要求4所述的方法,其特征在于,所述A12包括:
如果所述A11确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A11确定出的进程多于一个,则继续执行A13;
A13、在所述A11确定出的进程中,确定符合以下条件的进程:该进程所在工作节点上所有进程已被分配的与当前待分配的线程属于相同处理单元的线程总数最小;
A14、将当前待分配的线程分配至所述A13确定的进程中的一个。
6.根据权利要求5所述的方法,其特征在于,所述A14包括:
如果所述A13确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A14确定出的进程多于一个,则继续执行A15;
A15、在所述A13确定出的进程中,确定已被分配线程数目最小的进程;
A16、将当前待分配的线程分配至所述A15确定的进程中的一个。
7.根据权利要求6所述的方法,其特征在于,所述A16包括:
如果所述A15确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A15确定出的进程多于一个,则继续执行A17;
A17、在所述A15确定出的进程中,确定符合以下条件的进程:该进程所在工作节点上所有进程已被分配的线程总数最小;
A18、将当前待分配的线程分配至所述A17确定的进程中的一个。
8.根据权利要求1所述的方法,其特征在于,依据所述具有通信关系的线程优先被分配在相同进程上的原则对线程列表中的线程进行分配包括:
A21、确定在所述S2分配的进程中,已经被分配与当前待分配的线程具有通信关系的线程总数最大的进程;
A22、将当前待分配的线程分配至所述A21确定的进程中的一个。
9.根据权利要求8所述的方法,其特征在于,所述A22包括:
如果所述A21确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A21确定出的进程多于一个,则继续执行A23;
A23、在所述A21确定出的进程中,确定符合以下条件的进程:该进程所在工作节点上已被分配的与当前待分配的线程具有通信关系的线程总数最大;
A24、将当前待分配的线程分配至所述A23确定的进程中的一个。
10.根据权利要求1、4至9任一权项所述的方法,其特征在于,该方法还包括:
每分配一个线程给进程后,判断该进程上已被分配的线程总数是否超过线程数目均值,如果是,则将该进程排除于后续的分配;
其中所述线程数目均值由依据所述计算工作信息确定的线程总数与进程数目求均值后确定。
11.一种流式计算***的资源调度装置,其特征在于,该装置包括:
获取单元,用于获取输入的计算工作信息;
进程分配单元,用于依据所述计算工作信息确定的进程数目,将对应数目的进程分配给工作节点;
线程分配单元,用于将依据所述计算工作信息确定的线程列表中的各线程依据以下原则中的至少一种进行分配:
属于相同处理单元的线程优先被分配在不同进程上;
具有通信关系的线程优先被分配在相同进程上。
12.根据权利要求11所述的装置,其特征在于,所述进程分配单元在依据所述计算工作信息确定进程数目时,具体用于:将所述计算工作信息中包含的进程数目、线程的总数以及工作节点当前剩余的Slot总数中的最小值,作为确定出的进程数目。
13.将权利要求11或12所述的装置,其特征在于,所述进程分配单元,具体用于:将所述对应数目的进程逐一进行分配,按照当前剩余Slot数目从多到少的顺序分别将进程分配给工作节点,每个Slot上分配一个进程。
14.根据权利要求11所述的装置,其特征在于,所述线程分配单元在依据所述属于相同处理单元的线程优先被分配在不同进程上的原则对线程列表中的线程进行分配时,具体执行以下操作:
A11、确定在所述进程分配单元分配的进程中,已经被分配与当前待分配的线程属于相同处理单元的线程数目最小的进程;
A12、将当前待分配的线程分配至所述A11确定的进程中的一个。
15.根据权利要去14所述的装置,其特征在于,所述线程分配单元在执行操作A12时,具体执行:
如果在所述A11中确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A11确定出的进程多于一个,则继续执行A13;
A13、在所述A11确定出的进程中,确定符合以下条件的进程:该进程所在工作节点上所有进程已被分配的与当前待分配的线程属于相同处理单元的线程总数最小;
A14、将当前待分配的线程分配至所述A13确定的进程中的一个。
16.根据权利要求15所述的装置,其特征在于,所述线程分配单元在执行操作A14时,具体执行:
如果在所述A13中确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A14确定出的进程多于一个,则继续执行A15;
A15、在所述A13确定出的进程中,确定已被分配线程数目最小的进程;
A16、将当前待分配的线程分配至所述A15确定的进程中的一个。
17.根据权利要求16所述的装置,其特征在于,所述线程分配单元在执行所述A16时,具体执行:
如果在所述A15中确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A156确定出的进程多于一个,则继续执行A17;
A17、在所述A15确定出的进程中,确定符合以下条件的进程:该进程所在工作节点上所有进程已被分配的线程总数最小;
A18、将当前待分配的线程分配至所述A17确定的进程中的一个。
18.根据权利要求11所述的装置,其特征在于,所述线程分配单元在依据所述具有通信关系的线程优先被分配在相同进程上的原则对线程列表中的线程进行分配时,具体执行以下操作:
A21、确定在所述进程分配单元分配的进程中,已经被分配与当前待分配的线程具有通信关系的线程总数最大的进程;
A22、将当前待分配的线程分配至所述A21确定的进程中的一个。
19.根据权利要求18所述的装置,其特征在于,所述线程分配单元在执行操作A22时,具体执行:
如果在所述操作A21确定出的进程仅有一个,则将当前待分配的线程分配至该确定出的进程;如果所述A21确定出的进程多于一个,则继续执行A23;
A23、在所述A21确定出的进程中,确定符合以下条件的进程:该进程所在工作节点上已被分配的与当前待分配的线程具有通信关系的线程总数最大;
A24、将当前待分配的线程分配至所述A23确定的进程中的一个。
20.根据权利要求11、14至19任一权项所述的装置,其特征在于,该装置还包括:
分配辅助单元,用于在所述线程分配单元每分配一个线程给进程后,判断该进程上已被分配的线程总数是否超过线程数目均值,如果是,则将该进程排除于后续的分配;
其中所述线程数目均值由依据所述计算工作信息确定的线程总数与进程数目求均值后确定。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510429901.7A CN106371912B (zh) | 2015-07-21 | 2015-07-21 | 一种流式计算***的资源调度方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510429901.7A CN106371912B (zh) | 2015-07-21 | 2015-07-21 | 一种流式计算***的资源调度方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106371912A true CN106371912A (zh) | 2017-02-01 |
CN106371912B CN106371912B (zh) | 2019-11-26 |
Family
ID=57879758
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510429901.7A Active CN106371912B (zh) | 2015-07-21 | 2015-07-21 | 一种流式计算***的资源调度方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106371912B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107528924A (zh) * | 2017-10-09 | 2017-12-29 | 郑州云海信息技术有限公司 | 一种分布式集群元数据服务部署方法及*** |
CN111290744A (zh) * | 2020-01-22 | 2020-06-16 | 北京百度网讯科技有限公司 | 流式计算作业处理方法、流式计算***及电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1289962A (zh) * | 1999-09-23 | 2001-04-04 | 国际商业机器公司 | 在多线程计算环境中建立跨越多个进程的通信程序 |
CN101556545A (zh) * | 2009-05-22 | 2009-10-14 | 北京星网锐捷网络技术有限公司 | 一种实现进程支持的方法、装置和多线程*** |
US20130290554A1 (en) * | 2012-04-26 | 2013-10-31 | Qiming Chen | Open station as a stream analysis operator container |
CN103473287A (zh) * | 2013-08-30 | 2013-12-25 | 中国科学院信息工程研究所 | 一种自动分发、运行和更新可执行程序的方法及*** |
CN103763378A (zh) * | 2014-01-24 | 2014-04-30 | 中国联合网络通信集团有限公司 | 基于分布式流式计算***的任务处理方法、***及节点 |
CN104375882A (zh) * | 2014-11-21 | 2015-02-25 | 北京应用物理与计算数学研究所 | 匹配于高性能计算机结构的多级嵌套数据驱动计算方法 |
-
2015
- 2015-07-21 CN CN201510429901.7A patent/CN106371912B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1289962A (zh) * | 1999-09-23 | 2001-04-04 | 国际商业机器公司 | 在多线程计算环境中建立跨越多个进程的通信程序 |
CN101556545A (zh) * | 2009-05-22 | 2009-10-14 | 北京星网锐捷网络技术有限公司 | 一种实现进程支持的方法、装置和多线程*** |
US20130290554A1 (en) * | 2012-04-26 | 2013-10-31 | Qiming Chen | Open station as a stream analysis operator container |
CN103473287A (zh) * | 2013-08-30 | 2013-12-25 | 中国科学院信息工程研究所 | 一种自动分发、运行和更新可执行程序的方法及*** |
CN103763378A (zh) * | 2014-01-24 | 2014-04-30 | 中国联合网络通信集团有限公司 | 基于分布式流式计算***的任务处理方法、***及节点 |
CN104375882A (zh) * | 2014-11-21 | 2015-02-25 | 北京应用物理与计算数学研究所 | 匹配于高性能计算机结构的多级嵌套数据驱动计算方法 |
Non-Patent Citations (1)
Title |
---|
LEONARDO ANIELLO等: ""Adaptive Online Scheduling in Storm"", 《ACM》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107528924A (zh) * | 2017-10-09 | 2017-12-29 | 郑州云海信息技术有限公司 | 一种分布式集群元数据服务部署方法及*** |
CN107528924B (zh) * | 2017-10-09 | 2021-06-25 | 郑州云海信息技术有限公司 | 一种分布式集群元数据服务部署方法及*** |
CN111290744A (zh) * | 2020-01-22 | 2020-06-16 | 北京百度网讯科技有限公司 | 流式计算作业处理方法、流式计算***及电子设备 |
WO2021147289A1 (zh) * | 2020-01-22 | 2021-07-29 | 北京百度网讯科技有限公司 | 流式计算作业处理方法、流式计算***及电子设备 |
CN111290744B (zh) * | 2020-01-22 | 2023-07-21 | 北京百度网讯科技有限公司 | 流式计算作业处理方法、流式计算***及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN106371912B (zh) | 2019-11-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104780146B (zh) | 资源管理方法及装置 | |
CN108881495B (zh) | 资源分配方法、装置、计算机设备及存储介质 | |
CN111625331B (zh) | 任务调度方法、装置、平台、服务器及存储介质 | |
CN107135257A (zh) | 一种节点集群中任务分配的方法、节点和*** | |
US9727355B2 (en) | Virtual Hadoop manager | |
CN104102543B (zh) | 一种云计算环境中负载调整的方法和装置 | |
CN106033373B (zh) | 一种云计算平台中虚拟机资源调度方法和调度*** | |
CN110113387A (zh) | 一种基于分布式批量处理***的处理方法、装置及*** | |
CN105912399B (zh) | 一种任务处理方法、装置及*** | |
WO2021159638A1 (zh) | 集群队列资源的调度方法、装置、设备及存储介质 | |
CN106209482A (zh) | 一种数据中心监控方法及*** | |
CN111399986A (zh) | Pod资源配额配置方法及装置 | |
CN111930493B (zh) | 集群中NodeManager状态管理方法、装置及计算设备 | |
CN107239337A (zh) | 虚拟化资源的分配和调度方法及*** | |
CN110928655A (zh) | 一种任务处理方法及装置 | |
CN104536804A (zh) | 面向关联任务请求的虚拟资源调度***及调度和分配方法 | |
CN104850394B (zh) | 分布式应用程序的管理方法和分布式*** | |
CN111124687A (zh) | 一种cpu资源预留方法、装置及其相关设备 | |
Hoseinyfarahabady et al. | Handling uncertainty: Pareto-efficient bot scheduling on hybrid clouds | |
CN110851236A (zh) | 一种实时资源调度方法、装置、计算机设备及存储介质 | |
CN109522090A (zh) | 资源调度方法及装置 | |
CN108616553B (zh) | 云计算资源池进行资源调度的方法及装置 | |
CN113157379A (zh) | 集群节点资源调度方法及装置 | |
CN107870763A (zh) | 用于创建海量数据实时分拣***的方法及其装置 | |
CN114661462A (zh) | 资源分配方法、***、计算机可读存储介质及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |