用于机器集群的并行编程的基础构造的制作方法

文档序号:6467035阅读:149来源:国知局

专利名称::用于机器集群的并行编程的基础构造的制作方法
技术领域
:本公开涉及一种通过使用被设计为实现详细并行化计算计划的运算符软件库来对应用并行化的系统和方法。具体地,本公开涉及一种实现并4亍化应用的有效、经济的方式。
背景技术
:当前,一个机构在任何给定时间需要处理的数据量与使用单CPU(单处理器)系统的机构可用的计算能力之间存在着显著差异。今天,机构使用处理兆兆字节(terabyte)甚至千兆兆字节(petabyte)数据的应用,以便获取有价值的信息和商业洞察力。不幸的是,许多应用通常在单处理器机器上顺序运行,并且需要数小时甚至数天的计算时间来产生可用结果。在机构必须处理的数据量以及该机构可用的单处理器的计算性能之间的鸿沟持续加宽。由机构所采集和处理的数据量继续呈指数级增长。机构必须解决的企业数据库增长率是大约每年125%,或者说每10个月大小翻一番。其他数据丰富产业的数据容量也持续地呈指数增长。例如,天文学数据的倍增率是每12个月,而对于生物序列是每9个月,对于功能性染色体组是每6个月。尽管存储容量持续以指数率增长,但单处理器的速度不再呈指数增长。由此,尽管机构可能有能力继续增加数据存储容量,但是单处理器配置的计算性能不再保持同步。机构必须找到一种技术方案来应对存储容量与单处理器性能相脱离的趋势。为了处理大量的数据,应用需要大量计算能力和高1/0吞吐。程序员面临着这样的技术4先战要找到有效的方法在多个CPU之间划分计算处理以及对计算进行协调,从而解决计算能力的需求和供给之间的鸿沟。鉴于有限的网络带宽可用性这一现实,程序员还面临以下技术挑战解决向执行并行处理计算的多个CPU递送巨大数量数据所需的大带宽需求。仅仅将附加机器引入处理池(配置)不能增加配置的整体网络带宽,尽管本地盘I/O带宽可以因此而有所提高。网络拓朴有可能被表示为树,树具有表示网段的多个分支和表示处理器的叶子。由此,沿任何一个网段的单一瓶颈可以确定整个网络容量和配置的带宽。为了使带宽可伸缩,必须平衡本地盘1/0带宽增加的有效使用。与并行化计算操作相关联的显著技术挑战包括并行编程复杂性、适当的开发和测试工具、网络带宽伸缩性限制、存储容量和单处理器性能之间相脱离的趋势、以及在多处理器配置中对计算性处理的有效划分和协调。长期以来,一直需要经济、有效地实现并行计算方案并有效减轻程序员开发复杂并行程序的负担的系统和方法。
发明内容GridBatch提供了一种基础构造框架,程序员可以使用它来方便地将高级设计转换成为并行化计算实现。程序员在应用中分析计算的潜在并行化,将计算分解成为离散部分并且考虑数据划分计划,以实现最高性能。GridBatch实现由程序员开发的详细的并行化计算计划,而无需程序员创建低级逻辑来实现计算的执行。GridBatch提供了"运算符"(用于数据集操作的原语)库作为构建块以实现并行化。GridBatch在GridBatch库中隐藏了与并行编程相关联的所有复杂性,从而使程序员仅需要理解如何应用这些运算符来正确地实现并行化。尽管GridBatch可支持多种类型的应用,GridBatch为关注部署分析学(analytics)应用的程序员提供了特别的效益,这归因于分析学应用所使用的计算性运算符和分析学应用的独特特征。程序员通常编写分析学应用来从大数据集收集统计数据(诸如特定事件出现的频率)。分析学应用的计算需求通常包括对来自两个或者更多不同数据集的数据进行相关(例如,以SQL声明表达的表联接(join)所提出的计算需求)。GridBatch利用数据本地化技术来有效地管理盘I/O并且有效地伸缩系统带宽需求。换言之,GridBatch在多个处理器之间划分计算处理并且对计算进行协调,从而使处理器对本地数据执行计算。GridBatch使传输给多个处理器以执行并行处理计算的数据量最小化。通过隐藏并行编程复杂性、利用本地化数据来最小化网络带宽需求、以及在多个处理器之间管理计算处理的划分和协调,GridBatch解决了与并行化计算性操作相关联的技术问题。通过阅读下文的附图和详细描述,本发明的其他系统、方法和特征对于本领域技术人员是易见的或者将变得易见。意在将所有这些附加系统、方法、特征和优点包括在本说明书中,位于本发明的范围内,并且受到所附权利要求的保护。通过参考下文的附图和描述,将更容易理解本公开。在附图中的组件未必是按比例绘制的,强调的重点在于示出本发明的原理。此外,在附图中,贯穿不同视图,相同的数字表示相应的部分或者元素。图1示出了GridBatch系统配置;图2示出了主节点示例;图3示出了在处理分布(distribute)功能调用期间的GridBatch系统配置;图4示出了在处理联接(join)功能调用期间的GridBatch系统配置;图5示出了在处理巻积(convolution)功能调用期间的GridBatch系统配置;图6示出了在处理递归(recurse)功能调用期间的GridBatch系统配置;图7示出了GridBatch系统配置可以用来执行分布运算符的逻辑流;图8示出了GridBatch系统配置可以用来执行联接运算符的逻辑流;图9示出了GridBatch系统配置可以用来执行巻积运算符的逻辑流;图IO示出了GridBatch系统配置可以用来执行递归运算符的逻辑流;图11示出了在处理映射功能调用期间的GridBatch系统配置;以及图12示出了GridBatch100可以用来执行映射运算符的逻辑流。具体实施方式针对并行计算的早期研究关注在顺序应用中自动检测并行性。例如,工程师开发了计算机架构中的技术,例如乱序緩存,其被设计为检测指令之间的依赖性,并且以并行方式安排独立指令。此类技术仅;险查以顺序编程语言编程的代码,殳,而不能利用应用级并行性。由此,此类技术限制了可以利用的并行性的数量。大量应用(尤其是数据密集型批处理应用)表现出明显的数据级并行性。然而,实现并行应用存在多种4支术4兆战。当程序员设计并行化应用时,程序员必须解决与机器和处理器之间的通信、协调和同步有关的棘手问题。与顺序编程完全相反,给出并行程序的内在同步特性,程序员必须提前想到并行化程序配置中的所有机器之间的所有可能交互。另外,不存在用于并行化应用和配置开发的有效调试工具。例如,在具有在多个机器上运行的多个线程的配置环境中,可能难以在某些代码中执行步进(stepping)。另外,由于并行化应用中的复杂交互,程序员要识别实际上是瞬间观察到、并且难以再现的多个缺陷(bug)。程序员实现并行化应用所面临的技术挑战直接转化为较高的开发成本和较长的开发周期。另外,通常程序员不能将并行化方案移植或者复制至其他实现。程序员认为数据库系统非常适用于分析学应用。不幸的是,处于至少两个原因,数据库系统不能针对大数据集来进行伸缩。首先,数据库系统表示高级SQL(结构化查询语言),其目标在于隐藏实现细节。尽管SQL可能相对容易使用,但是从并行化的角度看,此类高级语言的特性迫使用户按照导致处理低效执行的方式来表达计算。与并行化处理仅读取一次数据集的、通过较低级语言(例如,C++)进行的编程相反,以SQL表达的同一处理可以导致执行多次读取。尽管已经开发了用以自动优化查询处理的技术,但是通过较低级语言实现的用以实现并行化计算的性能仍然远远超出了诸如SQL的较高级语言的性能。其次,数据库系统的I/O架构限制了分布式并行化实现的伸缩性,这是因为数据库假定数据访问是通过分布式文件系统或者SAN(存储区域网络)硬件而经由网络上的公共逻辑存储单元进行的。数据库没有利用对数据的物理映射的逻辑,因此没有利用数据本地性或者数据物理位置的优点。即使存在复杂的高速緩存机制,数据库通常通过不必要地遍历网络以及消耗宝贵的网络带宽来访问数据。分析学应用在多个方面不同于Web应用。分析学应用通常处理结构化数据,而Web应用通常处理非结构化数据。分析学应用通常需要跨越来自不同来源(例如,不同数据库表)的参考信息。分析学应用关注的统计数据通常比Web应用少的多。例如,字数统计应用需要针对词汇表中所有字的统计数据,而分析学应用可以仅关注于已销售的产品数量。详细的并行化应用实现可以表达为由GridBatch提供的基础运算符的组合。GridBatch节省了程序员用以实现和调试的大量时间,这是因为GridBatch为程序员解决了并行编程的问题。使用GridBatch,程序员确定期望的运算符组合、顺序运算符,并且使部署每个运算符的编程最小化。尽管将描述GridBatch的特定组件,但是符合GridBatch的制造产品可以包括其他或者不同的组件。例如,处理器可以实现为微处理器、微控制器、专用集成电路(ASIC)、离散逻辑或者其他类型电路或者逻辑的组合。类似地,存储器可以是DRAM、SRAM、闪存或者任何其他类型的存储器。实现下文所述处理和程序的逻辑可以存储(例如,作为计算机可读指令)在诸如光盘或者磁盘或者其他存储器的计算机可读介质上。备选地或者附加地,能够在实体间传输的逻辑可以通过电磁或者光信号方式来实现。标记、数据、数据库、表以及其他数据结构可以分别存储和管理,可以结合在单一存储器或者数据库中,可以是分布式的,或者可以按照多种不同方式逻辑地和物理地进行组织。程序可以是单个程序的部分、独立程序、或者跨越多个存储器和处理器而分布。此外,作为替代,程序或者程序的任意部分可以以硬件方式来实现。下文将描述一个示例,其中基于Web的零售商销售诸如PC和打印机的计算机设备。零售商使用需要兆兆字节存储的多个表来跟踪数据和信息容量,可以使用多个表来利用这些数据和信息得出分析学信息,所述多个表包括交易表、客户表以及分销商表。交易表存储售出的每项产品的ID以及购买者的客户ID的记录。客户表存储每个客户的客户信息,并且分销商表存储与零售商进行交易的每个分销商的有关信息。零售商可以使用GridBatch来分析多种分析学,某些分析学包括简单计数统计(例如,已经销售了多少特定产品,以及标识排名前IO的盈利客户)。零售商可以使用GridBatch来分析其中包括多个表和复杂计算的较为复杂的分析学。例如,零售商可以使用GridBatch来确定位于零售商的分销i殳施之一的附近地理区域中的客户数目,以l更测量分销网络的有效性。GridBatch基础构造在处理节点("节点")集群(cluster)上运行。在GridBatch集群环境中运行的两个软件组件称作文件系统管理器和任务调度器。文件系统管理器跨过集群中的所有计算节点来管理文件并且存储文件。文件系统管理器可以将大文件分割成为较小的块(chunk)并且将每个块存储在单独节点上。在集群中的所有节点之间,GridBatch可以是指定例如一个节点充当名称节点,而所有其他节点充当数据节点。数据节点保存大文件的块。在一个实现中,根据集群中的节点数目以及其他配置考虑,数据节点可以保存一个以上的大文件块。数据节点对读取指派给数据节点的块或者对其进行写入的客户端请求进行响应。名称节点保存用于文件系统的名称空间。名称节点维护从大文件到块列表的映射、指派给每个块的数据节点、以及每个数据节点的物理和逻辑位置。名称节点还对来自客户端的请求文件位置的查询进行响应,并且将大文件的块分配给数据节点。在一个实现中,GridBatch通过节点的IP地址来引用节点,从而使GridBatch可以直接访问节点。主节点还维护物理网络拓朴,其保持直接连接了哪些节点的记录。物理网络拓朴可以由管理员手工填入和/或通过自动拓朴发现算法来发现。通过指示可以发送和/或取回中间结果的附近相邻从节点,网络拓朴信息可以改进递归运算符的性能,以侵_降低网络带宽消耗。在下文中,将讨论在促进递归运算符执行中的简要拓朴描述及其使用。GridBatch文件系统跨过多个节点来分布大文件,并且向任务调度器通知每个块的位置,从而使任务调度器可以在主管待处理块的节点上调度任务。GridBatch的目标在于大规模数据分析问题,诸如其中需要处理大量结构化数据的数据仓库。文件通常存储具有相同模式(例如,对象所有者、或者结构、或者对象族)的大量数据记录。对于结构化数据,GridBatch使用数据划分将数据分割成较小片段,类似于数据库划分。GridBatch文件系统将文件存储在固定数目的块中,其中每个块具有块ID(CID)。程序员可以访问任何块,这独立于文系统中的其他块。在一个实现中,程序员可以指定GridBatch可以指派的块的数目。在另一实现中,GridBatch管理员指定GridBatch可指派的块数目,和/或GridBatch确定GridBatch基于可用的节点数目和/或其他系统配置资源考虑来确定GridBatch可以指派的块数目。在一个实现中,GridBatch文件系统将可以指派的最高CID设置为远大于N(N是集群中的节点数目)。GridBatch使用系统级查找表来规定从CID到N转换的映射。转换提供对集群大小的动态变化的支持,使得当配置将节点退出以及附加节点加入集群时,GridBatch文件系统可以自动重新平衡存储和负载。换言之,文件系统维护CID到数据节点的映射,并且在CID到数据节点的映射变化时(例如,当数据节点加入和/或离开GridBatch集群102时)自动将数据移至不同的节点。在一个实现中,GridBatch处理两种类型的数据集向量和索引向量。类似于数据库表的记录,向量包括记录集,GridBatch认为其彼此独立。向量中的记录可以遵循相同的才莫式,并且每个记录可以包括多个字段(类似于数据库列)。与向量相反但类似于索引数据库表,索引向量中的每个记录也可以具有相关联的索引。例如,索引向量中的记录的字段之一可以是索引向量的相关联索引,并且该索引可以是任意数据类型(例如,字符串或者整数)。当使用索引向量时,程序员定义如何通过划分功能在块之间划分数据。当需要写入新的数据记录时,文件系统调用划分功能来确定块ID,并且将新的数据记录附加至对应于该块ID的块之后。在一个实现中,用户定义的划分功能采取以下形式int[]partionFuncindex(X),其中X表示将被写入的记录的索引,而int[]表示整数的数组。划分功能应用散列(hash)功能来将索引转换为从1至CID范围中的一个或者多个整数,其表示将存储数据记录的所指派的块id。在另一实现中,划分功能可以采取以下形式int[]partitionFunc(distributionkeyX),其中X表示待写入记录的分布关考建字指示符,以指示将要使用的优选处理器和/或处理器组。当使用向量时,GridBatch文件系统可以将每个新记录写入随4几选4奪的块。在一个实现中,当用户请求创建用于索引向量的新文件时,用户向文件系统管理器提供用户定义的散列功能,该散列功能形式为int[]hashFunc(distributionkeyX)。散列功能接收分布关键字作为输入,并且产生1至CID范围内的一个或者多个整数。当写入新记录时,文件系统管理器调取散列功能来确定将新记录写入哪个划分。作为结果,GridBatch将索引向量划分为由文件系统管理器处理的新记录。任务调度器系统包括主节点和多个从节点。主节点可以使用主节点逻辑来实现主节点功能。从节点管理由主节点指派给从节点的任务的执行。主节点可以使用主节点逻辑来按照程序员在程序中表达的那样将任务(例如,计算)划分为多个较小的任务。在一个实现中,主节点逻辑在集群中的从节点之间分发任务,并且监控所述任务以确保所有任务成功完成。在一个实现中,GridBatch将数据节点指定为从节点。由此,当主节点调度任务时,主节点可以将任务调度到同样保存待处理数据的块的节点上。GridBatch通过降低网络带宽依赖性而提高了计算性性能,这是因为GridBatch将数据传输最小化,并且对节点的本地数据执行数据处理。GridBatch提供一组称作运算符的常用原语,程序员可以使用所述运算符来实现计算并行化。运算符处理将工作分布至多个节点的细节,由此使程序员避免了解决与实现并行编程方案相关联的复杂问题的负担。程序员将一组运算符引入程序,其方式与编写传统顺序化程序相同。GridBatch提供了五个运算符分布、联接、巻积、递归、映射。分布运算符将源向量或者源索引向量转换为具有目的地索引的目的地索引向量。该转换包括将数据从源数据节点传输至目的地数据节点。分布运算符采用以下形式VectorDistribute(VectorV,FuncnewParationFunc),其中V表示待转换的数据所驻留的向量,而newParationFunc表示划分功能,该划分功能指示GridBatch将生成新向量的目的地数据节点。在一个实现中,用户定义的划分功能采耳又以下形式int[]newPartitionFunc(indexX),其中X表示记录的索引,而int[]表示整数数组。用户定义的划分功能返回对应于目的地数据节点列表的数目列表。在一个实现中,分布运算符可以在所有节点上复制向量,使得每个节点具有精确副本以用于传统本地处理。当newPartionFunc返回所有数据节点的列表作为目的地节点时,可以得到所有节点上的向量复制。联接运算符接收两个索引向量,并且合并索引字段相匹配的相应记录。GridBatch标识具有匹配索引的相应记录,并且调取用户定义的联接功能。用户定义的联接功能可以简单地将两个记录合并(例如,类似于数据库联接),但是通常可以实现任何期望的功能。联接运算符采取以下形式VectorJoin(VectorX,VectorY,FuncjoinFunc),其中X和Y表示要联接的索引向量,而joinFunc表示将应用于索引向量中相应记录的用户定义的联接功能。联接运算符生成包括应用用户定义功能结果的新向量。用户定义的功能采取以下形式RecordjoinFunc(RecordZ,RecordK),其中Z和K分别表示向量X和Y的记录。当GridBatch调取用户定义功能时,GridBatch可以确保记录Z和K的索引相匹配。GridBatch可以在执行联接运算之前执行分布运算,使得GridBatch在联接将随后使用的相同索引字段上使用划分功能来划分向量X和Y。联接运算符对每个节点在本地执行联接,而无需确定GridBatch是否已经向每个节点分布或者取回了数据。在一个实现中,联接运算符在^L行联接之前自动执行分布运算符。当在索引字段上存在精确匹配时,可以使用联接运算符。然而,当程序员期望标识联接运算符的相反结果(例如,标识非匹配记录)时,针对每个记录K来4企查每个记录Z。巻积运算符标识匹配的Z和K记录,并且对每个匹配应用用户定义的功能。巻积运算符为程序员提供附加能力并且提供更多的计算性选择。在一个实现中,可以通过巻积运算符来实现涉及两个向量的所有计算性运算。巻积运算符可以使用任何向量字段对非索引向量和索引向量执行联接功能,甚至是联接将非索引字段用于联接的时候。巻积运算符采取以下开j式VectorConvolution(VectorX,VectorY,FuncconvFunc),其中X和Y表示两个输入向量,convFunc表示由程序员提供的用户定义的巻积功能。巻积运算符生成新向量作为结果。用户定义功能采取以下形式RecordconvFunc(recordZ,RecordK),其中Z和K分别表示向量X和Y的记录。convFunc功能确定是否应当#1行任何动作(例如,确定记录Z是否匹配于记录K),并且然后扭J于相应动作。GridBatch可以在执行巻积运算符之前执行分布运算符,使得GridBatch在巻积随后使用的相同索引字段上划分向量X和Y。巻积运算符对每个节点在本地执行计算,而无需确定GridBatch是否已经对每个节点分布或者取回数据。在其他实现中,巻积运算符在执行巻积之前自动执行分布运算符。作为一个示例,程序员可能期望确定位于零售商的分销商附近的客户数目。GridBatch文件系统生成客户向量以及分销商向量,其中客户向量包括指示每个客户的物理位置的物理位置字段,而分销商向量包括指示每个分销商的物理位置的物理位置字段。程序员可以使用GridBatch来根据两个向量的物理位置字段对客户向量和分销商向量进行合并。程序员可以使用convFunc来根据程序员指定的邻域评估每个客户和每个分销商之间的物理距离,并且将满足指定邻域的每个记录存储在结果向量中。在一个实现中,GridBatch递归运算符执行归约(reduce)运算,其得到所有向量记录并且将其合并成为单个结果。对向量记录执行的实际逻辑运算是通过用户指定功能来定义的。"加"是归约运算的一个示例,其中所有向量记录累加在一起。排序是归约运算的另一示例,其中针对彼此来检查向量的所有记录,以生成期望的序列。递归运算符在多个节点之间扩展归约运算。与执行较少归约运算的大多分析学应用相反,Web应用通常频繁地执行归约运算(例如,字数统计,其中每个字需要归约运算来累加出现的数目)。当程序员仅需要排序输出以用于报告或者少数统计时,大多数分析学应用的归约运算符变成了瓶颈并且限制应用的伸缩性。很多归约运算表现出交换性和结合性,并且可以独立于顺序而执行。例如,对事件出现数目进行计数包括称为"加法"(addition)的可交换、可结合运算符。加法出现的顺序不影响最终结果。类似地,排序可以是顺序无关的。GridBatch递归运算符执行顺序无关的归约运算,并且采取如下形式RecordRecurse(VectorX,FuncrecurseFunc),其中X表示用于归约的输入向量,并且rescurseFunc表示将要应用的用户定义的递归功能。递归运算符将向量合并为单个记录。用户定义的功能recurseFunc采取以下形式RecordrecurseFunc(RecordZl,RecordZ2),其中Z1和Z2表示向量X的两个子部合并所得到的部分结果。recurseFunc功能指定了如何进一步合并这两个部分结果。例如,如果向量X表示整数向量,并且程序员期待计算该整数的和,则程序员将使用加法功能作为用户定义的recurseFunc,其表达为Recordaddition(RecordZl,RecordZ2){returnnewRecord(Zl.value()+Z2.value());}。GridBatch将对向量X的记录递归地应用该加法功能,以最终计算向量中整数的总和。在另一示例中,向量X包括表示已排序字符串列表的记录,并且程序员期望对字符串进行排序以用于最终报告。表1示出了GridBatch可以如何实现用于对字符串进行排序的用户定义功能。用户定义功能将两个已排序字符串列表合并成为一个已排序字符串,并且当程序员实现将被递归调用的用户定义功能时,用户定义功能实现合并排序算法。<table>tableseeoriginaldocumentpage19</column></row><table>〃来自记录Z2的下一字符串Stringb=Z2.next();do{if(a<b){Z.append(a);a=Zl.next();else{Z.append(b);b=Z2.next();}while(!Zl.empty()&&!Z2.empty()returnx;J_递归并行化多个节点上的归约运算。另外,递归将用于需要部分结果的运算的网络流量最小化。例如,当程序员需要标识排名前IO的盈利客户时,每个节点计算本地前10的客户,并且将结果(例如,部分结果)转发至相邻节点,该相邻节点依次将所述部分结果与该接收节点的本地结果进行合并以产生前10名。每个节点仅将前10的记录传送至特定的相邻节点,而不是将每个节点的每个记录传送至执行归约运算的单个节点。由此,递归运算符避免了较大的带宽需求以及不希望的网络流量,并且提供了较高的计算性能。映射运算符对向量的所有记录应用用户定义的映射功能。映射运算符采用以下形式VectorMap(VectorV,FuncmapFunc),其中V表示向量,更具体地,表示mapFunc应用于其上的向量记录。用户指定映射功能可以采取以下形式RecordmapFunc(RecordX)。用户定义功能mapFunc接受输入向量的一个记录作为参数,并且产生用于结果向量的新记录。在一个实现中,当从节点未能完成任务时,GridBatch通过重新执行任务而容忍从节点的失败和错误。向量的每个向量块在被指定为备份节点的X个不同从节点上复制X次,其中X是常量,其可以由用户指定和/或基于配置、可用资源和/或历史观察而由GridBatch确定。在任意运算符的计算期间,如果从节点在其完成指派任务之前失败,则通知主节点并且主节点在保存该向量块备份副本的从节点上开始另一进程。当主节点没有接收到来自从节点的周期性心跳时,主节点将从节点标识为故障从节点。图1示出了GridBatch系统配置100(GridBatch),其中包括GridBatch集群102、应用104以及用户接口106。GridBatch100的组件通过网络108(例如,因特网、局域网、广域网或者任何其他网络)来通信。GridBatch集群102包括多个节点(例如,主节点116和从节点120)。每个从节点120可以包括通信接口113以及存储器118。GridBatch100指定主节点116,并将其余的节点指定为从节点(例如,从节点120)。GridBatch100可以将从节点指定为数据节点(例如,数据节点134),如下文进一步描述。从节点120使用从节点逻辑160来管理由主节点116指派给从节点120的从任务158的执行。图2示出了示例主节点116。主节点116可以包括通信接口211和存储器215。GridBatch100使用文件系统管理器逻辑222来跨越GridBatch集群102的所有节点管理和存储文件。在一个实现中,文件系统管理器逻辑222将大文件分割为较小的块,并且在从节点中存储所述块。文件系统管理器逻辑222维护CID到数据节点的映射,并且当CID到数据节点的映射改变时(例如,当数据节点加入和/或离开GridBatch集群102时)将数据自动移至不同节点。GridBatch100使用任务调度器230在GridBatch集群102中的所有节点之间对运算进行协调。在GridBatch集群102中的所有节点中,GridBatch100可以指定主节点116作为名称节点232,并且指定所有其他节点用作数据节点(例如,数据节点134)。名称节点232保存文件系统240的名称空间238。名称节点232维护文件到相应向量块列表、指派给每个块的数据节点、以及每个数据节点的物理和逻辑位置的向量映射242。名称节点232还对针对文件位置的任务请求244进行响应。在一个实现中,名称节点232将较大文件的块分配给数据节点。主节点116按照程序员在程序中表达的那样将任务252(例如,计算)划分成为从任务(例如,从任务158),任务调度器230在节点间分布这些从任务。在一个实现中,主节点116在GridBatch集群102中的从节点间分布从任务,并且监控从任务以确保所有任务成功完成。由此,当主节点116调度任务252时,主节点116可以将从任务(例如,从任务158)调度到同样保存待处理数据块的从节点上。例如,主节点116可以将任务252分解为与待处理数据本地驻留在向量块中的从节点相对应的从任务,从而使GridBatchIOO通过将数据传输最小化以及对节点的本地数据节点执行数据处理来降低网络带宽依赖性,以此提高计算性能。在一个实现中,GridBatch100实现主节点116上的主节点逻辑260,其协调GridBatch集群102、应用104以及用户接口106之间的通信和交互。主节点逻辑260还可以协调和控制文件系统管理器逻辑222以及任务调度器逻辑230。主节点逻辑260可以维护GridBatch软件库262,该GridBatch软件库262包括分布运算符逻辑264、联接运算符逻辑266、巻积运算符逻辑268、递归运算符逻辑270以及映射运算符逻辑278。主节点116可以接收任务轻轻244并且通过从节点和从节点逻辑160来协调任务请求244的执行。图3示出了在分布功能调用300的处理(例如,任务请求244)和分布运算符逻辑264的运行期间的GridBatch100。在一个实现中,主节点116接收分布功能调用300,以便通过包括第一向量标识符272(其标识将重新分布的第一向量)的参数来执行分布运算符,以获取在一组节点间重新分布的重新分布向量块。例如,第一向量可以表示先前在一组节点(例如,从节点1328、从节点3330以及从节点6332)间分布的向量,其具有分布向量块V1C1308、V1C2310以及V1C3312。向量块V1C1308、V1C2310以及V1C3312分别包括相应的向量块记录V1C1R1-V1C1RX322、V1C2R1-V1C2RY324以及V1C3R1-V1C3RZ326。主节点逻辑260通过在具有第一向量块的每组节点(例如,分别为从节点1328、从节点3330、以及从节点6332)上产生划分任务334来发起划分功能的执行。箭头336表示转换到如下节点状态,在该节点状态中,具有第一向量块的每个节点运行划分任务334。可以通过相应的划分任务334来评估第一向量块的每个向量块V1C1308、V1C2310以及V1C3312的记录,以1"更确定目的地向量块指派。例如,每个划分任务334可以评估在相应从节点上驻留的第一向量块记录,以^更确定目的地向量块位置以重新分布每个第一向量块记录。对于将重新分布第一向量块记录的每个目的地向量块位置(例如,目的地向量块指派),每个划分任务334可以在相应从节点上创建目的地向量块指派文件(例如,V1C1F1338、V1C2F1-V1C2F4-V1C2F3-V1C2F6340以及V1C3F1-V1C3F2-V1C3F5-V1C3F6342)。当每个划分任务334完成时,主节点116可以/人每个划分4壬务334接收任务完成通知。主节点116通过在每个从节点(例如,从节点1328、从节点3330、从节点4346、从节点5348、从节点6332以及从节点8350)上产生重新分布任务344来发起重新分布任务的执行。箭头346表示转换到以下节点状态,在该节点状态中,对应于目的地向量块的每个节点运行重新分布任务344。目的地向量块(例如,V1C1352、V1C2354、V1C3356、V1C4358、V1C5360以及V1C6362)通过由向量块指派文件(例如,V1C1F1338、V1C2F1-V1C2F4-V1C2F3-V1C2F6340以及V1C3F1-V1C3F2匿V1C3F5-V1C3F6342)标识的向量块位置来指示。重新分布任务344发起向量块指派文件到相应目的地从节点的远程复制,以便将向量指派文件布置到与被指派给从节点的向量块(例如,V1C1F1画V1C3F1-V1C2F1364、V1C3F2368、V1C2F3370、V1C2F4372、V1C3F5374以及V1C3F6-V1C3F6376)相对应的从节点上。重新分布任务344发起位于对应于特定目的地向量块的每个向量块指派文件中的记录(例如,V1C1R1画V1C1RX382、V1C2R1-V1C2RY384、V1C3R1-V1C3RZ386、V1C4R1画V1C4RQ388、V1C5R1-V1C5R1-V1C5RS390以及V1C6R1-V1C6RT392)的合并378。箭头380表示转换到如下节点状态,在该节点状态中,对应于.目的地向量块的每个节点执行合并378。合并378得到在一组节点间重新分布的第一向量的重新分布向量块。每个从节点的从节点逻辑160向主节点116发送指示合并378完成状态的完成通知。图4示出了在联接功能调用400的处理(例如,任务请求244)以及联接运算符逻辑266运行期间的GridBatch100。在一个实现中,主节点116接收具有如下参数的联接功能调用400,该参数包括第一向量标识符272和第二向量标识符274以及用户定义的联接功能(例如,用户定义功能276)。第一向量标识符272以及第二向量标识符274标识被划分为第一向量块(例如,V1C1404、V1C2406以及V1C3408)和第二向量块(V2C1410、V2C2412以及V2C3414)的第一向量和第二向量。第一向量块和第二向量块分别包括第一向量块记录(V1C1R1-V1C1RZ416、V1C2R8國V1C2RJ418以及V1C3R4画V1C3RL420)和第二向量块记录(V2C1R1-V2C1RY422、V2C2R7-V2C2RK424以及V2C3R4-V2C3RM426)。主节点116在对应于第一向量块和第二向量块位置的节点集合(例如,从节点1428、从节点4430以及从节点6432)上本地发起排序任务(例如,从任务158)的产生,以便针对位于该节点集合的每个节点上的第二向量来对每个第一向量块和第二向量块进行排序。在一个实现中,排序任务434分别根据在第一向量的每个第一向量记录(例如,V1C1R1IF-V1C1RZIF438、V1C2R8IF-V1C2RJIF440以及V1C3R4IF-V1C3RLIF442)以及第二向量的每个第二向量记录(V2C1R3IF-V2C1RYIF444、V2C2R7-V2C2RKIF446以及V2C3R4-V2C3RMIF448)种存在的联接索引字段的索引值来对第一向量记录以及第二向量记录进行排序。箭头436表示转换到如下节点状态,在该节点状态中,具有向量块的每个节点运行排序任务434。在一个实现中,排序任务434对第一向量记录和第二向量记录中存在的索引字段的索引值进行比较,以便确定包括相匹配索引值的第一向量记录以及第二向量记录,并且对具有相匹配索引字段值的第一向量记录和第二向量记录应用用户定义功能276(例如,用户定义的联接功能)。排序任务434冲丸行匹配任务450,该匹配任务450对第一向量记录和第二向量记录的索引字段的索引字段值进行比较。箭头452表示转换到如下节点状态,在该节点状态中,具有向量块的每个节点运行匹配任务450。匹配任务450对具有针对相应向量块的匹配索引字段值的第一向量记录和第二向量记录(例如,V1C2RBIF454和V2C2RPIF456、以及V1C2RBIF458和V2C2RPIF460)应用用户定义功能276(例如,用户定义联接功能),以获取联接功能块结果(例如,"NOJFC1R"462,JFC2R464以及JFC3R466)。当针对相应向量块的索引字段值不匹配时(例如,V1C1RXIF468和V2C1RYIF470),匹配任务450不对第一向量记录和第二向量记录应用用户定义的联接功能。联接功能块结果形成标识联接功能向量块(例如,JFVC1476和JFVC2478)的联接功能向量结果,该联接功能向量块包括从联接功能块结果(例如,JFC2R464和JFC3R466)获取的联接功能向量块记录(JFVC1RT480和JFVC2R3-JFVC2RN482)。在一个实现中,每个从节点的从节点逻辑160向主节点116发送指示排序任务434完成状态的完成通知。例如,在一个实现中,程序员可以使用GridBatch100来索引两个向量由产品id字段(例如,索引字段V1C1R1IF-V1C1RZIF438,V1C2R8IF-V1C2RJIF440和V1C3R4IF匿V1C3RLIF442)索引的产品向量(例如,由第一向量标识符272标识的第一向量)以及由客户ID字段(例如,索引字段V2C1R3IF-V2C1RYIF444,V2C2R7-V2C2RKIF446和V2C3R4-V2C3RMIF448)索引的客户向量(例如,由第二向量标识符274标识的第二向量)。产品向量包括对应于所购买产品的产品ID以及客户ID(例如,索引字段值)。客户向量保存客户ID以及客户的人口统计信息(例如,诸如年龄、地址、性别的索引字段值)。在程序员期望知晓购买特定产品的每个年龄群中有多少人的情况下,程序员以产品向量和客户向量作为参数来调取联接功能调用,以获取将产品ID信息与客户人口统计信息联系在一起的联接结果。在一个实现中,为了确保GridBatch在基于产品ID字段(例如,索引字段)来处理产品向量以及客户向量的联接功能调用400时的最高性能,程序员调取分布功能调用300来通过客户ID而不是产品ID来索引产品向量。分布功能调用确保GridBatch100根据客户ID字段将产品向量的记录分布给GridBatch集群102中的节点。GridBatch100继而可以对产品向量和客户向量二者的客户ID字段值相等的产品向量和客户向量的每个记录应用用户定义功能276(例如,用户定义联接功能),以获取联接功能向量结果。图5示出了在巻积功能调用500的处理(例如,任务请求244)以及巻积运算符逻辑268运行期间的GridBatch100。在一个实现中,主节点116接收具有参数的巻积功能调用500,该参数包括第一向量标识符272和第二向量标识符274以及用户定义的巻积功能(例如,用户定义功能276)。第一向量标识符272和第二向量标识符274标识被划分为第一向量块(例如,V1C1504以及V1C2506)和第二向量块(例如,V2C1508以及V2C2510)的第一向量和第二向量,该第一向量块和第二向量块对应于在GridBatch集群102的节点间分布的已划分向量块。第一向量块和第二向量块分别包括第一向量块记录(例如,V1C1R1-V1C1RZ512以及V1C3R4-V1C3RL514)和第二向量块记录(V2C1R3-V2C1RY516以及V2C3R4-V2C3RM518)。主节点116在对应于第一向量块和第二向量块位置的节点集合上(例如,从节点1520、从节点8522)本地发起巻积任务(例如,从任务158)的产生。箭头526表示主节点116在其上产生巻积任务524的每个节点的节点状态转换。巻积任务524对第一向量块记录以及第二向量块记录(例如,528和530)的置换(permutation)本地应用用户定义功能276(例如,用户定义巻积功能)。用户定义的巻积功能对相应第一向量块记录和第二向量块记录(例如,528和530)的每个置换进行评估,以获取巻积功能评估结果(例如,536、538、540和542)。对于其中用户定义的巻积功能对相应第一向量块记录和第二向量块记录的每个置换进行了评估的每个节点,箭头534表示其转换为一种节点状态。巻积功能评估结果可以指示何时相应第一向量块记录和第二向量块记录的置换得到巻积功能块结果记录(例如,CFC1R1-CFC1R3-CFC1R4-CFC1RZ536和CFC2R3-CFC2RK540)。巻积功能评估结果可以指示何时相应第一向量块记录和第二向量块记录的置换没有得到巻积功能块结果记录(例如,"NOCFClRX,,538和"NOCFC2RY"542)。用户定义的巻积功能可以将巻积功能结果转换为巻积功能块结果记录(例如,CFVC1R1-CFVC1R3画CFVC1R4-CFVC1RZ548和CFVC2R3-CFVC2RK550),以获取针对每个节点(例如,从节点1520和从节点8522)的巻积功能结果。例如,在一个实现中,程序员可以调耳又巻积功能调用500,以确位于零售商的分销商附近的客户数目。文件系统管理器逻辑222可以包括客户向量(例如,由第一向量标识符272标识的第一向量)和分销商向量(例如,由第二向量标识符274标识的第二向量),其中所述客户向量包括指示每个客户物理位置的物理位置字段,以及所述分销商向量包括指示每个分销商物理位置的物理位置字段。程序员可以调取巻积功能调用500来根据物理位置字段来对客户向量和分销商向量应用用户定义的巻积功能(例如,用户定义的功能276),以评估每个客户和每个分销商之间的物理距离,并且获取巻积功能结果向量。在一个实现中,用户定义的巻积功能可以表示为convFunc。在巻积调用之前,可以根据每个客户向量记录中存在的物理位置字段(例如,索引字段)将客户向量划分成为跨过GribBatch集群102的节点而划分的客户向量块(例如,第一向量块V1C1504和V1C2506)。可以将分销商向量块(例如,第二向量块V2C1508和V2C2510)复制到集群的所有节点。这可以通过提供划分功能来实现,该划分功能总是向分布运算符返回所有节点的列表。用户定义的巻积功能对驻留在相应从节点上的客户向量记录和分销商向量记录的置换进行评估,以获取巻积功能块结果记录。换言之,假设客户向量块具有数目为Z的记录,并且分销商向量块具有数目为K的记录,则用户定义的巻积功能可以对数目为ZxK的置换进行评估,其中对于客户向量块的每个记录1至Z,GridBatchIOO对分销商向量块的每个记录1至K应用用户定义的巻积功能。由GridBatch集群102的每个从节点执行的巻积功能调用的结果得到相应的巻积功能向量块,以获取针对每个节点(例如,从节点1520和从节点8522)的巻积功能结果。图6示出了在递归功能调用600的处理(例如,任务请求244)和递归运算符逻辑270运行期间的GridBatch100。在一个实现中,主节点116接收具有如下参数的递归功能调用600,所述参数包括第一向量标识符272以及用户定义的递归功能(例如,用户定义功能276)。第一向量标识符272标识被划分为第一向量块(例如,V1C1604、V1C2606以及V1C3610)的第一向量,该第一向量块对应于在GridBatch集群102的节点间分布的已划分向量块。第一向量块包括第一向量块记录(例如,V1C1R1-V1C1RX616、V1C1R3-V1C1RJ618、V1C2R1-V1C2RY620、V1C2RK-V1C2RN622、V1C3R4-V1C3RZ624以及V1C3RG-V1C3RM626)。主节点116在对应于第一向量块位置的节点集合(例如,从节点1628、从节点4630以及从节点6632)上本地发起递归任务634(例如,从任务158)的产生。箭头636表示转换到如下节点状态,在该节点状态中,具有第一向量块的每个节点运行递归任务634。最初,递归任务634对第一向量块记录应用用户定义的递归功能,以针对每个第一向量块产生中间递归向量块结果(例如,IRV1C1R1638、IRV1C1R2640、IRV1C2R1642、IRV1C2R2644、IRV1C3R1646和IRV1C3R2648)。递归任务对该中间递归向量结果调取用户定义递归功能,以产生中间递归乂人节点结果(例如,IRSN1R650、IRSN4R652以及IRSN6R654)。递归任务将中间递归^Mv节点结果的子集(例如,IRSN1R650)发送给节点集(例如,从节点4630),并且递归任务对中间结果(例如,IRSN1R650和IRSN4R652)迭代用户定义的递归功能的调取,以生成渐少的中间从节点结果(例如,IFIRSN4R660)。递归任务将渐小的中间结果的子集(例如,IFIRSN4R660)发送给渐小的节点集的子集(例如,从节点6632),直到GridBatch100获取该节点集中最终节点上的最终递归结果(例如,FRR668)。在一个实现中,由递归任务发送给节点集的子集的中间结果子集包括产生渐少的中间结果子集的中间结果的一半。类似地,随后由递归任务发送给节点集的子集的渐少的中间结果的每个子集包括渐少的中间结果的一半。在一个实现中,通过标识可以发送和/或取回中间结果的相邻邻居从节点,递归运算符逻辑270使用网络拓朴信息来改进递归运算符的计算性能,以降低网络带宽消耗。程序员、用户和/或GridBatch100可以定义确定某节点是否构成另一节点的附近邻居的因素。可以用来确定是否为某节点指定附近邻居的因素可以包括从节点之间数据传输的时间、从节点之间网络跳跃(hop)的数目(例如,网络路由器的数目)、或者数据传输时间和网络跳-夭的组合。图6示出了GridBatch递归运算符逻辑270如何在GridBatch集群102的从节点间分布中间结果。从节点可以计算本地中间递归结果(例如,IRSN1R650、IRSN4R652以及IRSN6R654)。从节点子集(例如,从节点1628)可以将本地中间递归结果(例如,IRSN1R650)传送至从节点的自己(例如,从节点4630)。从其他从节点接收到中间递归结果的从节点可以迭代地将本地中间结果(例如,IRSN4R652)应用于所传送的中间结果(例如,IRSN1R650)。从节点的子集(例如,一半从节点)迭代地将中间结果传送给具有本地中间结果的另一半节点(该另一半节点例如将所传送的中间结果折叠(fold)到本地中间结果中),直到单个从节点(例如,从节点6632)产生了最终递归结果(例如,FRR668)。在一个实现中,主节点确定用于将中间结果传递至节点集中从节点的方案、以及产生最终递归结果(例如,FRR668)所需的折叠迭代数目。图7示出了GridBatch100可以用来执行分布运算符的逻辑流。在一个实现中,主节点116接收分布功能调用300以执行分布运算符。在一个实现中,分布功能调用300可以表达为Distribute(VectorV,FuncnewPartitionFunc)。向量V表示源向量,并且newPartitionFunc表示确定向量V中数据的新节点位置的功能。图7以及这里的描述使用向量U作为符号化辅助,以便解释向量V中数据的重新分布。向量V包含与向量U相同的数据。分布功能调用300得到一个剩余向量,其可能被划分为可以重新分布至不同节点集的新块。主节点逻辑260产生对应于向量V的每个向量块的乂人任务(例如,从任务158)(702)。在一个实现中,从节点任务的数目等于向量V的向量块的数目。从任务驻留在相应的向量块所驻留的从节点上(704)。将从任务本地化至驻留有相应向量块的从节点可以使数据传输最小化,并且避免网络带宽伸缩的问题。从节点调取从节点逻辑212以生成对应于向量U的向量块的输出文件,其中GridBatch100将重新分布向量V的记录(706)。从节点逻辑160对V的相应向量块的每个记录进行评估,以确定GridBatch100将要重新分布记录的向量U的块标识符。从节点逻辑160将记录写入到与GridBatch100将要重新分布向量V的记录的向量U的向量块相对应的输出文件。当每个从任务完成了对V的相应向量块的记录的评估时,每个从任务将从任务的完成状态以及对应于向量U的向量块的输出文件位置通知给主节点逻辑260(708)。主节点逻辑260在GridBatch100将要把向量V的向量块重新分布到向量U的向量块的从节点上产生新的从任务(710)。每个从任务接收输出文件的位置列表,该输出文件包括与对应于从任务的从节点相对应的U的向量块,并且每个从任务将该输出文件获取到从节点(例如,使用远程复制操作或者其他文件传输)。每个从节点将输出文件合并至U的相应向量块之中,并且向主节点逻辑260通知从任务的完成状态(712)。在一个实现中,分布功能调用300将第一向量的所有记录分布至所有可用的乂人节点。例长口,表达为Distribute(VectorV,FuncnewPartitionFunc)的分布功能调用300的newPartitionFunc可以指引GridBatch100将向量V的每个记录分布至所有可用的从节点,以便将向量V复制到所有可用的从节点上。图8示出了GridBatch100可用来执行联接运算符的逻辑流。在一个实现中,主节点逻辑260接收联接功能调用400,以对向量X和向量Y进行联接。在一个实现中,联接功能调用400可以表达为VectorJoin(VectorX,VectorY,FuncjoinFunc)(802)。主节点逻辑260产生对应于向量块编号(例如,向量块id)的从任务,其中文件系统管理器逻辑222将向量X和向量Y划分为相等数目的向量块,并且文件系统管理器逻辑222为X的向量块和Y的向量块指派相应的块编号或者向量块id(804)。例如,文件系统管理器逻辑222可以为驻留在相应从节点上的X的向量块以及Y的向量块二者指派特定的块id。在一个实现中,从任务根据索引字段值来对驻留在相应从节点上的X的向量块的记录以及Y的向量块的记录进行排序(806)。从任务调取从节点逻辑160,并且对X的向量块的记录以及Y的向量块的记录的索引字段值进行评估。当X的向量块的记录和Y的向量块的记录的索引字段值相等时(808),GridBatch100调取用户定义的联接功能(例如,用户定义功能276)。在一个实现中,用户定义的联接功能可以表达为RecordjoinFunc(RecordZ,RecordK),该功能将X的向量块的记录和Y的向量块的记录进行联接(814)。若从节点逻辑160评估X的向量块的记录Z的索引字段值小于Y的向量块的记录K的索引字段值,则从节点逻辑160对X的向量块的下一记录Z与Y的向量块的记录K的索引字段值进行评估(810)。若从节点逻辑160评估X的向量块的记录Z的索引字段值大于Y的向量块的记录K的索引字段值,则从节点逻辑160对Y的向量块的下一记录K与X的向量块的记录Z的索引字段值进行评估(812)。从节点逻辑160对X的向量块的每个记录Z以及Y的向量块的每个记录K进行评估(816)。图9示出了GridBatch100可以用来执行巻积运算的逻辑流。在一个实现中,主节点逻辑260接收巻积功能调用500,以处理向量X和向量Y(902)。在一个实现中,巻积功能调用500可以表达为VectorConvolution(VectorX,VectorY,FuncconvFunc),其中convFunc是用户定义的巻积功能。对于向量X的向量块的每个记录1至Z,主节点逻辑260对向量Y的向量块的记录1至K应用表达为RecordconvFunc(RecordZ,RecordK)的用户定义的巻积功能(例如,用户定义的功能276)(904)。换言之,若向量X的向量块具有数目为Z的记录、并且向量Y的向量块具有数目为K的记录,用户定义巻积功能对记录对数目为ZxK的记录配对置换进行评估。从节点逻辑160对向量Y的每个记录1至K应用用户定义的巻积功能(906),并对向量块X的每个记录1至Z应用用户定义的巻积功能(908)。图10示出了GridBatch100可以用来执行递归运算符的逻辑流。在一个实现中,主节点逻辑260接收递归功能调用600以递归向量X。在一个实现中,递归功能调用600可以表示为RecordRecurse(VectorX,FuncrecurseFunc)。主节点逻辑260生成对应于在相应从节点上驻留的每个向量块的递归运算从任务(1002)。从任务调取从节点逻辑160来对相应从节点上驻留的向量X的向量块的第一记录和第二记录进行归约(例如,合并)。从节点逻辑160存储中间递归(例如,合并)结果(1004)。从节点逻辑160评估是否存在向量X的向量块的更多记录(1006),并且将向量X的向量块的下一记录合并到中间合并结果(1008)。只要从节点逻辑160获取了向量X的向量块的中间合并结果,每个从节点便向主节点逻辑260通知从任务的完成状态(1010)。从任务的子集(例如,一半)向具有本地中间结果的其余从任务(例如,另一半)发送中间合并结果。接收中间合并结果的从任务子集对该中间合并任务与本地中间合并结果进行合并(1012)。具有中间合并结果的从节点迭代地将中间合并结果折叠到较少的从节点,直到从节点将数目渐少的中间合并结果合并到驻留在一个从节点上的最终合并结果之中(1014)。图ll示出了在映射功能调用1100的处理(例如,任务请求244)以及执行映射运算符逻辑278期间的GridBatch100。映射运算符可以表达为VectorMap(VectorV,FuncmapFunc),其中V表示向量,更具体地,表示将要应用mapFunc以获取向量V的映射记录的新向量的向量记录。映射运算符允许用户对所有向量记录应用用户定义的功能。在一个实现中,主节点逻辑260接收具有参数的映射功能调用1100,该参数具有第一向量标识符272以及用户定义的映射功能(例如,用户定义功能276)。第一向量标识符272标识;陂划分为第一向量块(例如,V1C11104、V1C21108以及V1C31110)的第一向量,其中该第一向量块对应于在GridBatch集群102的节点间分布的已划分向量块。第一向量块包括第一向量块记录(例如,V1C1R11116、V1C1RX1118、V1C2R11120、V1C2RY1122、V1C3R41124以及V1C3RZ1126)。主节点116在对应于第一向量块位置的节点集(例如,从节点11128、从节点41130以及从节点61132)上本地发起映射任务1134(例如,从任务158)的产生。箭头1136表示转换到以下节点状态,在该节点状态中,具有第一向量块的每个节点运行映射任务1134(例如,并行运行的映射任务1150、1152和1154)。映射任务1134对每个第一向量块记录应用用户定义的映射功能,以产生形成向量M的映射向量块的映射向量块记录。箭头1158表示转换到以下节点状态,在该节点状态中,具有第一向量块的每个节点包括具有相应的映射向量块记录(例如,VMC1R11166、VMC1RX1168、VMC2R11170、VMC2RY1172、VMC3R41174以及VMC3RZ1176)的相应映射向量块(例如,VMC11160、VMC21162以及VMC31164)。例如,销售记录向量1180可以包括客户ID、产品ID、购买日期字段以及多个其他字段。然而,对于特定分析,可能仅对销售记录向量的两个字段感兴趣,诸如客户ID和产品ID。为了高效的处理性能,程序员可以调取映射功能调用IIOO来执行映射运算符,以便仅从销售记录向量中提取客户ID和产品ID字段;映射功能调用1100可以表达为如下形式VectornewVector=Map(saleRecordVector,chop)。用户定义的chop(切除)功能对销售记录向量1180的每个记录进行解析,以产生在newVector1182记录中仅包括客户ID以及产品ID字^a的新记录。图12示出了GridBatch100可以用来执行映射运算符的逻辑流。主节点逻辑260接收映射功能调用1100以映射向量V(1202)。主节点逻辑260产生对应于向量V的每个向量块的从任务(1204)。从任务调取从节点逻辑160来定位指派给相应从节点的向量V的每个向量块(1206)。对于向量V的每个向量块,从节点逻辑160对每个向量块记录应用用户定义的mapFunc,以获取形成向量M的映射向量块的映射向量块记录(1208)。只要从节点逻辑160已经对向量V的每个向量块记录应用了mapFunc,每个从任务^f更向主节点逻辑260通告从任务的完成状态以及M的相应映射向量块的位置。当从节点向主节点通告所有从任务已经完成时,映射运算符成功完成(1210)。向量M的映射向量块组合以形成新的向量M。GridBatch提供的附加运算符对于并行编程技术产生了意想不到的良好结果。特别地,相对于应用并行化中的现有尝试,每个运算符提供了显著的优点。对于现代商业所面临的极端困难的问题,尤其是对于必须在现实的时限内进行处理以获得有意义结果的大量数据而言,意想不到的良好结果包括的显著附加编程灵活性、有效性以及可应用能力。MapReduce编程才莫型实现一元编程构造。具体地,Map(映射)功能通常与Reduce(归约)功能配对。另一方面,GridBatch提供多个独立的运算符递归、巻积、联接、分布以及映射,实际上,程序员可以按照任何顺序或者顺序地使用这些运算符来建立跨过多个节点并行运行的复杂应用。此外,GridBatch框架实现专用于独立运算符的用户定义功能,程序员可以通过其来极大程度地实现客户功能性。此类用户定义功能包括划分功能,用于确定如何将向量划分成为块;散列功能,用于在节点间分布向量块;联接功能,用于指定如何对记录进行组合;巻积功能,用于支持联接运算符;递归功能,用于指定如何将递归运算符的部分结果进行合并;以及映射功能,用于应用于向量的记录。已经描述了多个实现。然而,应该理解,在不脱离本发明精神和范围的情况下,可以进行各种修改。由此,其他实现也在所附权利要求书的范围内。权利要求1.一种产品,包括机器可读介质;存储在所述介质上的第一运算符逻辑,其可进行操作以在多个处理节点之上并行地实现第一数据处理运算,所述第一数据处理运算由在所述多个处理节点上执行的第一用户定义功能来定制;以及存储在所述介质上的第二运算符逻辑,其可进行操作以在所述多个处理节点之上并行地实现第二数据处理运算,所述第二数据处理运算由在所述多个处理节点上执行的第二用户定义功能来定制。2.根据权利要求1所述的产品,进一步包括存储在所述介质上的文件系统管理器逻辑,其可进行操作以根据用户定义的散列功能在所述多个处理节点间指派第一向量的向量块。3.根据权利要求2所述的产品,其中所述文件系统管理器逻辑可进一步进行操作以向任务调度器提供所述向量块的向量块节点位置信息。4.根据权利要求2所述的产品,其中所述文件系统管理器逻辑可进一步进行操作以对所述向量块进行重配。5.根据权利要求2所述的产品,其中所述文件系统管理器逻辑可进一步进行才喿作以维护块ID到标识每个块ID数据节点指派的所述多个处理节点的映射;以及当所述映射变化时对所述向量块进行重配。6.根据权利要求1所述的产品,其中所述第一运算符逻辑或者第二运算符逻辑包括联接运算符逻辑;所述第一用户定义功能或者第二用户定义功能包括用户定义的联接功能;并且其中,当在所述多个处理节点间分布的第一向量和第二向量中存在的联接索引字段针对所述第一向量中的第一匹配记录和所述第二向量中的第二匹配记录相匹配时,所述联接运算符逻辑可进行操作以针对所述第一匹配记录和所述第二匹配记录来调耳又所述用户定义的联接功能,以获取联接结果。7.根据权利要求6所述的产品,进一步包括存储在所述介质上的主节点逻辑,其可进行操作以接收联接功能调用;以及在所述多个处理节点中本地发起联接任务的产生,每个联接任务可进行操作以选择性地发起所述用户定义联接功能的执行。8.根据权利要求1所述的产品,其中所述第一运算符逻辑或者第二运算符逻辑包括递归运算符逻辑;所述第一用户定义功能或者第二用户定义功能包括用户定义的递归功能;并且其中,所述递归运算符逻辑可进行操作以调取所述用户定义的递归功能,该递归功能在所述多个处理节点上针对向量块本地开始执行,以产生中间结果;将所述中间结果的子集传送至所述多个处理节点的子集;以及迭代地进行针对所述中间结果调取所述用户定义的递归功能,以产生渐少的中间结果;以及将所述渐少的中间结果的子集传送至所述多个处理节,*、的渐小的子集;直到在第一节点集中的最终节点上的第一向量之上获得最终迭代结果。9.根据权利要求8所述的产品,进一步包括存储在所述介质上的主节点逻辑,其可进行操作以接收递归功能调用;以及在所述多个处理节点中本地发起递归运算任务的产生,每个递归运算任务可进行操作以选择性地发起所述用户定义的递归功能对所述向量块的执行。10.根据权利要求1所述的产品,其中所述第一运算符逻辑或者第二运算符逻辑包括巻积运算符逻辑;所述第一用户定义功能或者第二用户定义功能包括用户定义的巻积功能;并且其中所述巻积运算符逻辑可进行操作以针对第一向量中的每个记录而对第二向量中的每个记录调取所述用户定义的巻积功能,以获取巻积功能结果。11.根据权利要求IO所述的产品,进一步包括存储在所述介质上的主节点逻辑,其可进行操作以接收巻积功能调用;以及在所述多个处理节点中本地发起巻积运算任务的产生,每个巻积运算任务可进行操作以选择性地发起所述用户定义的巻积功能的执行。12.根据权利要求1所述的产品,其中所述第一运算符逻辑或者第二运算符逻辑包括分布运算符逻辑;所述第一用户定义功能或者第二用户定义功能包括用户定义的划分功能;并且其中所述分布运算符可进行操作以根据所述用户定义的划分功能来对先前作为第一向量块在所述多个处理节点间分布的第一向量进行重新分布,以获取在所述多个处理节点间重新分布的所述第一向量的重新分布向量块。13.根据权利要求1所述的产品,其中所述第一运算符逻辑或者第二运算符逻辑包括映射运算符逻辑;所述第一用户定义功能或者第二用户定义功能包括用户定义的映射功能;并且功能应用于在所述多个处理节点间分布的向量的记录。14.一种用于并行处理数据的方法,包括在多个处理节点之上并行地发起第一数据处理运算的执行,所述第一数据处理运算由在所述多个处理节点上执行的第一用户定义功能来定制;以及在所述多个处理节点之上并行地发起第二数据处理运算的执行,所述第二数据处理运算由在所述多个处理节点上执行的第二用户定义功能来定制。15.根据权利要求14所述的方法,进一步包括根据用户定义的散列功能在所述多个处理节点中指派第一向量的向量块。16.根据权利要求15所述的方法,进一步包括向任务调度器提供所述向量块的向量块节点位置信息。17.根据权利要求15所述的方法,进一步包括对所述向量块进行重配。18.根据权利要求14所述的方法,其中-,所述第一运算符逻辑或者第二运算符逻辑包括联接运算符逻辑;所述第一用户定义功能或者第二用户定义功能包括用户定义的联接功能;并且其中,当在所述多个处理节点间分布的第一向量以及第二向量中存在的联接索引字段针对所述第一向量中的第一匹配记录和所述第二向量中的第二匹配记录相匹配时,所述联接运算符逻辑针对所述第一匹配记录和所述第二匹配记录调取所述用户定义的联接功能,以获取联接结果。19.根据权利要求18所述的方法,进一步包括接收联接功能调用;以及在所述多个处理节点中本地发起联接任务的产生,每个联接任务可进行操作以选择性地发起所述用户定义的联接功能的执行。20.根据权利要求14所述的方法,其中所述第一运算符逻辑或者第二运算符逻辑包括递归运算符逻辑;所述第一用户定义功能或者第二用户定义功能包括用户定义的递归功能;并且其中所述递归运算符逻辑调取所述用户定义的递归功能,该功能在所述多个处理节点上针对向量块本地开始执行,以产生中间结果;将所述中间结果的子集传送至所述多个处理节点的子集;以及迭代进行对所述中间结果调取所述用户定义递归功能,以产生渐少的中间结果;以及将所述渐少的中间结果的子集传送至所述多个处理节,存、的渐小的子集;直到在第一节点集中的最终节点上的第一向量之上获得最终递归结果。21.根据权利要求20所述的方法,进一步包括接收递归功能调用;以及在所述多个处理节点中本地发起递归运算任务的产生,每个递归运算任务可进行操作以选择性地发起所述用户定义的递归功能对所述向量块的执行。22.根据权利要求14所述的方法,其中所述第一运算符逻辑或者第二运算符逻辑包括巻积运算符逻辑;所述第一用户定义功能或者第二用户定义功能包括用户定义的巻积功能;并且其中所述巻积运算符逻辑针对第一向量中的每个记录而对第二向量中的每个记录调取所述用户定义的巻积功能,以获取巻积功能结果。23.根据权利要求22所述的方法,进一步包括接收巻积功能调用;以及在所述多个处理节点中本地发起巻积运算任务的产生,每个巻积运算任务可进行操作以选择性地发起所述用户定义的巻积功能的执行。24.根据权利要求14所述的方法,其中所述第一运算符逻辑或者第二运算符逻辑包括分布运算符逻辑;所述第一用户定义功能或者第二用户定义功能包括用户定义的划分功能;以及前作为第一向量块分布的笫一向量在所述多个处理节点中进行重新分布,以便获取在所述多个处理节点中重新分布的第一向量的重新分布向量块。25.根据权利要求14所述的方法,其中所述第一运算符逻辑或者第二运算符逻辑包括映射运算符逻辑;所述第一用户定义功能或者第二用户定义功能包括用户定义的映射功能;以及其中所述映射运算符逻辑将所述用户定义的映射功能应用于在所述多个处理节点间分布的向量的记录。全文摘要本公开涉及一种用于机器集群的并行编程的基础构造。具体地,GridBatch提供一种基础构造框架,该基础构造框架隐藏了程序员实现详细并行化计算的开发逻辑及编程应用的复杂性和负担。程序员可以使用GridBatch来实现并行化的计算操作,并行化计算操作可使网络带宽需求最小化,并且在多处理器配置中有效地划分和协调计算性处理。GridBatch提供了一种有效和轻便的方法,以便使用经济可行的多处理器配置来快速建立并行化应用,以实现最高性能结果。文档编号G06F9/46GK101403978SQ20081016602公开日2009年4月8日申请日期2008年9月28日优先权日2007年10月1日发明者欢刘申请人:埃森哲环球服务有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1