首页> 中国专利> 迅速完成网络上分布的数据处理任务的系统及方法

迅速完成网络上分布的数据处理任务的系统及方法

摘要

一种用于在网络上运行任务方法,包括:从所有数据中建立(200)至少一个数据分组;用标题标识(202)数据分组,所述标题包含可执行代码;将数据分组发送给(204)可用的处理器,以及利用可用处理器执行(206)任务,以利用数据分组和标题的可执行代码中包含的指令来获取结果数据。

著录项

  • 公开/公告号CN1422403A

    专利类型发明专利

  • 公开/公告日2003-06-04

    原文格式PDF

  • 申请/专利权人 奥弗图尔服务公司;

    申请/专利号CN01807736.6

  • 申请日2001-02-06

  • 分类号G06F9/00;G06F12/00;

  • 代理机构72001 中国专利代理(香港)有限公司;

  • 代理人杨凯;叶恺东

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-17 14:48:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-04-22

    专利权的转移 IPC(主分类):G06F9/00 变更前: 变更后: 登记生效日:20150331 申请日:20010206

    专利申请权、专利权的转移

  • 2009-04-15

    专利申请权、专利权的转移(专利权的转移) 变更前: 变更后: 登记生效日:20090306 申请日:20010206

    专利申请权、专利权的转移(专利权的转移)

  • 2006-07-05

    授权

    授权

  • 2003-08-20

    实质审查的生效

    实质审查的生效

  • 2003-06-04

    公开

    公开

说明书

附录参考

附录A包括计算机例行程序清单。总页数为40页。背景

许多商业企业要求在尽可能短的时间帧内处理大量数据。近年来,需要处理这种大量数据的企业已经购买了非常昂贵的专用多处理器硬件,通常称作主计算机、巨型计算机或大规模并行计算机。这种硬件的费用通常为数百万美元,同时还伴随有支持合同以及聘用专业人员维护这些系统所产生的费用。这种超级计算能力不仅昂贵,而且在任何给定任务如何在多处理器之间进行分配方面,没有为用户提供太多控制权。任何计算任务如何得以分配成为这种巨型计算机的操作系统的功能。

在数据处理领域中,经常会对不同数据组执行极为相似的操作。例如,可能希望计算几个不同类中的某个类、如一组数据的唯一分类样品;了解给定类的算术平均值是多少;或了解两类的交集可能是什么。在超级计算环境中,人们必需依靠操作系统来合理地决定如何在多个中央处理器(CPU)之间分配任务的各个部分。然而,今天的操作系统还不能够在数据处理环境中作出这种决策。

因此,需要一种克服这些缺陷的系统及方法。本发明最佳实施例的概述

根据最佳实施例,最佳实施例描述的是一种提供多处理器的系统及方法,例如,计算机的中央处理器(CPU),在网络上执行变化数量和类型的数据处理任务。将数据处理任务提供给网络上为本系统和方法所配备的任何可用CPU。所述系统和方法选择第一可用CPU来执行数据处理任务。所述系统和方法为执行任务的CPU提供完成任务所需的最小数据量以及完成任务所需的软件指令。

更具体地说,在费用和时间两个方面,最佳系统及方法改善了数据处理效率。软件用户考虑给定的数据处理任务,对各任务所需的数据类型提供一组定义,并为任务指定给定数据组。然后,所述系统和方法将输入文件分为若干子任务数据文件,并将给定的数据和任务规范发送给网络上任一可用的计算机。CPU执行该任务,并将完成结果返回给请求该任务的计算机。

这样,大量数据由运行诸如Windows NT或Unix的传统操作系统的普通日用个人计算机进行快速处理。运行最佳实施例软件的例如十二台双处理器计算机或二十四台单处理器计算机的小群集即使没有超过具有等量CPU的巨型计算机的性能,也能够与其性能相同。

附图概述

图1说明根据最佳实施例执行本发明的方法的示例系统。

图2给出了根据最佳实施例的本方法的概观。

图3给出了根据最佳实施例所述方法如何构建工作队列的过程流程。

图4说明了根据最佳实施例向网络上的计算机发送任务数据和任务指令的过程。

图5说明了根据最佳实施例用于在工作例程完成其任务之后重新组合文件结果的过程。最佳实施例的详细说明

本系统及方法的最佳实施例包括两个主要部分:网络上执行数据处理的多个处理单元以及软件,软件用于控制若干计算机中的各个计算机针对也被称作主任务的较大任务中的一个分立任务来工作。任务是例程,如抓取例程、工作例程以及重组例程,稍后将对所有这些进行详细描述。下面说明网络硬件和软件的最佳实施例。本系统可以与搜索引擎配合使用。一个适用的搜索引擎在共同未决申请序列号09/322677中进行了说明,该申请于1999年5月28日提交,题为“用于影响计算机网络搜索引擎所产生的搜索结果列表中的位置的系统及方法”,在此通过引用结合于本文中。

参照附图,首先参考图1,作为概览,给出处理器102组成的网络,一般地用100表示,它执行本系统中所用的例程。本领域的技术人员知道,除网络之外,处理器102还能够连接在LAN上、通过因特网进行连接等。处理器102可以是日用计算机、巨型计算机、膝上型计算机等的CPU。处理器102中的至少一个作为主处理器104。主处理器104可以是任何处理器102。

参照图2,上述系统可以用来执行本方法。本方法获取大量数据,并将数据分成任务相关的较小数据组(框200)。换句话说,较小的数据组设计成仅包括特定任务所需的数据。例如,用户可以准备任务队列和任务数据队列。任务队列定义要执行的任务以及执行任务的顺序。任务数据队列定义完成数据处理任务所需的数据元素,以及定义数据处理任务的数据如何在文件中分布,从而可以顺利执行各子任务。此后,用标题标识分组(框202)。将在下面对所述标题进行详细说明。再将数据分组发送给可用的处理器(框204)。然后,可用的处理器可以对数据分组执行所需任务(框206)。

参照图3,位于CPU被称作monkeyGrab(猴子抓取)的抓取例程执行抓取任务,它接收有关从之前建立的任务数据文件中抓取哪些数据元素的指令(框300)。任务数据文件由例程所使用的文件标题和数据的组合进行定义。抓取例程创建描述输出数据的文件标题,使工作例程能够作用于数据文件中的元素(框302)。抓取例程保证只有数据文件中的数据元素才是后续工作任务所需的那些(框304)。抓取例程将在下面进行更详细地说明。

参照图4,图中所示的是将任务发送给远程主机的过程。例如,软件搜索可用CPU的存储器数据库以及可用CPU的状态(框400)。最好是将任务指令文件(框402)和任务数据文件(程序404)发送给处于可用状态的第一CPU。任务指令包括诸如monkeyCount(猴子计数)的工作例程,这一点将在下面进行更详细说明。任务数据文件可以是下面描述的比如monkeyDeJournal的例程的结果。控制例程最好创建数据文件和存储条目,以便记住哪个可用主机在执行任务(框406)。一旦完成任务,任务例程就使结果数据对控制例程是可用的(框408)。控制例程等待任务例程来指示完成。一旦顺利完成,控制例程更新可用主机的存储器数据文件(框410)。但在未成功完成时,控制例程则更新数据文件和存储条目,并将任务重新指定给另一可用CPU。

如图5所示,完成任务所产生的数据文件被回送给请求计算机,即主处理器,该数据文件将与其它完成了的任务所产生的数据文件一起进行重新组合(框500)。主处理器构建重组命令来指定将被重组到一个文件中的子任务数据文件(框502)。对于每个子任务,例如下面将说明的monkeyJoin(猴子组合)的重组代码读取并评估文件标题,以便标识定义关键字和数据的数据列(框504)。在读取各子任务的结果文件标题之后,重组例程从每个文件中读取数据行,并在关键字匹配时输出数据行中关键字的数据值(框506)。如果关键字不匹配,重组例程则读取用于如何表示及处理丢失数据值的文件标题。所有任务结果文件最好来自同一输入数据文件,从而不需要处理重复关键字。任务结果数据文件将仅包含一个给定的关键字。同样,最好是写入任务例程以便按照排序顺序输出关键字,从而不再需要进行排序。此后,数据被重新组合(框508)。

I.硬件和网络

现在来看硬件更具体的实例,硬件的最佳实施例是一组日用个人计算机。从而用户在熟悉的环境中工作,每台计算机最好包含当前的CPU型号、相同存储量以及至少一个高速网络接口卡。当然也可以使用其它组合。为了便于说明,最佳实施例包括十二台双CPU计算机、1GB的随机存取存储器以及两个100BaseT以太网适配卡,其中,每个CPU以500MHz的时钟速度运行。群集中的各计算机均运行RedHat Linux操作系统。本领域的技术人员知道,可以使用其它操作系统,如Microsoft Windows和Window NT,Sun Solaris以及Machintosh。十二台计算机经高速网络转接相互连接。每台计算机还配备了例如SCSI II接口和9GB的硬盘驱动器。更多的计算机当然可以加入该组中,并不有损于性能。

II.软件

软件的最佳实施例包括若干独立的计算机程序,通过在运行时解释的一种语言来实现,如Perl编程语言。本领域的技术人员知道,还可以使用其它运行时解释的编程语言,如Java、PHP3、Python以及Tcl/Tk。

作为概述,称作数据预处理例程的第一计算机例程读取输入数据文件,读取任务数据队列控制文件,执行任务数据队列文件中指定的任何数量的任意指令,并建立文件标题和数据文件。第二计算机例程从第一例程创建的数据文件中仅提取特定数据处理任务所需的数据字段。抓取例程创建一个文件,该文件包括工作例程使用的文件标题段以及数据段。输出数据文件的文件标题段包括可执行或可评估代码。第三例程即工作例程对抓取例程创建的数据文件执行计算。工作例程最好对抓取例程创建的文件标题进行分析,然后再对文件中文件标题之后的数据部分执行所要求的操作。分析包括读取文件标题以及评估程序代码,以便生成定义随后的数据结构的散列表。散列表是一种利用映射为数据值的关键字的数据结构。

由于软件执行的许多任务都是与某种聚集有关的任务,例如计算给定类的示例数量,本发明的最佳实施例包括第四软件例程,它允许混合各种任务文件。对任务文件进行混合,从而,对于给定类,所有聚集测量均在一个数据行中,使加载数据库成为一项容易的任务。四个软件例程中的每个例程都将在下面进行更详细地说明。

A.数据预处理例程

在附录中称作monkeyDeJournal的数据预处理例程对用户选择的数据进行格式化,使该数据易于译成处理所需的分立部分。数据预处理例程的最佳实施例读取输入数据文件和控制文件,返回控制文件中指定的数据组,并输出将由本发明的其它例程来读取的新文件。

经抽象机制对读输入数据文件进行处理—数据预处理例程指向现有的数据文件分析例程。有关数据文件分析例程仅有的两个假设是:它能够1)标识数据组,以及2)返回散列表数据结构的这种数据分组。例如,如果输入数据文件包含网站中用户点击的数据组(组:userClick(用户点击))和搜索引擎执行搜索的数据组(组:search(搜索)),‘userClick’和‘search’则是输入数据文件所有已知数据组的散列表中的关键字。这两个组关键字中的每一个又需要指向另一散列表。该散列表中关键字的名称应是数据元素的名称,其值应是组的特定示例中该数据元素的实际数据值。组‘userClick’可以包含例如命名为‘timeStamp(时间标记)’、‘IPAddress(IP地址)’、‘rank(等级)’以及‘AccountID(账号ID)’的数据元素;命名为‘search’的分组可以包含例如命名为‘query(队列)’、‘timeStamp’以及‘resultsFound(找到结果)’的数据元素。数据文件是以组读取的,并且其各个元素是根据数据预处理例程必须读取的控制文件中的数据来返回的。

控制文件的读取以及对其数据的操作由数据预处理例程的代码处理的。控制文件被指定为运行时可评估的散列表。该散列表中的关键字是任意名称,其中每个名称表示一个任务队列。这些关键字的值也是散列表。这个嵌套散列表具有三个所需关键字以及任何数量的可选关键字。所需关键字命名为‘event(事件)’、‘column(列)’以及‘delimiter(定界符)’。可选关键字将在稍后进行说明。命名为‘事件’的关键字的值在包含相关数据元素的输入文件中指定数据组。输入数据文件分析程序标识组名称。例如,命名为‘event’的关键字的值可以是‘userClick’。命名为column的关键字指向另一散列表。这个嵌套散列表的关键字是任何随后的数据处理任务可能需要的任意指定的列名称。列名称关键字的值是一个最内部散列表,它允许用户指定如何为数据处理任务构造相关列。它经两个关键字来进行,一个名为‘source_args(源参数)’,另一个名为‘source_routine(源例程)’。‘source_args’关键字从用于构造所需输出字段的数据组中指定数据元素;‘source_routine’被指定为有效Perl子例程。最后,命名为‘定界符’的关键字指定相关数据列如何在输出文件的数据段中被划分。在最佳实施例中,这个控制文件将至少按以下形式提供:

{′AdvertiserQueue′=>{′event′=>'userClick′,′columns′=>{′AdListingX′=>{′source_args′=>[′AccountlD′,′rank′,],′source_routine′=>′sub{my($ald)=shift@$_;my($rank)=shift@$_;my($x)=‘$ald###$rank′;return$x;′},},′IP_address′=>{′source_args′=>[′clientlP′,],′source_routine′=>′sub{return shift@S_; ‘},								 },},′delimiter′=>′\t′,},}

在本例示中,‘AdvertiserQueue(广告商队列)’是指定给任务数据队列的任意名称。相关数据组来自组‘userClick’。需要两个输出列:一个被称作‘AdListingX’,另一个被称作‘IP_Address’。输出列‘AdListingX’应包括数据元素‘AccontID’和‘rank’,它们是‘userClick’数据组的组成部分。‘AdListingX’数据列的最终表示应是ABC###3的形式,其中假定广告商ID是‘ABC’而‘等级’为‘3’。输出列‘ID_Address’应仅包含来自数据组‘userClick’示例的数据单元‘clientIP’所具有的数据值。本领域的技术人员知道,任何有效的Perl语法可以被用于‘source routine’值,以便对相关输入数据字段创建派生和修改。具有值‘\t’名为‘定界符’的关键字表示输出字段应当用标记字符来分隔。

在本发明的这个示例中,控制文件可以包括三个附加可选关键字。这些可选关键字具有以下名称:‘deltaT’、‘restriction_args(限制参数)’以及‘restriction(限制)’。‘deltaT’向数据预处理例程提供有关数据预处理文件的输出应包含数据的一个小时中的最早时刻的信息。该关键字的合法值是0和59之间的数字(含0和59);单数字之前加零(即,如果该值是1,则拼写为‘01’)。‘restriction_ergs,关键字正如上述的‘source_args’关键字一样工作。该关键字的值对用户定义功能提供输入参数。该列表的元素必须是相关数据组中数据元素的名称。‘restriction’关键字值是有效Perl子例程,例如,

{

′deltaT′=>′09′,

′restriction_args′=>[′bid′,],

′restriction′=>′sub{

        my($x)=shift@$_;

        return($x>0);

        }′,…

}指定包括在输出文件中的第一相关数据组应在文件分析例程遇见数据第一小时之后的九分钟就出现。要返回的唯一数据组示例是那些‘bid’元素具有大于零的值的数据组示例。‘bid’元素被传递给经‘restriction’关键字指定的用户定义功能。

一旦数据预处理例程读取了控制文件并评估了内容,它便创建一个以文件标题段开始的输出文件。文件标题段被写成Perl可评估散列表的形式。该文件标题段包含四个所需的关键字以及三个可选关键字,它们将在下一节(B.抓取例程)进行说明。在输出了文件标题之后,数据预处理例程在下一输出行输入名为‘EndOfHeader(标题结尾)’的标志。这时,满足任何限制条件的数据分组的任何示例都按照控制文件中指定的规则进行组合,然后再写到输出文件的数据部分,其中的列由控制文件中指定的定界字符进行定界。

B.抓取例程

根据称作monkeyGrab的抓取例程的最佳实施例,预处理器例程使用用户希望进行计算的数据,并将这些数据放入一个文件。此后,其它能够读取含可执行代码的文件标题并执行该代码的例程可以读取要进行操作的数据。这样,抓取例程的要求是能够读取由预处理例程所创建的文件标题,使其提取相应的数据元素。由于抓取例程还将给定任务所需的最小量数据写到任务文件中,所以抓取例程可以写出文件标题,它由类似于预处理例程的文件标题的规则来限定。

抓取例程根据列名称来抓取数据列,其中,列名称是通过传送给抓取例程的输入参数提供的。例如,数据文件可包括含有诸如搜索结果投标列的价格值的列,以及含有类描述符的列,可能包括一个或多个字段的关键字字段。在这种情况下,抓取例程可以按如下所述进行调用:‘grab-g price-g myKeyField’。抓取例程工作的数据文件在其文件标题中包含用于名为‘price(价格)’和’myKeyField(我的关键字字段)’的列的条目。来自预处理例程的文件标题应包含适当的标题条目,即用于描述数据列的散列表的关键字名称。抓取例程从数据文件中读取标题信息,以便获得有关数据文件中列位置的位置、界定数据列的字符以及诸如如何处理或评估空的列位置的任何特殊处理规则的信息。一旦抓取例程确定了列位置以及给定列所需的处理规则,抓取例程则加载相关的那些列,并将其放入输出文件。

由抓取例程写的输出文件包含与所提取列有关的标题信息。为了便于说明,标题为含有四个关键字的Perl散列表的形式。四个关键字对应于包含在预处理例程的输出中的七个关键字中的四个。这四个关键字用于数据列,它们可以是数据列或列的组,使给定数据行唯一、数据列标签、以及输出数据字段定界符。数据列的关键字指向第二个散列表。第二散列表具有作为其关键字的列名以及作为其值的含两个关键字的散列表。最内层散列表的第一个关键字描述文件的数据部分中数据列的位置,其中,最内层的散列表是一系列散列表中嵌入最深的散列表。最内层散列表的第二个关键字描述如何表示空零据值。

唯一描述任何给定数据行的列的关键字必须具有描述数据行的列名。该名称是列散列表中的关键字。数据列标签的关键字具有Perl列表的值。最后,描述列定界符的关键字具有对应于列定界符的值。如果该列定界符包含Perl中换码顺序的任何字符,则在这些换码字符之前加上反斜线-‘\’-字符。最佳实施例在文件标题末端放置一个标志,使软件知道完成读取标题信息的时间以及它可以开始读取数据的时间。

C.工作例程

称作monkeyCount的工作例程的最佳实施例与预处理器和抓取例程的最佳实施例极为相似,它读取数据文件标题,并且也输出这类文件标题。类似于抓取例程,工作例程读取文件标题,以确定它读取的列、这些列出现在输入文件数据的数据段中的顺序以及那些输入数据列组成类或关键字定义。在读取了该信息时,工作例程对输入数据执行所需操作。如果工作例程是计数例程,那么它将为每个类输出属于该类的行数的计数,以及类的描述符。例如,如果输入数据包括七行两列,则关键字以及为该关键字进行计数的项如下所述:

关键字    搜索条件

Adv01    狗

Adv03    猫

Adv05    房子

Adv03    老鼠

Adv01    旅行

Adv05    音乐

Adv01    声音

输出文件包含以下数据行:

关键字  #搜索

Adv01    3

Adv03    2

Adv05    2

同样,如果工作例程是加法程序,那么它将对相关关键字的相关列中的数据值进行相加。

在文件输入/输出以及复杂性方面,工作例程都将任何给定任务减少到最低程度,例如,如果请求计数,则工作例程仅接收一个关键字和要计数的数据元素的列。这就允许在任意数量的机器上出现多个工作分配。一个工作例程可以对各广告商总的搜索进行计数;另一个工作例程可以对特定时间段内在列出的任何给定广告商上点击的唯一IP地址的数量进行计数。当工作例程完成其分配时,它采用与输入文件相同的标题格式写出一个文件,然而,在描述列的散列表中的值将是来自输入文件和所作用数据名称的关键字描述符。例如,如果输入数据文件具有关键字‘广告商ID’和列‘搜索项’,并且设置该工作例程对返回给定广告商的搜索次数进行计数,则输出文件应具有关键字‘广告商ID’和列‘搜索计数’。

D.数据重建例程

根据称作monkeyJoin(猴子组合)的数据重建例程的最佳实施例,所有字段被重建到一个文件中,由关键字进行组织。在要处理的数据已经被预处理之后、即分为较小工作单元之后,并且这些较小工作单元被发送给网络上的机器进行处理之后开始重建。数据重建有助于便捷的数据库载入。要完成数据重建,为数据重建例程提供有关哪些数据文件需要被混合到一个数据文件的输入。将成为数据库加载文件的组成部分的每个数据文件作为参数以列表形式提供给数据重建例程。例如,数据重建例程,如monkeyJoin按如下所述方式进行调用:

reconstruct(重建)文件1文件2文件3…文件N

对于作为输入参数提供的每个文件,重建例程读取文件标题信息,并将该标题信息及数据储存在散列表中。一旦读取了所有标题和数据,每个关键字值均进行循环。对于具有匹配关键字的每个输入文件,写入相应的输出列。如果一个输入文件没有关键字条目或值,则调用丢失或未定义值的处理,并且重建例程按照输入文件标题散列表中的记号提供适当值。该文件作为其它文件写出,其中的标题信息为Perl散列表格式。散列表包含与抓取和工作例程提供的散列表标题相同的四个关键字。该散列表中关键字的值包括该应用所需的相同的四个基本关键字:列散列表、关键字散列表、列定界符说明以及列标签的散列表。

E.调度例程

根据称作monkeyDispatcher(猴子调度程序)的工作负荷分配例程的最佳实施例,CPU和计算机存储器的密集工作发生在执行相关操作的工作例程中,例如对某一类中的唯一示例进行计数。在理论上,CPU和存储器密集工作被分配给多台计算机。本系统及方法最好根据网络上计算机的分配软件的已知使用负荷量,对网络上可用计算机进行工作调度。调度例程允许一个工作或抓取例程在连接到网络的计算机的每个CPU上运行。例如,如果有二十四个计数操作要执行,并且有十二台计算机,各配备两个CPU,则两个工作操作可以分派给十二台计算机中的每一台进行同时处理,以确保计数任务可能的最快完成。同样,调度例程需要有关哪些任务或任务部分可以同时进行以及哪些任务首先要求某一其它任务部分的完成的信息。

这样,调度例程需要与能够接收工作指令的机器及其它们一次可接收多少工作指令有关的数据。例如,四个CPU的机器一次可以接收四条指令,而一个CPU的机器则只能接收一条。该例程还储存与以下各项有关的数据:1)哪台机器在任何给定时间点正在执行多少任务,以及2)这些机器中的任何一台在任何给定的时间点正在执行哪个任务。最后,调度例程可以开始装入用于在远程机器上处理数据的代码。

最佳实施例以数据文件开始,该数据文件以Perl散列表写成,它指定网络上可用机器的名称以及给定机器中CPU的总数。同时它还指定给定机器上每个CPU的最后了解的‘忙/闲’状态、最后了解的开始时间。例如,在整数格式中,整数表示任务已在某个CPU上开始,无用值则表示当前在给定机器的CPU中没有运行任何工作。网络上的每台机器在散列表中具有一个关键字。该散列表中的每个关键字指向第二散列表,第二散列表具有给定机器已知的CPU数量及该机器当前被占用进行工作的CPU数量的关键字条目。在散列表的第一构造中,当前占用进行工作的CPU的值为零。

在数据文件中还指定了任务队列。该组任务散列表中最外层关键字指向一个或多个散列表,这一个或多个散列表指定任务的组件以及这些子任务是否可以同时执行。这个最外层任务散列表的关键字是简单的整数,以数字1开始,每个任务组加1。这些编号的任务中的每个任务指向另一散列表,该散列表包含表示该任务的一些方面的关键字(如数据预处理、数据抓取/计数、数据组合等)。最佳实施例将这些单独的任务关键字包含在散列表中,该散列表单一的当前关键字被命名为例如‘parms’。关键字‘parms’指向具有四个关键字条目的散列表:‘key’、‘name(名称)’、‘tasks(任务)’以及‘masterTaskFile(主任务文件)’。这些关键字具有相应的值,组成类等级关键字的列的描述符,例如广告商ID,标记了的、也就是预定义表示的数据处理任务(例如,dejournal.lineads表示与互联网搜索引擎中广告商列表的减少有关的任务列表),可同时执行的成对的“抓取”和“计数”任务的列表,以及数据预处理例程的输出文件的名称。

根据最佳实施例,调度例程读入控制文件,以便标识网络上可用的机器以及机器的可用性。当某个任务调度给某台机器时,调度软件更新其机器可用性散列表的存储副本。这样,如果机器具有两个CPU,并且调度例程将任务发送给具有两个CPU的机器,调度软件则会将忙CPU的数量从0增加到1,以表示一项工作已经发送给网络上的那台机器。当执行工作例程任务的机器完成该任务时,调度程序对执行该任务的机器将忙CPU值减一。

采用这个机制,将任务分配给网络上的机器之前,调度软件根据当前分配给机器的任务对可用机器进行排序。如果网络上的机器X具有0个忙CPU同时机器Y具有1个忙CPU,以及两台机器X和Y都具有两个CPU,那么调度软件最好是首先将任务分配给机器X。这是因为在调度软件能够确定的范围内机器X都没有忙CPU。机器X可以在调度例程不知道的情况下运行某个CPU密集软件。较好的方法是,具有这些CPU的计算机仅运行必需的操作系统软件,以防以下问题的发生:工作被发送给一台计算机,该计算机的处理器正在处理非相关任务,如文字处理任务。在最佳实施例中,必要时,计算机仅包括一个操作系统、一个诸如Perl解释器的程序解释器、以及安全复制程序。如果网络上所有机器都同样忙,调度软件则根据机器名对可用机器堆栈进行排序并以这种方式指定任务。如果机器全部被占用,调度软件则从可用机器堆栈中移去该机器,直到该忙机器报告它已完成至少一个指定任务。

如果所有机器均忙,调度软件则等待第一时间段,如几分钟,以便重试任务调度。如果调度软件对任务进行了排队,但在第二时间段之后,例如十五分钟之后,仍无法找到可用的机器,则调度软件建立警告消息。这种情况可表示较大的系统故障,通常要求复位软件系统和任务。本发明的最佳实施例在网络上提供足够的硬件,使该网络上的所有硬件不大可能在任何给定的十五分钟内全忙。

一旦调度软件标识已分配给定任务的机器,调度软件则开始组合将在远程计算机中执行的一组命令。软件组合的命令集是针对某一任务的,由调度软件的控制文件中所提供的信息进行指导。按如下所述指定这些命令的结构。机器创建一个唯一标识任务以及运行该任务的机器的名称。然后,将该名称用作目录项标记,软件将该标记用作任务正在运行或已完成的指示。在构造唯一名称之后,调度软件使用免费可用的安全外壳实用程序(又称作ssh)的语法来创建将在远程计算机中装入程序的命令。本领域的技术人员将知道,可以方便地使用其它现有的实用程序,如远程外壳执行(又称作rsh)。

在当前形式中,最佳实施例允许网络上的计算机访问共享盘空间,以便使远程计算机访问程序代码和数据的共享盘空间。本领域的技术人员同样知道,使用现有网络和远程执行工具,程序代码和数据都可以被复制到远程计算机的专用盘中。此后,远程执行实用程序可以将工作计算机指向程序代码和数据的新位置。最后,调度软件增加命令的语法以移去该文件,并在远程执行任务完成时将它标记为已建立。一旦构造了该语法,调度例程即建立其自身的副本(称作分支),并用对构造命令的调用来重写该副本(称作分支-执行组合(fork-exec combination))。伪码被用来说明该过程:

$task=″NumUniqueUsers″;$machineToUse=″machine07′;$programToLaunch=″monkeyGrab″;$dataFileToUse=″AdvertiserReport″$programArguments=″-g AdvertiserlD-g$task″;$programLocation=″/shared/disk/space/code″;$dataLocation=″/shared/disk/space/data″;$dirEntryFileMark=″$task.$machineToUse.system(\″date\″)″;$remoteExecutionTool=″ssh″;$remoteExToolArgs=″-secret/secrets/myKeyFile″;$commandSet=″touch$dirEntryMark;x=′$remoteExecutionTool$remoteExToolArgs$machineToUse′$programToLaunch$programArguments $dataFileToUse″;if[$x eq 0];then rm$dirEntryMark;fi″;fork()exec(″$commandSet″);

如果调度例程的控制文件表示特定过程或过程对可以同时执行,那么它便循环上述步骤,以便装入控制文件所需的、现有网络能够处理的尽可能多的过程。如果控制文件表示某个过程必须在一个或多个其它过程必须开始之前就完成,调度程序则在任务队列中装入更多串行或并行任务之前,等待这个串行任务的完成。

F.特例和通用扩展性

最佳实施例包括称作monkeyLoad(猴子加载)的工作例程的特例。与能够在本发明的系统及方法的框架中创建的所有其它工作例程相似,monkeyLoad具有分析Perl可评估代码形式的文件标题的能力。该monkeyLoad例程获取文件标题信息,并建立一组SQL(结构化查询语言)语句,将跟随文件标题的数据插入数据库。通过一组Perl语言的标准化及免费可用数据库接口,该例程可以读取输出文件中的数据行,并将其作为行插入数据库。本领域的技术人员知道,工作例程也可以读取并评估文件标题,以便例如产生另一例程的控制文件,它可能与诸如Oracle的SQL加载例程(sqlldr)的数据库例程的交互作用更为有效。该例程的特殊要求是:数据库列与文件标题中提供的列标签相匹配。这个部分在过程开始时在用户建立并可以指定任意数据列标签的初始文件中进行。任何给定工作例程通过读入文件标题信息、对其进行评估以及在输出时建立另一文件标题来运行,其中,所建立的另一文件标题包含最少量的关键字,如任何工作例程工作所需的四个关键字。

工作例程的一个特殊示例证明本发明的系统及方法可以进行推广。由于工作例程能够分析文件标题信息,所以工作例程能够完成许多有用的工作。大家可以容易地知道,工作例程不是被指示来对唯一示例进行计数,而是能够将工作例程写成加、减、除、乘、计算标准偏差等等。任何这类例程所要求的唯一功能是评估数据文件中作为可执行代码的标题信息的能力,转换为具有最小量的关键字的散列表。

尽管结合特定的说明性实施例对本发明进行了说明,但并无意将本发明限于这些说明性实施例。本领域的技术人员会知道,可以进行各种变化和修改,并不背离下面的权利要求书所定义的本发明的真正范围和精神。因此,本发明应将所有这些落在所附权利要求及其等效物的范围内的变化和修改包含在本发明内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号