当使用映射精简库20化来执行MSCR作为远程并行操作时,执行器310可W估计 映射工作器进程的数目并且基于MSCR的输入和输出的配置来减少为了执行相关联的处理 而需要的工作器进程。例如,执行器可W例如基于用于每个输入信道的输入数据的估计的 或者已知大小来估计用于每个输入信道的映射工作器进程的数目,并且类似地可W例如基 于将由每个输出信道处理的数据的估计的或者已知数量来估计精简工作器进程的数目。执 行器310继而可W合计映射工作器进程的数目和精简工作器进程的数目并且使运些工作 器进程使用映射精简库20化来援引。
[017引向每个映射工作器和每个精简工作器给予索引编号。例如,如果MSCR包括两个输 入信道,一个具有4个映射工作器进程而另一个具有5个映射工作器进程,则可W向9个工 作器给予从1至9的索引编号。运可W同样针对精简工作器进程而发生。运些索引编号被 用来分别关联给定映射工作器进程或者精简工作器进程与特定输入或者输出信道。继续前 例,索引编号1-4可W与第一输入信道相关联,而索引编号5-9可W与第二输入信道相关 联。
[0179] 执行器310也通过生成在MSCR的输入信道中实施多个映射操作的单个映射函数 和在MSCR的输出信道中实施多个精简操作的单个精简函数来将MSCR转译成单个映射精简 操作。映射函数使用映射工作器进程的索引作为用于选择将哪个映射操作应用于输入的基 础。例如,可W包括if-then语句作为映射函数的部分,其中映射工作器的索引编号是用于 if-then语句的判决点。
[0180] 因此,在映射精简库20化向映射工作器进程分配映射任务时,工作器的相关联的 索引与待工作于的文件的标识一起向映射函数中传递。索引编号继而规定映射函数对文件 中的元素援引哪个映射操作(parallelDo),并且由此指示工作器实施哪个输入信道。
[0181] 类似地,精简函数使用精简工作器进程的索引作为用于选择将哪个精简操作应用 于精简工作器进程的输入的基础。在向精简工作器函数分配精简任务时,工作器的相关联 的索引与待工作于的文件(该文件包含键分组输入的单个平坦化流)的标识一起向精简函 数中传递。索引编号继而规定精简函数对文件中的元素援引哪个精简操作,并且由此规定 工作器实施哪个输出信道。如果精简工作器进程实施分组输出信道,则精简工作器进程执 行CombineValues"组合"操作(如果存在),并且继而执行ParallelDo"精简"操作。如 果精简工作器进程实施直通输出信道,则精简工作器进程执行输出键/值对的取消分组操 作从而撤消映射精简库的隐式混洗的影响。
[0182]MSCR操作的输入信道中的每个输入信道可W向它的R个输出信道中的任何输出 信道发出键/值对。例如,输入信道2向输出信道1发送一个输出并且向输出信道3发送 另一输出而未向输出信道2发送输出。
[0183] 映射精简库20化通过映射工作器进程处理对数据输出的混洗,并且继而将输出 向正确精简器工作器寻路由。MSCR操作的输入信道中的每个输入信道可W向它的R个输出 信道中的任何输出信道发出键/值对。例如,输入信道2向输出信道1发送一个输出并且 向输出信道3发送另一输出而未向输出信道2发送输出。运例如由流水线库202c通过使 用映射精简库202b中的emitToSiarcKkey,value,shardNum)原语来处理,该原语允许流水 线库202c指明向哪个精简工作器进程发送映射工作器进程的给定输出。当从给定映射工 作器进程向特定输出信道发送输出时,流水线库202c可W计算与该输出信道对应的精简 工作器索引的范围、使用确定性函数来选择它们之一,并且使用emitTo化ard函数W向所 选精简器工作器发送输出。确定性函数可W包括对与输出值相关联的键的散列,其中散列 的结果确定选择用于输出的索引的范围内的精简工作器进程中的哪个精简工作器。运可W 保证向相同精简工作器进程发送与特定键相关联的所有数据。
[0184] 在一个实现方式中,映射精简库20化仅直接支持向单个输出的写入。另外,在映 射精简库20化的一个实现方式中,如果精简函数的输出预计键/值对,则向运一输出写入 的键必须与向精简函数中传递的键相同。对照而言,在一个实现方式中,每个MSCR输出信 道可W向零个、一个或者若干输出写入而对键无约束。为了实施运些更灵活的输出,精简函 数可W向输出直接写入,从而回避映射精简库的正常输出机制。如果MSCR的输出中的任何 输出满足映射精简库的输出的限制,则可W代之W使用映射精简库的正常机制来实施该输 出。
[0185] 在评价每个并行操作时,执行器310用适当数据填充延缓的对象W具体化对象 (466),直至完成所有操作,运时执行器310往回向应用202a返回控制(468)。
[0186] 图5示出了示例执行计划变换,该执行计划变换图示了ParallelDo生产者-消 费者融合和同胞融合。图形502图示了包括ParallelDo操作A504、B506、C508和D 510的原有图形。如图所示,ParallelDo操作A504、B506、C508和D510被融合成单个 ParallelDoA+B+C+D512W形成图形550。图形550中的新ParallelDo根据原有图形502 创建所有叶输出W及输出A. 1514,因为某一其它操作化518需要输出A.1 514。不再需要 并且在图形550中融合掉中间输出A. 0516。
[0187] 图6A和图她示出了示例执行计划变换600,该执行计划变换图示了MSCR融合。 图形601图示了包括Ξ个Grou地化巧操作GBK1 602、GBK2 604和GBK3 606的原有图形。 在运一示例中,所有Ξ个Grou地化巧操作602、604和606有关,并且因此如修正的图形650 中所示播种单个MSCR操作652。参照图形60LGBK1 602与GBK2 604有关,因为它们均消 耗ParallelDoM2 608的输出。GBK2 604与GBK3 606有关,因为它们均消耗ParallelDo M4.0 612。如由星号指明的那样,除了GBKl602之外的更后操作需要ParallelDoM2.0。 类似地,除了形成MSCR操作的那些操作之外的更后操作需要ParallelDoM4. 1。
[0188]参照图形 650,并入ParallelDoM2 608、M3 614 和M4 612 作为MSCR输入信道 616。Grou地化巧602、604、606操作中的每个操作变成分组输出信道620。GBK2的输出信 道并入CV2CombineValues操作 622 和R2ParallelDo操作 624。R3ParallelDo626 操作 也融合到输出信道中。为从非ParallelDo化1向GBK1的输入创建附加恒等输入信道。为 在MSCR操作之后使用的M2. 0和M4. 1PCollection创建两个附加直通输出信道(示出为 从映射器到输出的边)。所得MSCR操作650a具有4个输入信道616和5个输出信道620。
[0189] 图7A至图7E图示了例如由优化器306执行的数据流图形变换的示例。
[0190] 图7A图示了初始并行数据流水线700。为了简化,未示出并行数据对象。运一流 水线取得四个不同输入源并且写入两个输出。I吨utl由ParallelDo0A702处理。I吨ut2 由ParallelDo〇B704处理,并且I吨U口由ParallelDo〇C706处理。运两个操作的结果 一起被flatten〇708并且向ParallelDoOD710中馈送。使用推导的操作712count〇对 I吨ut4计数,并且结果由ParallelDoOE714进一步处理。使用推导的操作join〇716将 ParallelDo〇A、D和E702、710、714 的结果接合在一起。join0716 的结果由ParallelDo0 F718进一步处理。最后,向外部文件写出ParallelDo0A和F702W及718的结果。
[0191] 图7B图示了通过对原语(比如ParallelDo0和flatten0)W及推导的操作(比 如countO和joinO)的调用而构造的初始数据流图形720,运些推导的操作本身通过对 更低级操作的调用来实施。在运一示例中,countQ调用扩展成ParallelDoC:Map722、 Grou地化巧C:GBK724 和CombineValuesC:CV726,并且joinO调用扩展成ParallelDo 操作J:tagl726、J:Tag2 728 和J:Tag3 73〇W标示N个输入汇集FlattenJ:Fltn732、 Grou地化巧J:GBK734和ParallelDoJ:Untag736中的每个输入汇集W处理结果。
[0192] 图7C示出了通过将宿平坦化变换应用于图形720而产生的修正的数据流图形 738。通过消耗ParallelDo操作D710 和JTag: 2 728 来下推Flatten操作Fltn708。
[0193] 图7D示出了通过将Paral1eIDo融合变换应用于图形738而产生的修正的数 据流图形740。将生产者-消费者和同步融合二者应用于相邻ParallelDo操作W产生 ParallelDo操作 760、762、764、766 和 768。
[0194] 图7E示出了通过将MSCR融合变换应用于图形740而产生的最终修正数据流图形 748。Grou地化巧操作C:GBK724 和周围ParallelDo操作(C:Map722 和C:CV726)融合 成第一MSCR操作750。Grou地化巧操作J:GBK734变成第二MSCR操作752的核屯、操作并 且包括于分组输出信道中。第二MSCR操作752也在相应输入信道中包括剩余ParallelDo 操作770、762、764和766W及直通输出信道744。原有执行计划具有16个数据并行操作 (ParallelDo、Grou地化巧和CombineValues)。最终计划具有两个MSCR操作。
[0195] 尽管被描述成被实施为库,但是流水线库202c的功能附加地或者备选地还可W 被实施为服务,该服务允许客户端系统通过网络(比如因特网)访问功能。例如,流水线库 202c的功能可W在服务器系统上实施为Web服务,该Web服务具有Web服务应用编程接口 (API)的对应集合。Web服务API可W例如被实施为基于表示状态转移(REST)的HTTP接 口或者基于简单对象访问协议(S0A巧的接口。备选地或者附加地,可W提供接口(比如网 页)W通过网络访问服务。
[0196] 使用API或者接口,用户可W从客户端系统向服务发送由用户开发的程序。程序 例如可W包括使用并行汇集类302和并行操作304来实施的数据并行流水线。使用API或 者接口,用户可W指明用于流水线的数据并且向服务发送用于执行程序的消息。消息可选 地可W包括程序所需任何变元。一旦接收了消息,服务就执行程序并且实施评价器306、优 化器308和执行器310的功能W实施数据并行流水线。服务继而可W向客户端系统反馈程 序的任何输出。备选地或者附加地,用户程序可W在客户端系统上执行而程序使用APIW 使用由服务实施的评价器306、优化器308和执行器310的功能来实施数据并行流水线。
[0197] 图9图示了可W用来实施流水线库202c作为服务(另外称为流水线处理服务) 的系统900的示例。一般而言,用来在系统900中实施流水线处理服务的架构提供安全环 境,该安全环境允许外部开发者的程序的非置信代码在用来实施流水线处理服务的数据中 屯、内安全运行。运可W例如使用于操作数据中屯、的实体使流水线处理服务可用于未被实体 运用或者未W别的方式与实体联合或者被实体控制的第Ξ方开发者时。
[019引如下文更完全描述的那样,在图9中所示的实现方式中,将非置信数据并行处 理代码分解成两个逻辑片段,并且隔离每个片段W在安全处理环境("沙盒"或者"监狱 (jail)")内运行。一个片段是限定用户的数据并行计算(根据该数据并行计算构建数据 流图形)的可执行代码,并且另一片段是包含对数据操作的函数的可执行代码。
[0199] 例如,非置信代码的每个片段可W在运行客户操作系统并且模拟网络和盘连接的 硬件虚拟机(VM)中运行。硬件VM可W防止非置信代码直接访问主机或者本机环境,并且 可W提供仅通过具体已审核机制提供虚拟机W外的通信。硬件VM可W防止用户的代码有 权访问数据如何在数据中屯、内被存储和发送的细节。
[0200] 运一架构可W允许非置信代码在提供本机处理环境的数据中屯、基础结构上面运 行。用来在数据中屯、内存储和移动数据的文件系统和互连网络可W能够全速运行而用于消 耗数据的非置信代码在安全沙盒内运行,运可能减缓非置信代码。在一些情况下,移动数据 占用花费在执行数据并行计算的时间中的多数时间。在运一情况下,代码的执行与在由数 据中屯、基础结构提供的本机处理环境中直接运行相比可W仅经历总体执行时间的适度下 降。仅将非置信代码置于安全沙盒W内可W在一些实例中比将文件系统和网络的代码和实 现方式置于沙盒内更高效。仅将非置信代码置于沙盒内也可W使总体系统更易于保护,因 为与可W用来在沙盒内支持整个文件系统和网络的宽得多的通信信道对照存在用于非置 信代码与置信主机通信的受限信道。
[0201] 系统900包括客户端系统902和可W与数据中屯、100相似的数据中屯、904。客户 端系统902和数据中屯、904可W通过网络906 (比如因特网)相互通信。客户端系统902 存储用户程序或者应用908,该用户程序或者应用包括例如使用上文描述的并行数据汇集 类302和一个或者多个并行操作304来实施的数据并行流水线,运些并行数据汇集类和并 行操作由数据中屯、904提供的流水线处理服务支持。如下文进一步描述的那样,用户应用 908可W向数据中屯、904上传并且由数据中屯、904执行。
[0202] 数据中屯、904包括与处理模块104相似并且包括多种与计算机有关的部件(比如 存储器202、CPU204和网络接口 206)W执行数据处理的处理模块910、912和914。数据 中屯、904也包括外部可访问储存库916。
[0203] 处理模块910实施服务接口 918,该服务接口提供用于客户端系统902与流水线处 理服务交互的机制。例如,服务接口 918可W提供用于与服务交互的API。如上文描述的那 样,运样的API可W例如被实施为基于表示状态转移(REST)的HTTP接口或者基于简单对 象访问协议(SOA巧的接口。备选地或者附加地,服务接口 918可W提供可W显示于客户端 系统902上并且用来访问服务的用户接口,比如网页。API或者用户接口可W由客户端系统 的用户例如用来向数据中屯、904上传用户应用908、指明用于用户程序908的数据(例如, 由储存器916存储)并且向服务发送用于执行程序908的消息,其中消息可选地包括程序 908所需任何变元。
[0204] 处理模块912实施执行计划服务920和虚拟机922。虚拟机922可W是运行客户 操作系统并且模拟网络和盘连接的硬件虚拟机。例如,虚拟机922可W通过在x86架构上 虚拟化Linux的"内核虚拟机(KVM)"技术来实施并且可W作为用户进程而运行于置信主机 数据中屯、上。例如,在可从http://www.ΓΘ化at.com/f/p壯/rhev/DOC-KVM.D壯巧得的KVM 白皮书中描述了KVM。在其它实现方式中,虚拟机922可W被实施为过程虚拟机。一般而 言,过程虚拟机在操作系统中作为应用来运行、支持单个进程并且提供独立于平台的处理 环境。
[0205] 虚拟机922主控(和执行)上传的用户程序908和执行计划库924。当执行用户 程序908时,执行计划库924基于并行数据对象和并行操作来构建数据流图形,运些并行数 据对象和并行操作形成用户程序906中的流水线。为此,执行计划库924实施评价器926, 该评价器与评价器306相似地构造与数据并行流水线对应的延缓的对象和延缓的操作的 内部执行计划数据流图形。除了实施评价器926之外,执行计划库924还可W实施用于向 执行计划服务920传达数据流图形的表示的其它功能。例如,在一个实现方式中,执行计划 库924包括用于使用远程过程调用(RPC)跨越虚拟机边界向执行计划服务920通信的功 能。可W监视运些调用W保证进行适当调用。例如,执行计划服务920可W检查供给给定 函数的变元的有效性,并且按照被允许的函数调用的白名单检查函数调用。可W执行审核 W例如检测对未被允许由非置信代码访问的服务或者其它数据中屯、资源(例如,文件或者 其它基于RPC的服务)的请求(调查)。
[0206] 在一些实现方式中,可W配置虚拟机922W使得运些RPC调用是用于虚拟机内的 代码与虚拟机922外的环境交互的仅有方式。执行计划库926也可W实施用于一旦已经优 化和执行了数据流图形就从执行计划服务920接收实现对象的具体化的信息(例如,具体 化的对象本身的版本或者具体化的对象的表示)的功能。执行计划库922继而可W使用运 一信息W具体化内部数据流图形中的数据对象,从而使得用户程序906可W使用运些具体 化的对象。
[0207] 执行计划服务920处理对从执行计划库924发送的数据流图形的优化和执行。在 一个实现方式中,执行计划服务920是置信进程,该置信进程未执行任何非置信用户代码 并且具有对数据中屯、基础结构的完全访问权。执行计划服务920接受代表非置信执行计划 的信息并且使图形结构生效。执行计划服务920继而处理对图形的优化(也就是说,应用 如上文描述的图形变换)和对优化的图形的执行。
[020引为了处理优化,执行计划服务920实施优化器928。如同优化器308,优化器928 应用图形变换(比如上文描述的图形变换)W生成修正的数据流图形,该数据流图形包括 延缓的并行数据对象(或者子集)和延缓的组合并行数据操作,运些并行数据操作可W包 括MSCR。在一个实现方式中,如同优化器308,优化器928对初始执行计划执行减少总体操 作和组操作次数的一系列通过而W产生最少MSCR操作