CN103109260B - 数据的并行处理 - Google Patents

数据的并行处理 Download PDF

Info

Publication number
CN103109260B
CN103109260B CN201180032739.5A CN201180032739A CN103109260B CN 103109260 B CN103109260 B CN 103109260B CN 201180032739 A CN201180032739 A CN 201180032739A CN 103109260 B CN103109260 B CN 103109260B
Authority
CN
China
Prior art keywords
parallel
data
delayed
computing environment
secure computing
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.)
Active
Application number
CN201180032739.5A
Other languages
English (en)
Other versions
CN103109260A (zh
Inventor
C·D·查姆伯斯
A·拉尼瓦拉
F·J·皮里
R·R·亨利
J·蒂加尼
S·R·阿达姆斯
R·布拉德肖
N·韦曾鲍姆
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Priority to CN201510772809.0A priority Critical patent/CN105279022B/zh
Publication of CN103109260A publication Critical patent/CN103109260A/zh
Application granted granted Critical
Publication of CN103109260B publication Critical patent/CN103109260B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/314Parallel programming languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24532Query optimisation of parallel queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24547Optimisations to support specific applications; Extensibility of optimisers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/034Test or assess a computer or a system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4494Execution paradigms, e.g. implementations of programming paradigms data driven

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Databases & Information Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Multimedia (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Business, Economics & Management (AREA)
  • Human Resources & Organizations (AREA)
  • Strategic Management (AREA)
  • Economics (AREA)
  • Entrepreneurship & Innovation (AREA)
  • Educational Administration (AREA)
  • Game Theory and Decision Science (AREA)
  • Development Economics (AREA)
  • Marketing (AREA)
  • Operations Research (AREA)
  • Quality & Reliability (AREA)
  • Tourism & Hospitality (AREA)
  • General Business, Economics & Management (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)
  • Debugging And Monitoring (AREA)

Abstract

在包括一个或者多个处理模块并且提供本机处理环境的数据中心接收非置信应用。非置信应用包括数据并行流水线。安全处理环境用来执行非置信应用。数据并行流水线可以指定多个并行数据对象和并行操作。基于数据并行流水线,可以生成延缓的并行数据对象和延缓的并行操作的数据流图形,并且可以将一个或者多个图形变换应用于数据流图形以生成修正的数据流图形,修正的数据流图形包括延缓的并行数据对象和延缓的组合并行数据操作中的一个或者多个延缓的并行数据对象和延缓的组合并行数据操作。可以执行延缓的组合并行操作以产生与延缓的并行数据对象对应的具体化的并行数据对象。

Description

数据的并行处理
优先权要求
本申请要求对通过引用而全部结合于此的、于2010年5月4日提交的第61/331,148号美国专利申请、于2010年6月4日提交的第12/794,348号美国专利申请和于2010年12月2日提交的第12/959,022号美国专利申请的优先权。
技术领域
本公开内容涉及数据的并行处理。
背景技术
大规模数据处理可以包括并行处理,并行处理总体上涉及到对大数据集的每个元素执行某一操作。各种操作可以在数据并行流水线中链接在一起以创建用于处理数据集的高效机制。
发明内容
在一个方面中,在包括一个或者多个处理模块并且提供本机处理环境的数据中心接收非置信应用。非置信应用包括数据并行流水线。数据并行流水线指定包含多个元素的多个并行数据对象和与对元素操作的非置信函数相关联的多个并行操作。在本机处理环境中并且在处理模块中的一个或者多个处理模块上实例化第一安全处理环境。在第一安全处理环境中执行非置信应用。执行应用生成与数据并行流水线对应的延缓的并行数据对象和延缓的并行操作的数据流图形。在第一安全处理环境以外传达代表数据流图形的信息。在第一安全处理环境以外并且在本机处理环境中,将一个或者多个图形变换应用于代表数据流图形的信息以生成修正的数据流图形,修正的数据流图形包括与非置信函数中的一个或者多个非置信函数相关联的、延缓的并行数据对象和延缓的组合并行数据操作中的一个或者多个延缓的并行数据对象和延缓的组合并行数据操作。执行延缓的组合并行操作以产生与延缓的并行数据对象对应的具体化的并行数据对象。执行延缓的组合并行操作包括:在本机处理环境中并且在处理模块中的一个或者多个处理模块上实例化一个或者多个第二安全处理环境;并且在一个或者多个第二安全处理环境中执行与延缓的组合并行操作相关联的非置信函数。
实现方式可以包括以下特征中的一个或者多个特征。例如,第一安全处理环境可以包括第一虚拟机,并且一个或者多个第二安全处理环境可以包括第二虚拟机。第一虚拟机和一个或者多个第二虚拟机可以是硬件虚拟机。在一个或者多个第二安全处理环境中执行与延缓的组合并行操作相关联的非置信函数可以包括:从第二安全处理环境以外向第二安全处理环境中传达输入批处理记录,输入批处理记录包括多个个别输入记录;对输入批处理中的个别记录中的每个记录执行与延缓的组合并行操作相关联的非置信函数中的至少一个非置信函数以生成输出记录;将输出记录汇集成输出批处理;并且在第二安全处理环境以外传达输出批处理。
可以将非置信应用的输出发送到向数据中心发送非置信应用的客户端系统。在第一安全处理环境以外传达代表数据流图形的信息可以包括向在第一安全处理环境以外的执行图形服务传达代表数据流图形的信息。
延缓的组合并行数据操作可以包括至少一个广义映射精简操作。广义映射精简操作可以包括多个并行映射操作和多个并行精简操作并且可转译成单个映射精简操作,单个映射精简操作包括用于实施多个并行映射操作的单个映射函数和用于实施多个并行精简操作的单个精简函数。单个映射函数和单个精简函数可以包括非置信函数中的一个或者多个非置信函数。
执行延缓的组合并行操作可以包括将组合映射精简操作转译成单个映射精简操作。在一个或者多个第二安全处理环境中执行与延缓的组合并行操作相关联的非置信函数可以包括在一个或者多个第二安全处理环境中执行单个映射函数和单个精简函数。
在安全处理环境中执行非置信应用可以包括在第一安全处理环境中的虚拟机内执行非置信应用。在一个或者多个安全处理环境中执行与延缓的组合并行操作相关联的非置信函数可以包括在一个或者多个第二安全处理环境内的虚拟机中执行与延缓的组合并行操作相关联的非置信函数。
在第一安全处理环境以外传达代表数据流图形的信息可以包括使用远程过程调用在第一安全处理环境以外传达代表数据流图形的信息。可以审核远程过程调用。
在另一方面中,一种系统包括:一个或者多个处理模块,配置成提供本机处理环境并且实施在本机处理环境中的第一安全处理环境、位于第一安全处理环境以外并且在本机处理环境中的服务以及在本机处理环境中的一个或者多个第二安全处理环境。
第一安全处理环境被配置成执行包括数据并行流水线的非置信应用。数据并行流水线指定包含多个元素的多个并行数据对象和与对元素操作的非置信函数相关联的多个并行操作。执行应用生成与数据并行流水线对应的延缓的并行数据对象和延缓的并行操作的数据流图形。第一安全处理环境也被配置成在第一安全处理环境以外传达代表数据流图形的信息
服务被配置成:从第一安全处理环境接收代表数据流图形的信息;将一个或者多个图形变换应用于代表数据流图形的信息以生成修正的数据流图形,修正的数据流图形包括与非置信函数中的一个或者多个非置信函数相关联的、延缓的并行数据对象和延缓的组合并行数据操作中的一个或者多个延缓的并行数据对象和延缓的组合并行数据操作;并且引起执行延缓的组合并行操作以产生与延缓的并行数据对象对应的具体化的并行数据对象。
一个或者多个第二安全处理环境被配置成执行与延缓的组合并行操作相关联的非置信函数以造成执行延缓的组合并行操作。
实现方式可以包括以下特征中的一个或者多个特征。例如,第一安全处理环境可以包括第一虚拟机,并且一个或者多个第二安全处理环境可以包括第二虚拟机。第一虚拟机和一个或者多个第二虚拟机可以是硬件虚拟机。
一个或者多个处理设备可以被配置成实施工作器,工作器被配置成从第二安全处理环境以外向第二安全处理环境中传达输入批处理记录。输入批处理记录可以包括多个个别输入记录。为了执行与延缓的组合并行操作相关联的非置信函数,一个或者多个第二安全处理环境可以被配置成:对输入批处理中的个别记录中的每个记录执行与延缓的组合并行操作相关联的非置信函数中的至少一个非置信函数以生成输出记录;将输出记录汇集成输出批处理;并且向工作器传达输出批处理。
该系统可以包括配置成接收非置信应用的输出的客户端系统。延缓的组合并行数据操作可以包括至少一个广义映射精简操作。广义映射精简操作可以包括多个并行映射操作和多个并行精简操作并且可转译成单个映射精简操作,单个映射精简操作包括用于实施多个并行映射操作的单个映射函数和用于实施多个并行精简操作的单个精简函数。单个映射函数和单个精简函数可以包括非置信函数中的一个或者多个非置信函数。
服务可以被配置成将组合映射精简操作转译成单个映射精简操作。一个或者多个第二安全处理环境可以被配置成在一个或者多个第二安全处理环境中执行单个映射函数和单个精简函数。
第一安全处理环境可以被配置成在第一安全处理环境中的虚拟机内执行非置信应用。一个或者多个第二安全处理环境内可以被配置成在一个或者多个第二安全处理环境内的虚拟机中执行与延缓的组合并行操作相关联的非置信函数。
在另一方面中,访问代表延缓的并行数据对象和延缓的并行操作的数据流图形的信息。延缓的并行数据对象和延缓的并行操作对应于由非置信应用中包括的数据并行流水线指定的并行数据对象和并行操作。并行数据对象包含多个元素,并且并行操作与对元素操作的非置信函数相关联。将一个或者多个图形变换应用于代表数据流图形的信息以生成修正的数据流图形,修正的数据流图形包括与非置信函数中的一个或者多个非置信函数相关联的、延缓的并行数据对象和延缓的组合并行数据操作中的一个或者多个延缓的并行数据对象和延缓的组合并行数据操作。执行延缓的组合并行操作以产生与延缓的并行数据对象对应的具体化的并行数据对象。执行延缓的组合并行操作包括:实例化一个或者多个安全处理环境;并且在一个或者多个安全处理环境中执行与延缓的组合并行操作相关联的非置信函数。
可以接收包括数据并行流水线的非置信应用,并且可以实例化初始安全处理环境。可以在初始安全处理环境中执行非置信应用。执行应用可以生成延缓的并行数据对象和延缓的并行操作的数据流图形。可以在初始安全处理环境以外传达代表数据流图形的信息,从而使得图形变换在初始安全处理环境以外应用于代表数据流图形的信息。一个或者多个安全处理环境可以包括虚拟机。
在另一方面中,一种系统包括一个或者多个处理设备和一个或者多个存储设备。存储设备存储在由一个或者多个处理设备执行时实施应用、评价器、优化器和执行器的指令。应用包括数据并行流水线。数据并行流水线指定包含多个元素的多个并行数据对象和对并行数据对象操作的多个并行操作。评价器基于数据并行流水线被配置成生成与数据并行流水线对应的延缓的并行数据对象和延缓的并行操作的数据流图形。
延缓的并行数据对象例如可以是包括指针的数据结构,指针指向对并行数据对象而不是对在并行数据对象中存储的元素操作的并行数据操作。延缓的并行操作例如可以是数据结构,该数据结构包括指向并行数据对象的指针、指向延缓的并行对象的指针和将(但是尚未)对输入对象执行的函数,并行数据对象是向延缓的并行操作的输入,延缓的并行对象是延缓的并行操作的输出。
优化器被配置成将一个或者多个图形变换应用于数据流图形以生成修正的数据流图形,修正的数据流图形包括延缓的并行数据对象和延缓的组合并行数据操作中的一个或者多个延缓的并行数据对象和延缓的组合并行数据操作。执行器被配置成执行延缓的组合并行操作以产生与延缓的并行数据对象对应的具体化的并行数据对象。具体化的并行数据对象例如可以是包括并行数据对象的数据或者元素的数据结构。
这一方面的实现方式可以包括以下特征中的一个或者多个特征。例如,延缓的组合并行数据操作可以包括至少一个广义映射精简操作。广义映射精简操作可以包括多个并行映射操作和多个并行精简操作并且可转译成单个映射精简操作,单个映射精简操作包括用于实施多个并行映射操作的单个映射函数和用于实施多个并行精简操作的单个精简函数。为了执行广义映射精简操作,执行器可以被配置成将组合映射精简操作转译成单个映射精简操作并且执行单个映射精简操作。为了执行单个映射精简操作,执行器可以被配置成确定是否执行单个映射精简操作作为本地顺序操作或者远程并行操作。为了将广义映射精简操作转译成单个映射精简操作,执行器可以被配置成生成包括多个映射操作的映射函数和包括多个精简器操作的精简器函数。
多个并行数据对象可以是主机编程语言的第一类对象。
流水线还可以包括单个数据对象,单个数据对象包含单个元素,并且数据流图形包括对应的延缓的单个数据对象。流水线中的多个并行操作中的至少一个并行操作可以对单个数据对象和多个并行数据对象中的一个并行数据对象操作,并且数据流图形可以包括对延缓的单个数据对象和延缓的并行数据对象操作的对应的延缓的并行操作。
执行器可以被配置成高速缓存执行延缓的组合并行操作的一个或者多个结果以用于在数据并行流水线的将来执行中使用。
在另一方面中,一种方法包括执行包括数据并行流水线的应用。数据并行流水线指定包含多个元素的多个并行数据对象和对并行数据对象操作的多个并行操作。该方法还包括基于数据并行流水线生成与数据并行流水线对应的延缓的并行数据对象和延缓的并行操作的数据流图形。延缓的并行数据对象例如可以是包括指针的数据结构,该指针指向对并行数据对象而不是对在并行数据对象中存储的元素操作的并行数据操作。延缓的并行操作例如可以是数据结构,该数据结构包括指向并行数据对象的指针、指向延缓的并行对象的指针和将(但是尚未)对输入对象执行的函数,并行数据对象是向延缓的并行操作的输入,延缓的并行对象是延缓的并行操作的输出。
该方法也包括将一个或者多个图形变换应用于数据流图形以生成修正的数据流图形,修正的数据流图形包括延缓的并行数据对象和延缓的组合并行数据操作中的一个或者多个延缓的并行数据对象和延缓的组合并行数据操作。此外,该方法还包括执行延缓的组合并行操作以产生与延缓的并行数据对象对应的具体化的并行数据对象。具体化的并行数据对象例如可以是包括并行数据对象的数据或者元素的数据结构。
这一方面的实现方式可以包括以下特征中的一个或者多个特征。例如,延缓的组合并行数据操作可以包括至少一个广义映射精简操作。广义映射精简操作可以包括多个并行映射操作和多个并行精简操作并且可转译成单个映射精简操作,单个映射精简操作包括用于实施多个并行映射操作的单个映射函数和用于实施多个并行精简操作的单个精简函数。执行广义映射精简操作可以包括将组合映射精简操作转译成单个映射精简操作并且执行单个映射精简操作。执行单个映射精简操作可以包括确定是否执行单个映射精简操作作为本地顺序操作或者远程并行操作。将广义映射精简操作转译成单个映射精简操作可以包括生成包括多个映射操作的映射函数和包括多个精简器操作的精简器函数。
多个并行数据对象可以是主机编程语言的第一类对象。
流水线还可以包括单个数据对象,单个数据对象包含单个元素,并且数据流图形包括对应的延缓的单个数据对象。流水线中的多个并行操作中的至少一个并行操作可以对单个数据对象和多个并行数据对象中的一个并行数据对象操作,并且数据流图形可以包括对延缓的单个数据对象和延缓的并行数据对象操作的对应的延缓的并行操作。
该方法可以包括高速缓存执行延缓的组合并行操作的一个或者多个结果以用于在数据并行流水线的将来执行中使用。
在另一方面中,一种系统包括一个或者多个处理设备和一个或者多个存储设备。存储设备存储在由一个或者多个处理设备执行时实施执行器的指令。执行器被配置成访问包括延缓的并行数据对象和延缓的组合并行数据操作的数据流图形。延缓的并行数据对象例如可以是包括指针的数据结构,该指针指向对并行数据对象而不是对在并行数据对象中存储的元素操作的并行数据操作。延缓的并行操作例如可以是数据结构,该数据结构包括指向并行数据对象的指针、指向延缓的并行对象的指针和将(但是尚未)对输入对象执行的函数,并行数据对象是向延缓的并行操作的输入,延缓的并行对象是延缓的并行操作的输出。
执行器被配置成执行延缓的组合并行操作以产生与延缓的并行数据对象对应的具体化的并行数据对象。具体化的并行数据对象例如可以是包括并行数据对象的数据或者元素的数据结构。针对延缓的组合并行操作中的至少一个延缓的组合并行操作,执行器被配置成通过以下操作来执行至少一个延缓的组合并行操作:确定与至少一个延缓的组合并行操作相关联的数据的估计的大小;确定估计的大小是否超过阈值大小;如果估计的大小在阈值大小以下,则执行至少一个延缓的组合并行操作作为本地顺序操作;并且如果估计的大小超过阈值大小,则执行至少一个延缓的组合并行操作作为远程并行操作。
这一方面的实现方式可以包括以下特征中的一个或者多个特征。例如,与至少一个延缓的组合并行操作相关联的数据可以包括用于至少一个延缓的组合并行操作的输入数据、由至少一个延缓的组合并行操作产生的中间数据或者由至少一个延缓的组合并行操作产生的输出数据中的一种或者多种数据。至少一个延缓的组合并行数据操作可以是广义映射精简操作。广义映射精简操作可以包括多个并行映射操作和多个并行精简操作并且可转译成单个映射精简操作,单个映射精简操作包括用于实施多个并行映射操作的单个映射函数和用于实施多个并行精简操作的单个精简函数。为了执行广义映射精简操作,执行器可以被配置成将组合映射精简操作转译成单个映射精简操作并且执行单个映射精简操作。为了执行单个映射精简操作作为远程并行操作,执行器可以被配置成使单个映射精简操作在数据中心中的多个不同处理模块上被复制和执行。为了将广义映射精简操作转译成单个映射精简操作,执行器可以被配置成生成包括多个映射操作的映射函数和包括多个精简器操作的精简器函数。为了确定估计的大小,执行器可以被配置成访问数据流图形中的注释,注释反映与至少一个延缓的组合并行操作相关联的数据的大小的估计。
在另一方面中,一种方法包括访问包括延缓的并行数据对象和延缓的组合并行数据操作的数据流图形。延缓的并行数据对象例如可以是包括指针的数据结构,该指针指向对并行数据对象而不是对在并行数据对象中存储的元素操作的并行数据操作。延缓的并行操作例如可以是数据结构,该数据结构包括指向并行数据对象的指针、指向延缓的并行对象的指针和将(但是尚未)对输入对象执行的函数,并行数据对象是向延缓的并行操作的输入,延缓的并行对象是延缓的并行操作的输出。
该方法也包括执行延缓的组合并行操作以产生与延缓的并行数据对象对应的具体化的并行数据对象。具体化的并行数据对象例如可以是包括并行数据对象的数据或者元素的数据结构。针对延缓的组合并行操作中的至少一个延缓的组合并行操作,执行至少一个延缓的组合并行操作包括:确定与至少一个延缓的组合并行操作相关联的数据的估计的大小;确定估计的大小是否超过阈值大小;如果估计的大小在阈值大小以下,则执行至少一个延缓的组合并行操作作为本地顺序操作;并且如果估计的大小超过阈值大小,则执行至少一个延缓的组合并行操作作为远程并行操作。
这一方面的实现方式可以包括以下特征中的一个或者多个特征。例如,与至少一个延缓的组合并行操作相关联的数据可以包括用于至少一个延缓的组合并行操作的输入数据、由至少一个延缓的组合并行操作产生的中间数据或者由至少一个延缓的组合并行操作产生的输出数据中的一种或者多种数据。至少一个延缓的组合并行数据操作可以是广义映射精简操作。广义映射精简操作可以包括多个并行映射操作和多个并行精简操作并且可转译成单个映射精简操作,该单个映射精简操作包括用于实施多个并行映射操作的单个映射函数和用于实施多个并行精简操作的单个精简函数。执行广义映射精简操作可以包括将组合映射精简操作转译成单个映射精简操作并且执行单个映射精简操作。执行单个映射精简操作作为远程并行操作可以包括使单个映射精简操作在数据中心中的多个不同处理模块上被复制和执行。将广义映射精简操作转译成单个映射精简操作可以包括生成包括多个映射操作的映射函数和包括多个精简器操作的精简器函数。确定估计的大小可以包括访问数据流图形中的注释,该注释反映与至少一个延缓的组合并行操作相关联的数据的大小的估计。
在一个方面中,一种系统包括一个或者多个处理设备和一个或者多个存储设备。存储设备存储在由一个或者多个处理设备执行时实施执行器的指令。执行器被配置成访问数据流图形,该数据流图形包括延缓的并行数据对象和延缓的组合并行数据操作。延缓的并行数据对象例如可以是包括指针的数据结构,该指针指向对并行数据对象而不是对在并行数据对象中存储的元素操作的并行数据操作。延缓的并行操作例如可以是数据结构,该数据结构包括指向并行数据对象的指针、指向延缓的并行对象的指针和将(但是尚未)对输入对象执行的函数,并行数据对象是向延缓的并行操作的输入,延缓的并行对象是延缓的并行操作的输出。
延缓的组合并行数据操作中的至少一个延缓的组合并行数据操作是广义映射精简操作。广义映射精简操作包括多个并行映射操作和多个并行精简操作并且可转译成单个映射精简操作,该单个映射精简操作包括用于实施多个并行映射操作的单个映射函数和用于实施多个并行精简操作的单个精简函数。
执行器还被配置成执行延缓的组合并行操作以产生与延缓的并行数据对象对应的具体化的并行数据对象。具体化的并行数据对象例如可以是包括并行数据对象的数据或者元素的数据结构。为了执行广义映射精简操作,执行器被配置成将组合映射精简操作转译成单个映射精简操作并且执行单个映射精简操作。
这一方面的实现方式可以包括以下特征中的一个或者多个特征。例如,为了将广义映射精简操作转译成单个映射精简操作,执行器可以被配置成生成包括多个映射操作的映射函数和包括多个精简操作的精简函数。
执行器可以被配置成执行单个映射精简操作作为远程并行操作。为了执行单个映射精简操作作为远程并行操作,执行器可以被配置成使单个映射精简操作由多个不同处理模块上的多个工作器进程执行。为了使单个映射精简操作由多个工作器进程执行,执行器可以被配置成引起针对映射操作中的每个映射操作来援引多个映射工作器进程,其中向多个映射工作器进程中的每个映射工作器进程分配索引编号。映射工作器进程中的每个映射工作器进程可以被配置成:接收实施多个映射操作的映射函数、与映射操作中的一个映射操作相关联的一个或者多个输入和映射工作器进程的相关联的索引;基于映射工作器进程的相关联的索引选择与输入相关联的映射操作;并且对一个或者多个输入援引选择的映射操作。
为了使单个映射精简操作由多个工作器进程执行,执行器可以被配置成使得针对精简操作中的每个精简操作援引多个精简工作器进程,其中向多个精简工作器进程中的每个精简工作器进程分配索引编号。多个精简工作器进程中的每个精简工作器进程可以被配置成:接收实施多个精简操作的精简函数、与精简操作中的一个精简操作相关联的一个或者多个输入和精简工作器进程的相关联的索引;基于工作器进程的相关联的索引选择与输入相关联的精简操作;并且对一个或者多个输入援引选择的精简操作。
在另一方面中,一种方法包括访问数据流图形,该数据流图形包括延缓的并行数据对象和延缓的组合并行数据操作。延缓的并行数据对象例如可以是包括指针的数据结构,该指针指向对并行数据对象而不是对在并行数据对象中存储的元素操作的并行数据操作。延缓的并行操作例如可以是数据结构,该数据结构包括指向并行数据对象的指针、指向延缓的并行对象的指针和将(但是尚未)对输入对象执行的函数,并行数据对象是向延缓的并行操作的输入,延缓的并行对象是延缓的并行操作的输出。
延缓的组合并行数据操作中的至少一个延缓的组合并行数据操作是广义映射精简操作。广义映射精简操作包括多个并行映射操作和多个并行精简操作并且可转译成单个映射精简操作,该单个映射精简操作包括用于实施多个并行映射操作的单个映射函数和用于实施多个并行精简操作的单个精简函数;并且
该方法也包括执行延缓的组合并行操作以产生与延缓的并行数据对象对应的具体化的并行数据对象。具体化的并行数据对象例如可以是包括并行数据对象的数据或者元素的数据结构。执行广义映射精简操作包括将组合映射精简操作转译成单个映射精简操作并且执行单个映射精简操作。
这一方面的实现方式可以包括以下特征中的一个或者多个特征。例如,将广义映射精简操作转译成单个映射精简操作可以包括生成包括多个映射操作的映射函数和包括多个精简操作的精简函数。执行单个映射精简操作可以包括执行单个映射精简操作作为远程并行操作。执行单个映射精简操作作为远程并行操作可以包括使单个映射精简操作由多个不同处理模块上的多个工作器进程执行。
使单个映射精简操作由多个工作器进程执行可以包括引起针对映射操作中的每个映射操作来援引多个映射工作器进程,其中向多个映射工作器进程中的每个映射工作器进程分配索引编号。映射工作器进程中的每个映射工作器进程可以被配置成:接收实施多个映射操作的映射函数、与映射操作中的一个映射操作相关联的一个或者多个输入和映射工作器进程的相关联的索引;基于映射工作器进程的相关联的索引选择与输入相关联的映射操作;并且对一个或者多个输入援引选择的映射操作。
使单个映射精简操作由多个工作器进程执行可以包括使得针对精简操作中的每个精简操作援引多个精简工作器进程,其中向多个精简工作器进程中的每个精简工作器进程分配索引编号。多个精简工作器进程中的每个精简工作器进程可以被配置成:接收实施多个精简操作的精简函数、与精简操作中的一个精简操作相关联的一个或者多个输入和精简工作器进程的相关联的索引;基于工作器进程的相关联的索引选择与输入相关联的精简操作;并且对一个或者多个输入援引选择的精简操作。
描述的技术的实现方式可以包括硬件、系统、方法或者过程或者在计算机可访问介质上的计算机软件。
在附图和以下描述中阐述一个或者多个实现方式的细节。其它特征将从描述和附图中以及从权利要求中变得明显。
附图说明
图1是图示了数据中心的示例的框图。
图2是处理模块的示例的框图。
图3是图示了流水线库的示例的框图。
图4A是图示了可以由流水线的评价器、优化器和执行器执行的过程的示例的流程图。
图4B是图示了可以由流水线库的执行器执行的过程的示例的流程图。
图5A和图5B示出了示例数据流图形变换,该数据流图形变换图示了ParallelDo生产者-消费者融合和同胞融合。
图6A和图6B示出了示例数据流图形变换,该数据流图形变换图示了MSCR融合。
图7A至图7E示出了为了生成最终数据流图形而执行的数据流图形变换的示例。
图8图示了具有3个输入信道的MSCR操作的示例。
图9图示了可以用来实施流水线库作为服务的系统的示例。
图10是图示了用于执行包括数据并行流水线的非置信应用的过程的示例的流程图。
具体实施方式
一般而言,在本文献中描述的技术可以应用于大规模数据处理并且特别地应用于大规模数据并行流水线。可以在分布式数据处理系统(比如数据中心或者数据中心的网络)中执行这样的大规模处理。例如,大规模因特网服务和支持这样的服务的大型并行计算基础结构可以运用由数以千计或者数以万计的计算节点组成的仓库大小的计算系统。
图1是图示了数据中心100的示例的框图。数据中心100用来存储数据、执行计算任务和例如使用连接到数据中心的网络向数据中心以外的其它系统传输数据。具体而言,数据中心100可以对大量数据执行大规模数据处理。
数据中心100包括多个机架102。尽管仅示出了两个机架,但是数据中心100可以包括多得多的机架。每个机架102可以包括供部件(比如处理模块104)装配到其中的框架或者机柜。一般而言,每个处理模块104可以包括电路板(比如母板),多种与计算机有关的部件装配于该电路板上以执行数据处理。每个机架102内的处理模块104例如通过机架交换机彼此互连,并且每个数据中心100内的机架102也例如通过数据中心交换机互连。
在一些实现方式中,处理模块104可以各自承担作为主控或者从属的角色。主控模块控制在它们本身与从属之间的调度和数据分布任务。机架可以包括由一个或者多个处理模块104共享的储存器(例如,一个或者多个网络附着盘)和/或每个处理模块104可以包括它自己的储存器。附加地或者备选地,可以存在通过网络连接到机架的远程储存器。
数据中心100可以包括专用光学链路或者其它专用通信信道以及诸如调制解调器、桥接器、路由器、交换机、无线天线和塔等支持硬件。数据中心100可以包括一个或者多个广域网(WAN)以及多个局域网(LAN)。
图2是可以用于处理模块104中的一个或者多个处理模块的处理模块200的示例的框图。处理模块200包括存储器202、一个或者多个处理单元(CPU)204和一个或者多个网络或者其它通信接口206。这些部件由一个或者多个通信总线互连。在一些实现方式中,处理模块200可以包括将处理模块连接到输入和输出设备(比如显示器和键盘)的输入/输出(I/O)接口。存储器202可以包括高速随机存取存储器并且也可以包括非易失性存储器,比如一个或者多个磁盘存储设备。存储器202可以包括位于CPU204的远程的海量储存器。
存储器202存储应用软件202a、映射精简库202b、流水线库202c和操作系统202d(例如,Linux)。操作系统202d一般包括用于处理各种基本系统服务和用于执行依赖于硬件的任务的流程。应用软件202a执行大规模数据处理。
库202a和库202c提供可以由应用软件202a用来执行大规模数据处理并且在这样的大规模数据处理中实施数据并行流水线的函数和类。映射精简库202b可以支持用于并行处理大量数据的映射精简编程模型。例如,在通过引用而均结合于此的、MapReduce:SimplifiedDataProcessingonLargeClusters,OSDI′04:SixthSymposiumonOperatingSystemDesignandImplementation,SanFrancisco,CA,2004年12月和第7,650,331号美国专利中描述了映射精简模型。
一般而言,映射精简模型向应用开发者提供用于如何考虑他们的计算的抽象。应用开发者可以根据抽象来制定他们的计算,这可以简化对用于执行大规模并行数据处理的程序的构建。应用开发者可以运用映射精简模型,该映射精简模型使用或者不使用映射精简库202b。然而,映射精简库202b可以管理不同低级任务中的许多任务。这样的低级任务可以例如包括选择适当并行工作器机器、向它们分布待运行的程序、管理中间数据在这三个阶段之间的临时存储和流动、同步阶段的总体定序以及应对机器、网络和软件的瞬态故障。
映射精简模型一般涉及到将计算分解成包括单个映射操作和单个精简操作的映射精简操作。映射操作对输入中的每个逻辑记录执行操作以计算中间键/值对的集合。精简操作对共享相同键的值执行操作以按照某一方式组合值。混洗操作(shuffleoperation)在这一模型中是隐式的,该操作涉及到对具有相同键的所有值分组。
映射精简库202b可以实施映射阶段、混洗阶段和精简阶段以支持根据映射精简模型而制定的计算。在一些实现方式中,为了使用映射精简库202b,用户程序(或者另一个库(比如流水线库202c))调用映射精简库202b,从而指定标识输入文件的信息、对用于接收输出数据的输出文件进行标识或者指定的信息以及映射操作符和精简操作符这两个应用专属数据处理操作符。一般而言,映射操作符指定处理输入数据以产生中间数据的映射函数,并且精简操作符指定合并或者以别的方式组合中间数据值的精简函数。映射精简库202b继而运用这一信息以实施该映射阶段、混洗阶段和精简阶段。
映射阶段通过从输入源(比如文本文件、面向二进制记录的文件或者MySql数据库)读取值或者键/值对的汇集来开始。大数据集可以由多个、甚至数以千计的文件(可以被称为碎片)代表,并且可以读取多个文件碎片作为单个逻辑输入源。映射阶段继而对每个元素独立和并行援引用户定义的函数、映射函数或者映射器。对于每个输入元素,用户定义的函数发出零个或者更多个键/值对,这些键/值对是映射阶段的输出。
混洗阶段取得由映射器发出的键/值对并且将具有相同键的所有键/值对分组在一起。混洗阶段继而向精简阶段这下一阶段输出每个相异键和具有该键的所有值的流。
精简阶段取得由混洗阶段发出的键分组数据并且对每个相异键和值组独立和并行援引用户定义的函数、精简函数或者精简器。向每个精简器援引传递键和对与该键相关联的所有值的迭代器,并且每个精简器发出用于与输入键相关联的零个或者更多个替换值。精简器通常对具有给定键的所有值执行某种聚合。对于一些操作,精简器仅为恒等函数。继而,向输出宿(例如,共享文件或者数据库)写入从所有精简器调用发出的键/值对。
为了实施这些阶段,映射精简库202b可以将输入片段划分成M个片段(例如,64兆字节(MB)大小的文件)并且在机器群集(比如处理模块104中的多个处理模块)上启动程序的多个副本,该程序使用库202b。副本中的一个副本可以是主控副本,并且其余副本可以是由主控分配工作的工作器副本。主控选择空闲工作器并且向每个空闲工作器分配映射任务或者精简任务。存在M个映射任务(每个输入片段有一个映射任务)。向映射任务分配的工作器使用映射器以对输入执行映射操作以产生例如被划分成R个集合的中间结果。当中间结果划分成R个集合时,存在R个精简任务待分配。向精简任务分配的工作器使用精简器以对中间值执行精简操作以产生输出。一旦完成了所有映射任务和所有精简任务,主控就向运用映射精简库202b的用户程序或者库返回。作为结果,实施映射精简操作为跨越处理设备群集的并行操作集合。
对于先使用关联交换操作来组合具有给定键的所有值的精简器,可以指定单独用户定义组合器函数以在映射阶段期间执行对与给定键相关联的值的部分组合。每个映射工作器可以保持已经从映射器发出的键/值对的高速缓存,并且使用组合器函数以在向混洗阶段发送组合的键/值对之前尽可能多地进行本地组合。精简器可以通过组合来自不同映射工作器的值来完成组合步骤。
作为默认,混洗阶段可以向任意地、但是确定性地选择的精简工作器机器发送每个键和值组,其中这一选择确定哪个输出文件碎片将保持该键的结果。备选地,可以指定用户定义的碎片器函数,该碎片器函数选择哪个精简工作器机器应当接收用于给定键的组。用户定义的碎片器可以用来辅助负荷平衡。用户定义的碎片器也可以用来将输出键分类到精简“桶”中,其中第i个精简工作器的所有键被排序在第i+1个精简工作器的所有键之前。与每个精简工作器按照词典顺序处理键的事实联系,这一种碎片器可以用来产生分类输出。
流水线库202c提供支持数据并行流水线的函数和类,并且特别地提供包括映射精简操作的链或者有向非循环图形的流水线。流水线库202c可以帮助减轻实施映射精简操作的链的负担中的一些负担。一般而言,许多现实世界计算需要映射精简级的链。尽管一些逻辑计算可以被表达为映射精简操作,但是其它逻辑计算需要映射精简操作的序列或者图形。随着逻辑计算的复杂性增长,将计算映射到映射精简操作的物理序列的挑战增加。一般将更高级概念(比如“对出现次数计数”或者“按照键接合表”)手工编译成更低级映射精简操作。此外,用户可以承担编写驱动器程序以在恰当序列中援引映射精简操作并且管理对保持数据的中间文件的创建和删除的附加负担。
流水线库202c可以回避或者减少产生涉及到多个映射精简操作的数据并行流水线的一些难度以及针对开发者产生附加协调代码以在这样的数据并行流水线中将单独映射精简级链接在一起的需要。流水线库202c也可以回避或者减少用于管理对在流水线级之间的中间结果的创建和以后删除的附加工作。作为结果,流水线库202c可以帮助防止逻辑计算本身变成隐藏于所有低级协调细节之中,由此使新开发者容易理解计算。另外,利用流水线库202c可以帮助防止将流水线划分成特定级变成向代码“烤入(bakein)”并且如果逻辑计算需要演变则以后难以改变。
一般而言,应用软件202a可以运用库202b或者库202c中的一个或者两个库。应用开发者可以开发应用软件,该应用软件运用映射精简库202b以执行被制定为映射精简操作的计算。
备选地或者附加地,应用开发者可以在开发包括多个映射精简操作的数据并行流水线时运用流水线库202c。如下文进一步讨论的那样,流水线库202c可以允许开发者使用其中实施流水线库202c的本机编程语言以更自然方式对计算编码,而未考虑在映射精简操作方面设计逻辑计算或者构建操作的有序图形。流水线库202c可以在执行之前在多个映射精简操作方面制定逻辑计算,并且继而通过实施映射精简操作本身或者与映射精简库202b对接以实施映射精简操作来执行计算。
图3是图示了可以用来实施流水线库200c的流水线库300的示例的框图。流水线库300包括一个或者多个并行数据汇集类302、一个或者多个并行操作304、评价器306、优化器308和执行器310。一般而言,并行数据汇集类302用来实例化并行数据对象,这些并行数据对象保持数据汇集,并且并行操作304用来对由并行数据对象保持的数据执行并行操作。可以组成并行操作304以实施数据并行计算和整个流水线或者甚至多个流水线,可以使用并行汇集类302和并行操作304来实施并行操作304。
并行数据汇集类302和并行操作304呈现对许多不同数据表示和对不同执行策略的简单高级统一抽象。并行数据汇集类302抽象出如何对数据进行表示的细节,这些细节包括是否将数据表示为存储器中的数据结构、一个或者多个文件或者外部存储服务。类似地,并行操作304抽象出它们的实现策略,比如是否将操作实施为映射精简库202b的本地、依次循环、远程并行援引、实施为对数据库的查询或者实施为流计算。
评价器306延缓对并行操作的评价而不是在执行数据并行流水线时随着遍历并行操作而评价它们。取而代之,评价器306构造包含操作及其变元的内部执行计划数据流图形。一旦构造了用于整个逻辑计算的执行计划数据流图形,优化器308例如通过应用将并行操作的链一起融合或者组合成更小数目的组合操作的图形变换来修正执行计划。修正的执行计划可以包括广义映射精简操作,该广义映射精简操作包括多个并行映射操作和多个并行精简操作(例如,下文进一步描述的MapShuffleCombineReduce操作)、但是可以用单个映射函数和单个精简函数转译成单个映射精简操作,该单个映射函数用于实施多个映射操作,该单个精简函数用于实施多个精简操作。执行器310使用下层原语(例如,MapReduce操作)来执行修正的操作。当运行执行计划时,执行器310可以至少部分基于处理的数据的大小来选择使用哪个策略以实施每个操作(例如,本地依次循环比对远程并行MapReduce)。执行器310也可以将远程计算置于它们对其操作的数据附近,并且可以并行执行独立操作。执行器310也可以管理对计算内所需任何中间文件的创建和清理。
可以用多种编程语言中的任何编程语言实施流水线库300。下文描述用Java(R)编程语言的一个实现方式的方面的示例。
流水线库300提供被称为PCollection<T>的并行数据汇集类,该并行数据汇集类是T类型的元素的不可变包。PCollection可以具有定义好的顺序(称为序列),或者元素可以是无序的(称为汇集)。汇集由于它们更少被约束而可以比序列更高效地生成和处理。可以通过按照若干可能格式中的一种格式读取文件来创建PCollection<T>。例如,可以读取文本文件作为PCollection<String>,并且可以在如何将每个二进制记录解码成T类型的对象的规范给定时读取面向二进制记录的文件作为PCollection<T>。当使用Java(R)来实施流水线库300时,也可以根据存储器中的Java(R)Collection<T>创建PCollection<T>。
可以读入由多个文件碎片代表的数据集作为单个逻辑PCollection。例如:
PCollection<String>lines=readTextFileCollection(″/gfs/data/shakes/hamlet.txt″);
PCollection<DocInfo>docInfos=readRecordFileCollection(″/gfs/webdocinfo/part-*″,recordsOf(DocInfo.class));
在这一示例中,recordsOf(…)指定其中将DocInfo实例编码为二进制记录的特定方式。其它预定义编码指定符可以包括用于UTF-8-编码文本的strings()、用于32位整数的可变长度编码的ints()和用于根据对分量的编码而推导的对的编码的pairsOf(e1,e2)。一些实现方式可以允许用户指定他们自己的定制编码。
第二并行数据汇集类302是PTable<K,V>,该并行数据汇集类代表具有类型K的键和类型V的值的(不可变)多映射。PTable<K,V>可以仅为对的无序包。并行操作304中的一些并行操作可以仅适用于对的PCollection,并且在Java(R)中,PTable<K,V>可以被实施为PCollection<Pair<K,V>>的子类以捕获这一抽象。在另一语言中,PTable<K,V>可以被定义为PCollection<Pair<K,V>>的类型同义词。
并行数据对象(比如PCollection)可以被实施为其中实施库300的本机语言的第一类对象。当是这种情况时,对象可以如同在本机语言中的其它对象那样可操控。例如,PCollection可以能够向语言中的常规方法中传递和从这些方法返回,并且可以能够存储于语言的其它数据结构中(但是一些实现方式可能防止PCollection存储于其它PCollection中)。本机语言的常规控制流程构造也可以能够用来定义涉及到对象的计算,这些对象包括函数、条件句和循环。例如,如果Java(R)是本机语言,则:
实施并行数据对象作为库300的本机语言中的第一类对象可以简化使用库的程序开发,因为开发者可以按照他或者她将使用其它对象的方式相同的方式使用并行数据对象。
除了并行数据汇集类之外,流水线库300也可以包括单个数据汇集类PObject<T>,该数据汇集类用于支持在执行流水线期间检查PCollection的内容的能力。与保持多个元素的PCollection对照,PObject<T>是用于类型T的单个对象(例如,类型T的单个本机对象(例如,Java(R)对象))的容器,并且设计PObject的任何相关联的方法以对单个元素操作。如同PCollection,可以延缓或者具体化(如下文进一步描述的那样)PObject,从而允许计算它们作为流水线中的延缓的操作的结果。一旦运行流水线,则可以使用getValue()来提取现在具体化的PObject的内容。
例如,在使用Java(R)的一个实现方式中,asSequentialCollection()操作可以应用于PCollection<T>以产生PObject<Collection<T>>,一旦流水线运行,可以检查PObject<Collection<T>>以读出计算的PCollection的所有元素作为常规Java(R)存储器中的Collection:
作为另一示例,对T向PCollection<T>和组合函数应用的combine()操作(下文描述)产生代表完全组合结果的PObject<T>。可以这样计算全局求和以及最大值。
PObject的内容也可以能够例如使用由流水线库300提供的operate()原语在流水线的执行内被检查。operate()原语取得PObject的列表和变元OperateFn(该变元定义将对每个PObject执行的操作),并且返回PObject的列表。当被评价时,operate()提取现在具体化的变元PObject的内容并且向变元OperateFn中传递它们。OperateFn返回本机对象(比如Java(R)对象)的列表,并且operate()在作为结果而返回的PObject内卷绕这些本机对象。使用这一原语,可以在流水线内嵌入并且按照延缓方式执行任意计算。换言之,可以在流水线中包括对包含多个元素的PCollection操作的除了ParallelDo操作(下文描述)之外的操作。例如,考虑嵌入对读取和写入文件的外部服务的调用:
这一示例使用用于在PCollection与包含文件名的PObject之间转换的操作。应用于PCollection和文件格式选择的viewAsFile()产生所选格式的如下临时碎片文件的名称的PObject<String>,可以在执行流水线期间在该碎片文件中发现PCollection的内容。文件读取操作(比如readRecordFileCollection())可以被超载以允许读取名称包含于PObject中的文件。
按照很相同的方式,也可以通过向parallelDo()中传递PObject的内容作为副输入来在DoFn(下文描述)内检查它们。通常,DoFn对PCollection的每个元素执行操作,并且仅接收PCollection作为输入。在一些情况下,对每个PCollection的操作可以涉及到在PObject中存储的值或者其它数据。在这一情况下,DoFn可以如常接收PCollection作为输入并且接收PObject作为副输入。当运行流水线并且最终评价parallelDo()操作时,提取并且向用户的DoFn提供任何现在具体化的PObject副输入的内容,并且继而对输入PCollection的每个元素援引DoFn以使用来自PObject的数据对元素执行定义的操作。例如:
如上文描述的那样,对并行数据对象(比如PCollection)援引数据并行操作304。流水线库300定义一些原语数据并行操作,其中在这些原语方面实施其它操作。数据并行原语之一是parallelDo(),该数据并行原语支持对输入PCollection<T>的逐个元素(elementwise)计算以产生新输出PCollection<S>。这一操作取得函数式对象DoFn<T,S>作为它的主变元,该对象定义如何将输入PCollection<T>中的每个值映射到将在输出PCollection<S>中出现的零个或者更多个值中。这一操作也取得将作为结果而产生的PCollection或者PTable种类的指示。例如:
在这一代码中,collectionOf(strings())指定parallelDo()操作应当产生无序PCollection,该PCollection的String元素应当使用UTF-8来编码。其它选项可以包括用于有序PCollection的sequenceOf(elemEncoding)和用于PTable的tableOf(keyEncoding,valueEncoding)。emitFN是向用户的process(…)方法传递的回调函数,该回调函数应当针对应当向输出PCollection添加的每个outElem援引emitFn.emit(outElem)。可以包括DoFn的子类(比如MapFn(实施映射)和FilterFn(实施过滤器))以在一些情况下提供更简单的接口。
操作parallelDo()可以用来表达MapReduce操作的映射和精简部分二者。库300也可以包括parallelDo()的如下版本,该版本允许根据输入PCollection的单次遍历同时产生多个输出PCollection。
如果可以远程分布并且并行运行DoFn函数,则可以防止DoFn函数访问封包程序(enclosingprogram)的任何全局可变状态。DoFn对象可以能够维持本地实例可变状态,但是可以存在并行操作而没有共享状态的多个DoFn复制件。
第二原语groupByKey()将类型PTable<K,V>的多映射(该多映射可以具有许多键/值对,这些键/值对具有相同键)转换成类型PTable<K,Collection<V>>的单映射,其中每个键映射到具有该键的所有值的无序汇集。例如,下文计算如下表,该表将URL映射到文档汇集,这些文档链接到这些URL:
操作groupByKey()对应于MapReduce的混洗步骤。也可以存在如下变体,该变体允许指定用于每个键的值的汇集的分类顺序。
第三原语combineValues()取得输入PTable<K,Collection<V>>和对V的相关联的组合函数,并且返回PTable<K,V>,其中值的每个输入汇集已经被组合成单个输出值。例如:
操作combineValues()在语义上是parallelDo()的特殊情况,但是组合函数的关联性允许通过组合MapReduce组合器(作为每个映射器的部分来运行)和MapReduce精简器(用于完成组合)来实施操作,这可以比在精简器中完成所有组合更高效。
第四原语flatten()取得PCollection<T>的列表并且返回包含输入PCollection的所有元素的单个PCollection<T>。操作flatten()可以未实际复制输入,而是仅如同输入是一个逻辑PCollection来看待输入。
流水线通常以向外部储存器写入最终所得PCollection的操作而结束。例如:
wordCounts.writeToRecordFileTable(″/gfs/data/shakes/hamlet-counts.records″);
流水线库300可以包括对在上文描述的原语方面推导的PCollection的多个其它操作。这些推导的操作可以与用户可以编写的帮助器函数相同。例如,count()操作取得PCollection<T>并且返回PTable<T,Integer>,该PTable<T,Integer>将输入PCollection的每个相异元素映射到元素出现的次数。可以使用与用来计算上述wordCounts的模式相同的模式在parallelDo()、groupByKey()和combineValues()方面实施这一函数。可以简化上述代码如下:
PTable<String,Integer>wordCounts=words.count();
另一操作join()对共享共同键类型的两个或者更多个PTable实施接合。当应用于多映射PTable<K,V1>和多映射PTable<K,V2>时,join()返回单映射PTable<K,Pair<Collection<V1>,Collection<V2>>>,该单映射将输入表中的任一输入表中的每个键映射到第一个表中的具有该键的所有值的汇集和第二个表中的具有该键的所有值的汇集。可以进一步处理这一所得表以计算传统内或者外接合,但是能够直接操控值汇集而不计算它们的叉积可以更高效。
可以实施操作join()如下:
1.将parallelDo()应用于每个输入PTable<K,Vi>以将它转换成类型PTable<K,TaggedUnion<V1,V2>>的共同格式。
2.使用flatten()来组合表。
3.将groupByKey()应用于平坦化的表以产生PTable<K,Collection<TaggedUnion<V1,V2>>>。
4.将parallelDo()应用于键分组表,从而将每个Collection<TaggedUnion<V1,V2>>转换成一对Collection<V1>和Collection<V2>。
另一推导的操作是top(),该操作取得比较函数和计数N并且根据比较函数返回它的接收器PCollection的最大N个元素。这一操作可以实施于parallelDo()、groupByKey()和combineValues()上面。
上文提到的用于读取多个文件碎片作为单个PCollection的操作也是推导的操作,这些操作使用flatten()和单文件读取原语来实施。
如上文描述的那样,流水线库300使用延缓的评价来懒惰地执行并行操作。为此,评价器306延缓对并行操作的评价,并且代之以构造包含操作和操作的变元的内部执行计划数据流图形。在延缓(尚未计算)或者具体化(已计算)状态中内部表示每个并行数据对象,比如PCollection。延缓的并行数据对象例如保持指向如下延缓的操作的指针,该延缓的操作计算并行数据对象。延缓的操作转而可以保持对并行数据对象和延缓的并行数据对象的引用,这些并行数据对象是延缓的操作(这些操作本身可以被延缓或者具体化)的变元,这些延缓的并行数据对象是操作的结果。当调用库操作如ParallelDo()时,库300创建ParallelDo延缓的操作对象并且返回指向操作的新的延缓的PCollection。换言之,在执行数据并行流水线时,评价器306将并行数据对象和并行操作转换成延缓(未评价)的对象和操作的有向非循环图形。这一图形可以被称为执行计划或者执行计划数据流图形。
优化器308将数据流图形中的并行操作的链或者子图形融合成更少数目的操作(这些操作中的一些操作可以是组合的操作),执行器310继而可以使用下层原语或者其它逻辑来执行这些操作。可以例如编写优化器308作为一系列独立图形变换。在一个实现方式中,优化器308对初始执行计划执行减少总体操作和组操作次数的一系列通过,其中以产生最少MapShuffleCombineReduce(MSCR)操作为总目标。
MSCR操作包括ParallelDo、GroupByKey、CombineValues和Flatten操作的组合。MSCR操作可以被映射到单个映射精简操作并且作为该单个映射精简操作来运行。MSCR操作具有M个输入信道(每个输入信道执行映射操作)和R个输出信道(每个输出信道执行混洗、组合和精简)。每个输入信道m取得PCollection<Tm>作为输入并且对该输入执行R-输出ParallelDo“映射”操作以产生类型PTable<Kr,Vr>s的R个输出。每个输出信道R平坦化它的M个输入,并且继而(a)执行GroupByKey“混洗”、可选的CombineValues“组合”和Or-输出ParallelDo“精简”(这默认为恒等操作),并且继而向Or个输出PCollection写入结果或者(b)直接写入输入作为输出。前一种输出信道可以被称为“分组”信道,而后一种输出信道可以被称为“直通”信道。直通信道可以允许映射器的输出是MSCR操作的结果。
图8图示了具有3个输入信道802a、802b和802c的MSCR操作800的示例。第一输入信道802a执行ParallelDoM1804a。第二输入信道802b执行ParallelDoM2804b。第三输入信道802c执行ParallelDoM3804c。MSCR操作包括两个分组输出信道806a和806b。第一分组输出信道806a包括GroupByKeyGBK1808a、CombineValuesCV1810a和精简ParallelDoR1812a。类似地,第二分组输出信道包括GroupByKeyGBK2808b、CombineValuesCV2810b和精简ParallelDoR2812b。MSCR操作800还包括一个直通输出信道814。
MSCR通过允许多个映射器和多个精简器和组合器、通过允许每个精简器产生多个输出、通过去除精简器必须以相同键作为精简器输入产生输出这样的要求并且通过允许直通输出来归纳映射精简模型。因此,任何给定MSCR可以包括各自对不同输入操作的多个并行映射操作和对映射操作的输出操作以产生多个不同输出的多个精简操作。每个MSCR操作尽管有它的明显更大表达性、但是仍然可以使用单个映射精简操作来实施,该映射精简操作包括用于对不同输入实施映射操作的单个映射函数和用于实施精简操作以产生多个输出的单个精简函数。
一旦优化器308修正了执行计划,执行器310就执行修正的执行计划数据流图形。在一个实现方式中,流水线库300执行批处理执行。换言之,执行器310按照向前拓扑顺序遍历修正的执行计划中的操作,并且轮流执行每个操作。独立操作可以能够同时被执行。备选地,可以实施流水线的递增或者连续执行,其中递增添加的输入造成对输出的快速递增更新。另外,可以跨越由多个用户对共同数据源运行的流水线执行优化。
执行器310通过执行对除了MSCR之外的操作进行执行的适当计算来执行操作。将MSCR映射到继而被执行的单个映射精简操作。
在一些实现方式中,执行器310先判决映射精简操作是否应当被本地和依次运行或者作为远程并行映射精简操作(例如使用映射精简库202b)来运行。由于存在在起动(launch)远程并行作业时的开销,所以本地评价可以用于适度大小的输入,其中启动开销超过来自并行处理的增益。适度大小的数据集可以在开发和测试期间共用。将本地评价用于这些数据集因此可以有助于使用常规IDE、调试器、简档器和有关工具,从而使开发包括数据并行计算的程序的任务变得容易。
如果输入数据集表现为大(例如,大于或者等于64兆字节),则执行器310可以选择使用映射精简库2202b来起动远程并行映射精简操作。执行器310可以使用输入数据大小的观测和输出数据大小的估计以自动选择合理数目的并行工作器机器。用户可以例如通过用如下方法扩充DoFn来辅助估计输出数据大小,该方法基于由该DoFn代表的计算来返回输出数据大小与输入数据大小的预计比值。可以通过动态监视和反馈观测的输出数据大小来精化估计。可以向具有更高的CPU与I/O之比的作业分配相对更多并行工作器。
执行器310可以自动创建临时文件以保持执行的每个操作的输出。一旦完成了流水线,则可以自动删除所有这些临时文件。备选地或者附加地,可以一旦在流水线中以后不再需要这些临时文件中的一些或者所有临时文件就删除它们。
一般而言,流水线库300可以被设计成使构建和运行流水线感觉与运行本机语言的常规程序尽可能相似,流水线库是针对该本机语言而设计的。当本机语言是Java(R)时,将本地依次评价用于适度大小的输入是一种这样做的方式。另一方式是将从来自对应的远程映射精简工作器的用户DoFn(比如调试打印)内到System.out或者System.err的任何输出向主程序的输出流自动寻路由。类似地,在远程映射精简工作器上运行的DoFn内丢弃的任何异常被捕获、向主程序发送并且被重新丢弃。
库300可以支持高速缓存执行模式。在这一模式中,如果操作的来自先前运行的结果保存于(内部或者用户可见)文件中,并且如果执行器310确定操作的结果尚未改变,则执行器310先尝试重用它而不是重新计算该操作。如果(a)操作的输入尚未改变以及(b)操作的代码和捕获的状态尚未改变,则操作的结果可以被视为不变。执行器310可以执行自动保守分析以标识何时确保重用先前结果安全。高速缓存即使对于将通常需要数小时来运行的流水线仍然可以造成快速编辑-编译-运行-调试循环。这可以减少为了发现后期流水线级中的错误、修复程序、并且继而从暂存区(scratch)重新执行修正的流水线而需要的时间量。
图4A是图示了可以由评价器306、优化器308和执行器310执行的过程400的示例的流程图。基于包括多个并行数据对象和对对象操作的多个并行数据操作的数据并行流水线,评价器306生成与数据并行流水线对应的延缓的并行数据对象和延缓的并行操作的数据流图形(402)。如上文描述的那样,延缓的并行数据对象是尚未计算的并行数据对象,并且延缓的并行操作是尚未执行的并行操作。例如,当在数据并行流水线中遇到并行数据对象时,评价器306可以生成保持指针的数据结构,该指针指向对并行数据对象操作的并行数据操作。类似地,在遇到并行数据操作时,评价器306可以生成数据结构,该数据结构保持指向并行数据对象的指针和指向延缓的并行对象的指针,该并行数据对象是向延缓的并行操作的输入,该延缓的并行对象是延缓的并行操作的输出。
一旦评价器306已经生成了数据流图形,优化器308就将一个或者多个图形变换应用于数据流图形以生成修正的数据流图形,该修正的数据流图形包括延缓的并行数据对象(或者子集)和延缓的组合并行数据操作(404)。延缓的组合并行数据操作可以包括一个或者多个广义映射精简操作(例如,MSCR),该广义映射精简操作包括多个映射操作和多个精简操作,但是可转译成单个映射精简操作,该单个映射精简操作包括用于实施映射操作的单个映射函数和用于实施精简操作的单个精简函数。
在一个实现方式中,优化器308对数据流图形执行一系列通过,从而按照以下顺序应用以下图形变换或者注释:(1)宿平坦化;(2)解除(lift)CombineValues操作;(3)插入融合块;(4)融合ParallelDo;以及(5)融合MSCR。
宿平坦化变换涉及到通过在向平坦化的每个输入之前复制ParallelDo消耗ParallelDo操作来下推Flatten操作。换言之,h(f(a)+g(b))等效于h(f(a))+h(g(b))。这一变换创建用于ParallelDo融合(下文描述)的机会。
解除CombineValues操作注释涉及到标记某些CombineValues操作以用于被视为用于ParallelDo融合的ParallelDo。如果CombineValues操作立即跟随GroupByKey操作,则GroupByKey记录该事实。原有CombineValues留在适当处并且此后被视为正常ParallelDo操作并且受到ParallelDo融合。
插入融合块注释涉及到标注将两个GroupByKey操作连接的ParallelDo。如果两个GroupByKey操作由一个或者多个ParallelDo操作的链连接,则优化器308选择哪些ParallelDo应当向上融合到更早GroupByKey的输出信道中,以及哪些应当向下融合到更晚GroupByKey的输入信道中。优化器估计沿着ParallelDo的链的中间PCollection的大小、标识具有最小预计大小的Pcollection,并且标记该中间Pcollection作为阻止ParallelDo融合的边界(也就是说,将PCollection的任一侧上的ParallelDo标记为未受到相互融合)。
融合ParallelDo变换涉及到将ParallelDo融合在一起。优化器306可以执行的一个类型的ParallelDo融合被称为生产者-消费者融合。如果一个ParallelDo操作执行函数f,并且结果由执行函数g的另一ParallelDo操作消费,则两个ParallelDo操作可以被替换为计算f和gοf二者的单个ParallelDo。如果图形中的其它操作无需fParallelDo的结果,则融合已经使它变成非必需,并且可以去除用于产生它的代码作为停用。
另一类型的ParallelDo融合被称为同胞融合。可以在两个或者更多ParallelDo读取相同输入PCollection时应用ParallelDo同胞融合。ParallelDo操作可以被融合成单个多输出ParallelDo操作,该多输出ParallelDo操作针对输入在单次通过中计算所有融合的操作的结果。生产者-消费者和同胞融合二者可以应用于多输出ParallelDo操作的任意树。
如更早提到的那样,CombineValues操作是可以被反复应用于部分计算结果的ParallelDo操作的特殊情况。这样,ParallelDo融合也可以被应用于CombineValues操作。
融合MSCR变换涉及到创建MSCR操作。MSCR操作从有关GroupByKey操作的集合开始。如果GroupByKey操作消耗(可能经由Flatten操作)由相同ParallelDo操作创建的一个或者多个相同输入,则操作可以被视为有关。根据有关GroupByKey操作和在执行计划中的相邻操作推导MSCR的输入和输出信道。具有由GroupByKey操作之一消耗(可能经由Flatten操作)的至少一个输出的每个ParallelDo操作被融合到MSCR中,从而形成新输入信道。向GroupByKey的任何其它输入也形成具有恒等映射器的新输入信道。每个有关GroupByKey操作启动输出信道。如果GroupByKey的结果仅由CombineValues操作消耗,则该操作被融合到对应的输出信道中。类似地,如果GroupByKey的或者融合的CombineValues的结果仅由ParallelDo操作消耗,则该操作如果它不能被融合到不同MSCR的输入信道中则也被融合到输出信道中。融合的ParallelDo、GroupByKey和CombineValues操作内部的所有PCollection现在时非必需并且可以被删除。最后,映射器ParallelDo的每个输出生成它自己的直通输出信道,该每个输出流向除了有关GroupByKey之一之外的操作或者输出。
在所有GroupByKey操作已经被变换成MSCR操作之后,任何剩余ParallelDo操作也被变换成平凡MSCR操作,这些平凡MSCR操作具有包含ParallelDo的单个输入信道和恒等输出信道。最终优化执行计划仅包含MSCR、Flatten和Operate操作。
一旦生成了修正的数据流图形,执行器310就执行延缓的组合并行操作以产生与延缓的并行数据对象对应的具体化并行数据对象(406)。执行广义映射精简操作(例如,MSCR)可以包括将广义映射精简操作转译成单个映射精简操作并且执行单个映射精简操作。在执行单个映射精简操作之前,执行器310可以判决是否执行单个映射精简操作作为本地顺序操作或者远程并行操作,并且继而相应地执行单个映射精简。例如,执行器310可以如上文描述的那样基于输入数据集的大小来判决。
图4B是图示了可以由流水线库202c的执行器310为了执行修正的数据流图形而执行的过程450的示例的流程图。执行器310访问修正的数据流图形(452)并且开始例如以向前拓扑方式开始遍历数据流图形(454)。如上文描述的那样,在其它实现方式中,执行器310可以支持流水线的递增或者连续执行。
在执行器310遇到非MSCR操作时(456),执行器310使用在流水线库202c中包括的逻辑来本地执行那些操作(458)。另一方面,当执行器310遇到MSCR操作时(456),执行器310确定是否使用映射精简库202b来执行MSCR作为本地顺序操作或者代之以作为远程并行操作(406)。例如,执行器310可以确定与MSCR相关联的数据的估计的大小并且确定估计的大小是否超过阈值。如果估计大小在阈值大小以下,则执行器310可以执行MSCR作为本地顺序操作(462)。相反地,如果估计的大小等于或者超过阈值大小,则执行器310可以通过将MSCR转译成单个映射精简操作并且使用映射精简库202c执行该映射精简操作作为远程并行操作来执行MSCR操作作为远程并行操作(464)
例如,在一个实现方式中,执行器估计用于MSCR的每个输入信道的输入数据的大小、估计由每个输入信道产生的中间数据的大小,并且估计来自每个输出信道的输出数据的大小。如果这些大小估计中的任何大小估计等于或者超过64兆字节(MB),则使用映射精简库202b来执行MSCR作为远程并行操作(464)。
当执行MSCR作为本地顺序操作时,执行器310可以用依次方式对数据执行适当操作。例如,执行器可以实施存储器中的for循环以访问数据并且对数据执行适当操作。
当使用映射精简库202b来执行MSCR作为远程并行操作时,执行器310可以估计映射工作器进程的数目并且基于MSCR的输入和输出的配置来减少为了执行相关联的处理而需要的工作器进程。例如,执行器可以例如基于用于每个输入信道的输入数据的估计的或者已知大小来估计用于每个输入信道的映射工作器进程的数目,并且类似地可以例如基于将由每个输出信道处理的数据的估计的或者已知数量来估计精简工作器进程的数目。执行器310继而可以合计映射工作器进程的数目和精简工作器进程的数目并且使这些工作器进程使用映射精简库202b来援引。
向每个映射工作器和每个精简工作器给予索引编号。例如,如果MSCR包括两个输入信道,一个具有4个映射工作器进程而另一个具有5个映射工作器进程,则可以向9个工作器给予从1至9的索引编号。这可以同样针对精简工作器进程而发生。这些索引编号被用来分别关联给定映射工作器进程或者精简工作器进程与特定输入或者输出信道。继续前例,索引编号1-4可以与第一输入信道相关联,而索引编号5-9可以与第二输入信道相关联。
执行器310也通过生成在MSCR的输入信道中实施多个映射操作的单个映射函数和在MSCR的输出信道中实施多个精简操作的单个精简函数来将MSCR转译成单个映射精简操作。映射函数使用映射工作器进程的索引作为用于选择将哪个映射操作应用于输入的基础。例如,可以包括if-then语句作为映射函数的部分,其中映射工作器的索引编号是用于if-then语句的判决点。
因此,在映射精简库202b向映射工作器进程分配映射任务时,工作器的相关联的索引与待工作于的文件的标识一起向映射函数中传递。索引编号继而规定映射函数对文件中的元素援引哪个映射操作(parallelDo),并且由此指示工作器实施哪个输入信道。
类似地,精简函数使用精简工作器进程的索引作为用于选择将哪个精简操作应用于精简工作器进程的输入的基础。在向精简工作器函数分配精简任务时,工作器的相关联的索引与待工作于的文件(该文件包含键分组输入的单个平坦化流)的标识一起向精简函数中传递。索引编号继而规定精简函数对文件中的元素援引哪个精简操作,并且由此规定工作器实施哪个输出信道。如果精简工作器进程实施分组输出信道,则精简工作器进程执行CombineValues“组合”操作(如果存在),并且继而执行ParallelDo“精简”操作。如果精简工作器进程实施直通输出信道,则精简工作器进程执行输出键/值对的取消分组操作从而撤消映射精简库的隐式混洗的影响。
MSCR操作的输入信道中的每个输入信道可以向它的R个输出信道中的任何输出信道发出键/值对。例如,输入信道2向输出信道1发送一个输出并且向输出信道3发送另一输出而未向输出信道2发送输出。
映射精简库202b通过映射工作器进程处理对数据输出的混洗,并且继而将输出向正确精简器工作器寻路由。MSCR操作的输入信道中的每个输入信道可以向它的R个输出信道中的任何输出信道发出键/值对。例如,输入信道2向输出信道1发送一个输出并且向输出信道3发送另一输出而未向输出信道2发送输出。这例如由流水线库202c通过使用映射精简库202b中的emitToShard(key,value,shardNum)原语来处理,该原语允许流水线库202c指明向哪个精简工作器进程发送映射工作器进程的给定输出。当从给定映射工作器进程向特定输出信道发送输出时,流水线库202c可以计算与该输出信道对应的精简工作器索引的范围、使用确定性函数来选择它们之一,并且使用emitToShard函数以向所选精简器工作器发送输出。确定性函数可以包括对与输出值相关联的键的散列,其中散列的结果确定选择用于输出的索引的范围内的精简工作器进程中的哪个精简工作器。这可以保证向相同精简工作器进程发送与特定键相关联的所有数据。
在一个实现方式中,映射精简库202b仅直接支持向单个输出的写入。另外,在映射精简库202b的一个实现方式中,如果精简函数的输出预计键/值对,则向这一输出写入的键必须与向精简函数中传递的键相同。对照而言,在一个实现方式中,每个MSCR输出信道可以向零个、一个或者若干输出写入而对键无约束。为了实施这些更灵活的输出,精简函数可以向输出直接写入,从而回避映射精简库的正常输出机制。如果MSCR的输出中的任何输出满足映射精简库的输出的限制,则可以代之以使用映射精简库的正常机制来实施该输出。
在评价每个并行操作时,执行器310用适当数据填充延缓的对象以具体化对象(466),直至完成所有操作,这时执行器310往回向应用202a返回控制(468)。
图5示出了示例执行计划变换,该执行计划变换图示了ParallelDo生产者-消费者融合和同胞融合。图形502图示了包括ParallelDo操作A504、B506、C508和D510的原有图形。如图所示,ParallelDo操作A504、B506、C508和D510被融合成单个ParallelDoA+B+C+D512以形成图形550。图形550中的新ParallelDo根据原有图形502创建所有叶输出以及输出A.1514,因为某一其它操作Op518需要输出A.1514。不再需要并且在图形550中融合掉中间输出A.0516。
图6A和图6B示出了示例执行计划变换600,该执行计划变换图示了MSCR融合。图形601图示了包括三个GroupByKey操作GBK1602、GBK2604和GBK3606的原有图形。在这一示例中,所有三个GroupByKey操作602、604和606有关,并且因此如修正的图形650中所示播种单个MSCR操作652。参照图形601,GBK1602与GBK2604有关,因为它们均消耗ParallelDoM2608的输出。GBK2604与GBK3606有关,因为它们均消耗ParallelDoM4.0612。如由星号指明的那样,除了GBK1602之外的更后操作需要ParallelDoM2.0。类似地,除了形成MSCR操作的那些操作之外的更后操作需要ParallelDoM4.1。
参照图形650,并入ParallelDoM2608、M3614和M4612作为MSCR输入信道616。GroupByKey602、604、606操作中的每个操作变成分组输出信道620。GBK2的输出信道并入CV2CombineValues操作622和R2ParallelDo操作624。R3ParallelDo626操作也融合到输出信道中。为从非ParallelDoOp1向GBK1的输入创建附加恒等输入信道。为在MSCR操作之后使用的M2.0和M4.1PCollection创建两个附加直通输出信道(示出为从映射器到输出的边)。所得MSCR操作650a具有4个输入信道616和5个输出信道620。
图7A至图7E图示了例如由优化器306执行的数据流图形变换的示例。
图7A图示了初始并行数据流水线700。为了简化,未示出并行数据对象。这一流水线取得四个不同输入源并且写入两个输出。Input1由ParallelDo()A702处理。Input2由ParallelDo()B704处理,并且Input3由ParallelDo()C706处理。这两个操作的结果一起被flatten()708并且向ParallelDo()D710中馈送。使用推导的操作712count()对Input4计数,并且结果由ParallelDo()E714进一步处理。使用推导的操作join()716将ParallelDo()A、D和E702、710、714的结果接合在一起。join()716的结果由ParallelDo()F718进一步处理。最后,向外部文件写出ParallelDo()A和F702以及718的结果。
图7B图示了通过对原语(比如ParallelDo()和flatten())以及推导的操作(比如count()和join())的调用而构造的初始数据流图形720,这些推导的操作本身通过对更低级操作的调用来实施。在这一示例中,count()调用扩展成ParallelDoC:Map722、GroupByKeyC:GBK724和CombineValuesC:CV726,并且join()调用扩展成ParallelDo操作J:tag1726、J:Tag2728和J:Tag3730以标示N个输入汇集FlattenJ:Fltn732、GroupByKeyJ:GBK734和ParallelDoJ:Untag736中的每个输入汇集以处理结果。
图7C示出了通过将宿平坦化变换应用于图形720而产生的修正的数据流图形738。通过消耗ParallelDo操作D710和JTag:2728来下推Flatten操作Fltn708。
图7D示出了通过将ParallelDo融合变换应用于图形738而产生的修正的数据流图形740。将生产者-消费者和同步融合二者应用于相邻ParallelDo操作以产生ParallelDo操作760、762、764、766和768。
图7E示出了通过将MSCR融合变换应用于图形740而产生的最终修正数据流图形748。GroupByKey操作C:GBK724和周围ParallelDo操作(C:Map722和C:CV726)融合成第一MSCR操作750。GroupByKey操作J:GBK734变成第二MSCR操作752的核心操作并且包括于分组输出信道中。第二MSCR操作752也在相应输入信道中包括剩余ParallelDo操作770、762、764和766以及直通输出信道744。原有执行计划具有16个数据并行操作(ParallelDo、GroupByKey和CombineValues)。最终计划具有两个MSCR操作。
尽管被描述成被实施为库,但是流水线库202c的功能附加地或者备选地还可以被实施为服务,该服务允许客户端系统通过网络(比如因特网)访问功能。例如,流水线库202c的功能可以在服务器系统上实施为Web服务,该Web服务具有Web服务应用编程接口(API)的对应集合。Web服务API可以例如被实施为基于表示状态转移(REST)的HTTP接口或者基于简单对象访问协议(SOAP)的接口。备选地或者附加地,可以提供接口(比如网页)以通过网络访问服务。
使用API或者接口,用户可以从客户端系统向服务发送由用户开发的程序。程序例如可以包括使用并行汇集类302和并行操作304来实施的数据并行流水线。使用API或者接口,用户可以指明用于流水线的数据并且向服务发送用于执行程序的消息。消息可选地可以包括程序所需任何变元。一旦接收了消息,服务就执行程序并且实施评价器306、优化器308和执行器310的功能以实施数据并行流水线。服务继而可以向客户端系统反馈程序的任何输出。备选地或者附加地,用户程序可以在客户端系统上执行而程序使用API以使用由服务实施的评价器306、优化器308和执行器310的功能来实施数据并行流水线。
图9图示了可以用来实施流水线库202c作为服务(另外称为流水线处理服务)的系统900的示例。一般而言,用来在系统900中实施流水线处理服务的架构提供安全环境,该安全环境允许外部开发者的程序的非置信代码在用来实施流水线处理服务的数据中心内安全运行。这可以例如使用于操作数据中心的实体使流水线处理服务可用于未被实体运用或者未以别的方式与实体联合或者被实体控制的第三方开发者时。
如下文更完全描述的那样,在图9中所示的实现方式中,将非置信数据并行处理代码分解成两个逻辑片段,并且隔离每个片段以在安全处理环境(“沙盒”或者“监狱(jail)”)内运行。一个片段是限定用户的数据并行计算(根据该数据并行计算构建数据流图形)的可执行代码,并且另一片段是包含对数据操作的函数的可执行代码。
例如,非置信代码的每个片段可以在运行客户操作系统并且模拟网络和盘连接的硬件虚拟机(VM)中运行。硬件VM可以防止非置信代码直接访问主机或者本机环境,并且可以提供仅通过具体已审核机制提供虚拟机以外的通信。硬件VM可以防止用户的代码有权访问数据如何在数据中心内被存储和发送的细节。
这一架构可以允许非置信代码在提供本机处理环境的数据中心基础结构上面运行。用来在数据中心内存储和移动数据的文件系统和互连网络可以能够全速运行而用于消耗数据的非置信代码在安全沙盒内运行,这可能减缓非置信代码。在一些情况下,移动数据占用花费在执行数据并行计算的时间中的多数时间。在这一情况下,代码的执行与在由数据中心基础结构提供的本机处理环境中直接运行相比可以仅经历总体执行时间的适度下降。仅将非置信代码置于安全沙盒以内可以在一些实例中比将文件系统和网络的代码和实现方式置于沙盒内更高效。仅将非置信代码置于沙盒内也可以使总体系统更易于保护,因为与可以用来在沙盒内支持整个文件系统和网络的宽得多的通信信道对照存在用于非置信代码与置信主机通信的受限信道。
系统900包括客户端系统902和可以与数据中心100相似的数据中心904。客户端系统902和数据中心904可以通过网络906(比如因特网)相互通信。客户端系统902存储用户程序或者应用908,该用户程序或者应用包括例如使用上文描述的并行数据汇集类302和一个或者多个并行操作304来实施的数据并行流水线,这些并行数据汇集类和并行操作由数据中心904提供的流水线处理服务支持。如下文进一步描述的那样,用户应用908可以向数据中心904上传并且由数据中心904执行。
数据中心904包括与处理模块104相似并且包括多种与计算机有关的部件(比如存储器202、CPU204和网络接口206)以执行数据处理的处理模块910、912和914。数据中心904也包括外部可访问储存库916。
处理模块910实施服务接口918,该服务接口提供用于客户端系统902与流水线处理服务交互的机制。例如,服务接口918可以提供用于与服务交互的API。如上文描述的那样,这样的API可以例如被实施为基于表示状态转移(REST)的HTTP接口或者基于简单对象访问协议(SOAP)的接口。备选地或者附加地,服务接口918可以提供可以显示于客户端系统902上并且用来访问服务的用户接口,比如网页。API或者用户接口可以由客户端系统的用户例如用来向数据中心904上传用户应用908、指明用于用户程序908的数据(例如,由储存器916存储)并且向服务发送用于执行程序908的消息,其中消息可选地包括程序908所需任何变元。
处理模块912实施执行计划服务920和虚拟机922。虚拟机922可以是运行客户操作系统并且模拟网络和盘连接的硬件虚拟机。例如,虚拟机922可以通过在x86架构上虚拟化Linux的“内核虚拟机(KVM)”技术来实施并且可以作为用户进程而运行于置信主机数据中心上。例如,在可从http://www.redhat.com/f/pdf/rhev/DOC-KVM.pdf获得的KVM白皮书中描述了KVM。在其它实现方式中,虚拟机922可以被实施为过程虚拟机。一般而言,过程虚拟机在操作系统中作为应用来运行、支持单个进程并且提供独立于平台的处理环境。
虚拟机922主控(和执行)上传的用户程序908和执行计划库924。当执行用户程序908时,执行计划库924基于并行数据对象和并行操作来构建数据流图形,这些并行数据对象和并行操作形成用户程序906中的流水线。为此,执行计划库924实施评价器926,该评价器与评价器306相似地构造与数据并行流水线对应的延缓的对象和延缓的操作的内部执行计划数据流图形。除了实施评价器926之外,执行计划库924还可以实施用于向执行计划服务920传达数据流图形的表示的其它功能。例如,在一个实现方式中,执行计划库924包括用于使用远程过程调用(RPC)跨越虚拟机边界向执行计划服务920通信的功能。可以监视这些调用以保证进行适当调用。例如,执行计划服务920可以检查供给给定函数的变元的有效性,并且按照被允许的函数调用的白名单检查函数调用。可以执行审核以例如检测对未被允许由非置信代码访问的服务或者其它数据中心资源(例如,文件或者其它基于RPC的服务)的请求(调查)。
在一些实现方式中,可以配置虚拟机922以使得这些RPC调用是用于虚拟机内的代码与虚拟机922外的环境交互的仅有方式。执行计划库926也可以实施用于一旦已经优化和执行了数据流图形就从执行计划服务920接收实现对象的具体化的信息(例如,具体化的对象本身的版本或者具体化的对象的表示)的功能。执行计划库922继而可以使用这一信息以具体化内部数据流图形中的数据对象,从而使得用户程序906可以使用这些具体化的对象。
执行计划服务920处理对从执行计划库924发送的数据流图形的优化和执行。在一个实现方式中,执行计划服务920是置信进程,该置信进程未执行任何非置信用户代码并且具有对数据中心基础结构的完全访问权。执行计划服务920接受代表非置信执行计划的信息并且使图形结构生效。执行计划服务920继而处理对图形的优化(也就是说,应用如上文描述的图形变换)和对优化的图形的执行。
为了处理优化,执行计划服务920实施优化器928。如同优化器308,优化器928应用图形变换(比如上文描述的图形变换)以生成修正的数据流图形,该数据流图形包括延缓的并行数据对象(或者子集)和延缓的组合并行数据操作,这些并行数据操作可以包括MSCR。在一个实现方式中,如同优化器308,优化器928对初始执行计划执行减少总体操作和组操作次数的一系列通过而以产生最少MSCR操作为总目标。
为了处理执行修正的数据流图形,执行计划服务920实施执行器930。如果修正的数据流图形包括数据流图形中的并非MSCR的操作(例如,PObject操作函数),则执行器930可以与虚拟机(比如虚拟机922)通信以在虚拟机内的JVM中实施非置信操作。
对于MSCR,如同执行器310,执行器930将图形中的给定MSCR转译成单个映射精简操作。例如,为了针对给定MSCR而这样做,执行器930生成在MSCR的输入信道中实施多个映射操作的单映射函数和在MSCR的输出信道中实施多个精简操作的单个精简函数。执行器930继而执行单个映射精简操作作为远程并行操作。例如,与参照图4B描述的示例相似,执行器930可以使多个映射工作器和精简工作器用相关联的索引编号来原因,该索引编号控制各自接收的数据以及各自对数据执行映射或者精简操作中的哪个操作。
处理模块914实施映射或者精简工作器中的给定工作器(可以指明一个副本作为主控,该主控协调各种工作器副本)和相关联的虚拟机934。一般而言,在一个实现方式中,仅在虚拟机934中执行非置信用户函数(例如,在单个映射或者精简函数中的映射或者精简操作),而工作器932是未执行任何非置信用户代码并且具有对数据中心基础结构的完全访问权的置信进程。也就是说,在虚拟机934内执行单个映射函数或者单个精简函数(该函数包含非置信用户代码936)而不是每个工作器934直接执行这些函数中的代码。置信工作器932一般处理与基础结构的其余部分的交互,该交互包括数据访问(包括外部数据储存器访问)以及与主控和其它工作器的通信和协调。
如同虚拟机922,虚拟机934可以是硬件虚拟机并且可以使用KVM技术来实施。在其它实现方式中,虚拟机934可以被实施为过程虚拟机。其它处理模块可以实施其它并行工作器和相关联的虚拟机。
除了主控(和执行)用户函数936之外,虚拟机934也主控和执行解批处理器/批处理器进程938,该进程用来处理用于用户函数936的输入和输出数据。一般而言,在工作器932与虚拟机934之间传递输入和输出数据作为批处理记录。例如,工作器932访问(例如,存储于储存器916中的)输入数据、从输入提取批处理记录并且例如使用RPC向虚拟机934中的解批处理器/批处理器938发送输入批处理记录而不是向虚拟机934传递每个记录以用于向用户函数递送。在一个示例中,工作器932被配置成提取64MB的记录并且向解批处理器/批处理器938发送那些记录。
解批处理器/批处理器938被配置成将批处理分解成个别记录、援引用户函数936并且向用户函数936传递个别记录以用于处理。解批处理器/批处理器938也被配置成将用户函数938的输出汇集成输出批处理记录,并且向工作器932传达输出批处理,该工作器继而可以布置以让结果写入到例如执行计划服务920或者系统900的其它部件可以访问的一个或者多个输出文件。执行计划服务920可以负责通过执行计划库922向用户程序908传达回结果。在工作器与虚拟机934之间批处理传递输入和输出可以减少为了越过虚拟机边界而需要的处理开销(例如,为了实施RPC而需要的开销)的影响。
与在执行计划服务920与执行计划库926之间的RPC一样,可以监视在工作器932与解批处理器/批处理器938之间的RPC调用以保证进行适当调用。在一些实现方式中,可以配置虚拟机934以使得这些RPC调用是用于虚拟机内的代码与虚拟机934外的环境交互的仅有方式。
尽管所示实现方式包括解批处理器/批处理器938和跨越虚拟机边界批处理发送记录和结果,但是其它实现方式可以未执行批处理以跨越虚拟机边界通信。
可以配置外部可访问储存库916作为客户端系统902可访问的主控存储服务,从而使得客户端系统可以在储存器916中存储数据(比如用于用户程序908的输入数据)和/或从用户程序908取回输出数据。例如,可以实施储存器916作为具有对应的Web服务API集合的Web服务。可以实施Web服务API例如作为基于表示状态转移(REST)的HTTP接口或者基于简单对象访问协议(SOAP)的接口。在基于REST的接口中,将数据对象作为使用URI来唯一命名的资源来访问,并且客户端系统908和储存器916使用定义的操作集合来交换资源状态的表示。例如,请求的动作可以被表示为动词,比如由HTTPGET、PUT、POST、HEAD和DELETE动词表示。尽管被示出为数据中心904的部分,但是储存器916可以由单独数据中心或者其它设施实施。
在一个实现方式中,用户程序908的结果存储于储存器916中的文件中。文件的文件名可以由执行计划服务920指明或者在用户程序908中被指定。一旦用户程序908已经完成了执行并且结果被存储于储存器916中,成功执行的指示可以被发送回到客户端系统902并且可以可选地包括文件名(例如,如果文件名由执行计划服务920生成或者以别的方式不为客户端系统902所知)。客户端系统902继而可以使用文件名和API以取回结果。
图10是图示了用于执行非置信应用的过程1000的示例的流程图,该非置信应用包括数据并行流水线。下文在系统900的上下文中描述过程1000,但是其它系统或者系统配置可以实施过程900。此外,下文描述如下示例,该示例使用Java(R)变成语言以实施用户程序908(包括用户函数936)、执行计划库924和解批处理器/批处理器938。一般而言,Java(R)程序运行于虚拟机中以便与各种处理硬件兼容。使用虚拟机以运行Java(R)字节代码可以通过使非置信代码运行于虚拟机的多层中来为非置信用户代码提供附加安全层。最内层虚拟机是用来运行Java(R)字节代码的Java(R)VM。下一虚拟机是运行客户操作系统并且模拟网络和盘连接的硬件虚拟机。
作为开始,在数据中心904接收非置信应用(1002)。例如,非置信用户例如使用提供的API或者接口向服务接口918上传用户程序908(表达为Java(R).jar文件)。也使用API或者接口,用户继而通知服务接口910启动用户程序908运行而一些变元控制该运行。例如,变元可以指明储存器916中的具体输入文件。
实例化第一虚拟机(1004)。例如,服务接口910例如使用KVM技术来实例化从属硬件虚拟机922。服务接口910用Java(R)运行时(包括Java(R)VM)、用户的.jar文件(用户程序908)、执行计划库.jar文件以及用来实施用户程序908和执行计划库926的任何其它标准.jar文件和其它数据文件填充虚拟机的(虚拟)本地盘。
继而,在第一虚拟机中执行非置信应用(1006)。例如,服务接口918可以启动Java(R)VM并且在Java(R)VM(该Java(R)VM在虚拟机922)中执行用户的非置信程序906。用户的非置信程序援引执行计划库924,从而使得评价器926基于并行数据对象和并行操作在虚拟机922的存储器中构建数据流图形,这些并行数据对象和并行操作形成用户程序908中的流水线。
在第一虚拟机外传达代表数据流图形的信息(1008)。例如,执行计划库924构建数据流图形的表示,并且使用RPC调用向执行计划服务920传达表示。
在第一虚拟机外,将一个或者多个图形变换应用于代表数据流图形的信息以生成修正的数据流图形,该修正的数据流图形包括延缓的并行数据对象和延缓的组合并行数据操作中的一个或者多个延缓的并行数据对象和延缓的组合并行数据操作(1010)。例如,执行计划服务920接受数据流图形的表示并且使图形结构生效。优化器928执行对图形的优化以生成修正的数据流图形,该修正的数据流图形包括延缓的并行数据对象(或者子集)和延缓的组合并行数据操作,这些数据操作可以包括MSCR。
继而,执行延缓的组合并行操作以产生与延缓的并行数据对象对应的具体化的并行数据对象(1012)。为此,例如,执行器930将图形中的MSCR转译成单个映射精简操作,该映射精简操作包括实施多个映射操作的单个映射函数和实施多个精简操作的单个精简函数。执行器930继而执行单个映射精简操作作为远程并行操作,该远程并行操作造成援引并且向单个映射或者精简函数传递多个并行映射工作器和精简工作器932以及适当输入文件的指示。指明工作其之一作为主控,该主控协调其它工作器的活动。
继而,针对非置信用户函数实例化一个或者多个第二虚拟机。例如,给定的援引的工作器932实例化从属硬件虚拟机934并且用Java(R)运行时(包括Java(R)VM)、单个映射或者精简函数的副本、解批处理器/批处理器代码以及为了实施用户函数936和解批处理器/批处理器938而需要的任何其它标准.jar文件和其它数据文件填充虚拟机的本地盘。工作器932在虚拟机934中启动Java(R)VM并且在Java(R)VM中运行解批处理器/批处理器938。解批处理器/批处理器938控制Java(R)VM中的对用户函数936的援引。
一旦实例化了虚拟机934并且解批处理器/批处理器938运行,工作器932就访问来自储存器916的输入文件。工作器从输入文件提取批处理记录并且使用RPC向VM934内的解批处理器/批处理器938发送输入批处理记录。解批处理器/批处理器938将输入批处理分解成个别记录、援引用户的函数以轮流处理每个记录、将输出记录汇集成输出批处理,并且最后在向RPC的答复中向工作器932传达回输出批处理。
一旦工作器932接收输出批处理,工作器932就布置以让结果写入到例如可以由执行计划库922或者系统900的其它部件访问的一个或者多个输出文件。基于输出文件,执行计划服务920生成实现对象的具体化的信息,比如对象的具体化版本或者具体化的对象的表示。执行计划服务920继而向执行计划库922传达这一信息。执行计划库922使用这一信息具体化内部数据流图形中的数据对象,从而使得用户程序906可以使用那些具体化的对象。
在一个实现方式中,一旦用户程序906完成运行,则向服务接口918传达用户程序906的输出或者结果。服务接口918继而向客户端系统直接传达输出。
备选地或者附加地,可以在储存器916中的文件中存储输出或者结果以便使它们由客户端系统902可访问。例如,在这一情况下,文件的文件名可以由执行计划服务920指明并且与用户程序908成功执行的指示一起提供给客户端系统902。客户端系统902继而可以使用文件名以取回结果。在另一示例中,用户程序908可以指明文件名,并且可以向客户端系统902发送用户程序908的成功执行的指示而不发送文件名。然而,由于文件名由用户程序908指明,所以客户端系统902可以有权访问文件名并且能够取回结果。
使用虚拟机以实施非置信用户代码可以提供异构“深入防御”策略。为了危及下层数据中心,不法非置信代码必须渗透若干审核的屏障。例如,当使用硬件虚拟机时,非置信代码必须危及由硬件虚拟机上的客户操作系统实施的标准过程模型,并且获得客户中的“根”访问。非置信代码继而必须危及由虚拟器的模拟器提供的沙盒。此外,当运用编程语言(该编程语言也将虚拟机运用于运行期)时,非置信代码必须先危及最内层虚拟机。
尽管所示架构将用户程序隔离到数据中心中的沙盒化区域中,可以使用具有对数据中心基础结构的受控访问的其它处理环境。例如,在其它实现方式中,用户程序可以在客户端系统908上执行。与执行计划库924相似,客户端系统908上的库可以生成数据流图形并且直接或者通过服务接口918向执行计划服务920传达数据流图形的表示。执行计划服务920继而可以如上文描述的那样使数据流图形生效、创建修正的图形,并且执行修正的图形,而仍然在虚拟机934或者其它沙盒中执行用户函数以防止用户函数对下层数据中心基础结构的直接访问。
上文描述的技术不限于任何特定硬件或者软件配置。实际上,可以使用硬件、软件或者二者的组合来实施它们。所描述的方法和过程可以被实施为在包括至少一个处理器和至少一个数据存储系统的可编程计算机上执行的计算机程序。可以用高级编程语言实施程序,并且如果希望则也可以用汇编或者其它更低级语言实施程序。
任何这样的程序通常将存储于计算机可用存储介质或者设备(例如CD-Rom、RAM或者磁盘)上。当读取到计算机的处理器中并且执行时,程序的指令使可编程计算机实现上文描述的各种操作。
已经描述了多个实现方式。然而,将理解,可以存在各种修改。因而,其它实现方式在以下权利要求的范围内。

Claims (22)

1.一种用于处理数据的方法,包括:
在包括一个或者多个处理模块并且提供本机处理环境的数据中心接收包括数据并行流水线的非置信应用,其中所述数据并行流水线指定包含多个元素的多个并行数据对象和与对所述元素操作的非置信函数相关联的多个并行操作;
在所述本机处理环境中并且在所述处理模块中的一个或者多个处理模块上实例化第一安全处理环境;
在所述第一安全处理环境中执行所述非置信应用,其中执行所述非置信应用生成与所述数据并行流水线对应的延缓的并行数据对象和延缓的并行操作的数据流图形;
在所述第一安全处理环境以外传达代表所述数据流图形的信息;
在所述第一安全处理环境以外并且在所述本机处理环境中将一个或者多个图形变换应用于代表所述数据流图形的所述信息以生成修正的数据流图形,所述修正的数据流图形包括与所述非置信函数中的一个或者多个非置信函数相关联的、在所述延缓的并行数据对象和延缓的组合并行数据操作中的一个或者多个延缓的并行数据对象和延缓的组合并行数据操作;并且
执行所述延缓的组合并行操作以产生与所述延缓的并行数据对象对应的具体化的并行数据对象,其中执行所述延缓的组合并行操作包括:
在所述本机处理环境中并且在所述处理模块中的一个或者多个处理模块上实例化一个或者多个第二安全处理环境;
在所述一个或者多个第二安全处理环境中执行与所述延缓的组合并行操作相关联的所述非置信函数。
2.根据权利要求1所述的方法,其中所述第一安全处理环境包括第一虚拟机,并且所述一个或者多个第二安全处理环境包括第二虚拟机。
3.根据权利要求2所述的方法,其中所述第一虚拟机和所述一个或者多个第二虚拟机是硬件虚拟机。
4.根据权利要求1所述的方法,其中在所述一个或者多个第二安全处理环境中执行与所述延缓的组合并行操作相关联的所述非置信函数包括:
从所述第二安全处理环境以外向所述第二安全处理环境中传达输入批处理记录,所述输入批处理记录包括多个个别输入记录;并且
对所述输入批处理中的所述个别输入记录中的每个记录执行与所述延缓的组合并行操作相关联的所述非置信函数中的至少一个非置信函数以生成输出记录;
将所述输出记录汇集成输出批处理;并且
在所述第二安全处理环境以外传达所述输出批处理。
5.根据权利要求1所述的方法,还包括将所述非置信应用的输出发送到向所述数据中心发送所述非置信应用的客户端系统。
6.根据权利要求1所述的方法,其中在所述第一安全处理环境以外传达代表所述数据流图形的所述信息包括向在所述第一安全处理环境以外的执行图形服务传达代表所述数据流图形的所述信息。
7.根据权利要求1所述的方法,其中:
所述延缓的组合并行数据操作包括至少一个广义映射精简操作,所述广义映射精简操作包括多个并行映射操作和多个并行精简操作并且可转译成单个映射精简操作,所述单个映射精简操作包括用于实施所述多个并行映射操作的单个映射函数和用于实施所述多个并行精简操作的单个精简函数,所述单个映射函数和所述单个精简函数包括所述非置信函数中的一个或者多个非置信函数。
8.根据权利要求7所述的方法,其中:
执行所述延缓的组合并行操作包括将组合映射精简操作转译成所述单个映射精简操作;并且
在所述一个或者多个第二安全处理环境中执行与所述延缓的组合并行操作相关联的所述非置信函数包括在所述一个或者多个第二安全处理环境中执行所述单个映射函数和所述单个精简函数。
9.根据权利要求1所述的方法,其中:
在所述安全处理环境中执行所述非置信应用包括在所述第一安全处理环境中的虚拟机内执行所述非置信应用;并且
在所述一个或者多个安全处理环境内执行与所述延缓的组合并行操作相关联的所述非置信函数包括在所述一个或者多个第二安全处理环境内的虚拟机中执行与所述延缓的组合并行操作相关联的所述非置信函数。
10.根据权利要求1所述的方法,其中在所述第一安全处理环境以外传达代表所述数据流图形的信息包括使用远程过程调用在所述第一安全处理环境以外传达代表所述数据流图形的信息。
11.根据权利要求10所述的方法,还包括审核所述远程过程调用。
12.一种用于处理数据的系统,包括:
一个或者多个处理模块,配置成提供本机处理环境并且实施以下安全处理环境和服务:
在所述本机处理环境中的第一安全处理环境,所述第一安全处理环境被配置成:
执行包括数据并行流水线的非置信应用,所述数据并行流水线指定包含多个元素的多个并行数据对象和与对所述元素操作的非置信函数相关联的多个并行操作;其中执行所述非置信应用生成与所述数据并行流水线对应的延缓的并行数据对象和延缓的并行操作的数据流图形;
在所述第一安全处理环境以外传达代表所述数据流图形的信息;
位于所述第一安全处理环境以外并且在所述本机处理环境中的服务,所述服务被配置成:
从所述第一安全处理环境接收代表所述数据流图形的所述信息;
将一个或者多个图形变换应用于代表所述数据流图形的所述信息以生成修正的数据流图形,所述修正的数据流图形包括与所述非置信函数中的一个或者多个非置信函数相关联的、所述延缓的并行数据对象和延缓的组合并行数据操作中的一个或者多个延缓的并行数据对象和延缓的组合并行数据操作;
引起执行所述延缓的组合并行操作以产生与所述延缓的并行数据对象对应的具体化的并行数据对象;以及
在所述本机处理环境中的一个或者多个第二安全处理环境,所述一个或者多个第二安全处理环境被配置成执行与所述延缓的组合并行操作相关联的所述非置信函数以造成执行所述延缓的组合并行操作。
13.根据权利要求12所述的系统,其中所述第一安全处理环境包括第一虚拟机,并且所述一个或者多个第二安全处理环境包括第二虚拟机。
14.根据权利要求13所述的系统,其中所述第一虚拟机和所述一个或者多个第二虚拟机是硬件虚拟机。
15.根据权利要求12所述的系统,其中:
所述一个或者多个处理设备被配置成实施工作器,所述工作器被配置成从所述第二安全处理环境以外向所述第二安全处理环境中传达输入批处理记录,所述输入批处理记录包括多个个别输入记录;并且
为了执行与所述延缓的组合并行操作相关联的所述非置信函数,所述一个或者多个第二安全处理环境被配置成:
对所述输入批处理中的所述个别输入记录中的每个记录执行与所述延缓的组合并行操作相关联的所述非置信函数中的至少一个非置信函数以生成输出记录;
将所述输出记录汇集成输出批处理;并且
向所述工作器传达所述输出批处理。
16.根据权利要求12所述的系统,还包括配置成接收所述非置信应用的输出的客户端系统。
17.根据权利要求12所述的系统,其中:
所述延缓的组合并行数据操作包括至少一个广义映射精简操作,所述广义映射精简操作包括多个并行映射操作和多个并行精简操作并且可转译成单个映射精简操作,所述单个映射精简操作包括用于实施所述多个并行映射操作的单个映射函数和用于实施所述多个并行精简操作的单个精简函数,所述单个映射函数和所述单个精简函数包括所述非置信函数中的一个或者多个非置信函数。
18.根据权利要求17所述的系统,其中:
所述服务被配置成将组合映射精简操作转译成所述单个映射精简操作;并且
所述一个或者多个第二安全处理环境被配置成在所述一个或者多个第二安全处理环境中执行所述单个映射函数和所述单个精简函数。
19.根据权利要求12所述的系统,其中:
所述第一安全处理环境被配置成在所述第一安全处理环境中的虚拟机内执行所述非置信应用;并且
所述一个或者多个第二安全处理环境内被配置成在所述一个或者多个第二安全处理环境内的虚拟机中执行与所述延缓的组合并行操作相关联的所述非置信函数。
20.一种用于处理数据的设备,包括:
用于访问代表延缓的并行数据对象和延缓的并行操作的数据流图形的信息的装置,所述延缓的并行数据对象和延缓的并行操作对应于由在非置信应用中包括的数据并行流水线指定的并行数据对象和并行操作,其中所述并行数据对象包含包含多个元素,并且所述并行操作与对所述元素操作的非置信函数相关联;
用于将一个或者多个图形变换应用于代表所述数据流图形的所述信息以生成修正的数据流图形的装置,所述修正的数据流图形包括与所述非置信函数中的一个或者多个非置信函数相关联的、所述延缓的并行数据对象和延缓的组合并行数据操作中的一个或者多个延缓的并行数据对象和延缓的组合并行数据操作;并且
用于执行所述延缓的组合并行操作以产生与所述延缓的并行数据对象对应的具体化的并行数据对象的装置,其中,为了执行所述延缓的组合并行操作,所述设备包括:
用于实例化一个或者多个安全处理环境的装置;
用于在所述一个或者多个安全处理环境中执行与所述延缓的组合并行操作相关联的所述非置信函数的装置。
21.根据权利要求20所述的设备,其中为了访问代表延缓的并行数据对象和延缓的并行操作的所述数据流图形的信息,所述设备包括:
用于接收包括所述数据并行流水线的所述非置信应用的装置;
用于实例化初始安全处理环境的装置;
用于在所述初始安全处理环境中执行所述非置信应用的装置,其中执行所述非置信应用生成延缓的并行数据对象和延缓的并行操作的所述数据流图形;并且
用于在所述初始安全处理环境以外传达代表所述数据流图形的所述信息,从而使得所述图形变换在所述初始安全处理环境以外应用于代表所述数据流图形的所述信息的装置。
22.根据权利要求21所述的设备,其中所述一个或者多个安全处理环境包括虚拟机。
CN201180032739.5A 2010-05-04 2011-05-04 数据的并行处理 Active CN103109260B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510772809.0A CN105279022B (zh) 2010-05-04 2011-05-04 数据的并行处理

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US33114810P 2010-05-04 2010-05-04
US61/331,148 2010-05-04
US12/794,348 US8555265B2 (en) 2010-05-04 2010-06-04 Parallel processing of data
US12/794,348 2010-06-04
US12/959,022 2010-12-02
US12/959,022 US8887156B2 (en) 2010-05-04 2010-12-02 Parallel processing of data
PCT/US2011/035159 WO2011140201A1 (en) 2010-05-04 2011-05-04 Parallel processing of data

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201510772809.0A Division CN105279022B (zh) 2010-05-04 2011-05-04 数据的并行处理

Publications (2)

Publication Number Publication Date
CN103109260A CN103109260A (zh) 2013-05-15
CN103109260B true CN103109260B (zh) 2015-12-02

Family

ID=44902741

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201180032739.5A Active CN103109260B (zh) 2010-05-04 2011-05-04 数据的并行处理
CN201510772809.0A Active CN105279022B (zh) 2010-05-04 2011-05-04 数据的并行处理

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201510772809.0A Active CN105279022B (zh) 2010-05-04 2011-05-04 数据的并行处理

Country Status (7)

Country Link
US (13) US8555265B2 (zh)
EP (1) EP2567313B1 (zh)
KR (3) KR101875178B1 (zh)
CN (2) CN103109260B (zh)
CA (2) CA2798266C (zh)
DE (1) DE202011110864U1 (zh)
WO (1) WO2011140201A1 (zh)

Families Citing this family (157)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9785700B2 (en) 2008-02-11 2017-10-10 Nuix Pty Ltd Systems and methods for load-balancing by secondary processors in parallelized indexing
US8359365B2 (en) 2008-02-11 2013-01-22 Nuix Pty Ltd Systems and methods for load-balancing by secondary processors in parallel document indexing
US9928260B2 (en) 2008-02-11 2018-03-27 Nuix Pty Ltd Systems and methods for scalable delocalized information governance
US11048765B1 (en) 2008-06-25 2021-06-29 Richard Paiz Search engine optimizer
KR101661532B1 (ko) 2008-12-02 2016-09-30 아브 이니티오 테크놀로지 엘엘시 데이터 관리 시스템 내의 데이터 집합의 맵핑 인스턴스
US9665620B2 (en) 2010-01-15 2017-05-30 Ab Initio Technology Llc Managing data queries
US8918388B1 (en) * 2010-02-26 2014-12-23 Turn Inc. Custom data warehouse on top of mapreduce
US8555265B2 (en) 2010-05-04 2013-10-08 Google Inc. Parallel processing of data
US9495427B2 (en) 2010-06-04 2016-11-15 Yale University Processing of data using a database system in communication with a data processing framework
US9336263B2 (en) 2010-06-04 2016-05-10 Yale University Data loading systems and methods
US8935232B2 (en) * 2010-06-04 2015-01-13 Yale University Query execution systems and methods
US8782434B1 (en) 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time
US9489183B2 (en) * 2010-10-12 2016-11-08 Microsoft Technology Licensing, Llc Tile communication operator
KR101911793B1 (ko) * 2010-10-25 2018-10-25 아브 이니티오 테크놀로지 엘엘시 컴퓨터 프로그램을 나타내는 데이터플로우 그래프 내의 데이터세트 객체의 관리
US9430204B2 (en) 2010-11-19 2016-08-30 Microsoft Technology Licensing, Llc Read-only communication operator
US9507568B2 (en) * 2010-12-09 2016-11-29 Microsoft Technology Licensing, Llc Nested communication operator
US9395957B2 (en) 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
US8713039B2 (en) * 2010-12-23 2014-04-29 Microsoft Corporation Co-map communication operator
CN103403698A (zh) * 2011-03-04 2013-11-20 富士通株式会社 分布式计算方法和分布式计算系统
US9116955B2 (en) 2011-05-02 2015-08-25 Ab Initio Technology Llc Managing data queries
US8954967B2 (en) * 2011-05-31 2015-02-10 International Business Machines Corporation Adaptive parallel data processing
WO2012166106A1 (en) 2011-05-31 2012-12-06 Hewlett-Packard Development Company, L.P. Estimating a performance parameter of a job having map and reduce tasks after a failure
WO2013009503A2 (en) 2011-07-08 2013-01-17 Yale University Query execution systems and methods
US9747128B1 (en) * 2011-12-21 2017-08-29 EMC IP Holding Company LLC Worldwide distributed file system model
US9361079B2 (en) * 2012-01-30 2016-06-07 Nvidia Corporation Method for compiling a parallel thread execution program for general execution
US20130219394A1 (en) * 2012-02-17 2013-08-22 Kenneth Jerome GOLDMAN System and method for a map flow worker
US8949175B2 (en) * 2012-04-17 2015-02-03 Turn Inc. Meta-data driven data ingestion using MapReduce framework
US10346375B2 (en) 2012-04-26 2019-07-09 Entit Software Llc In-database parallel analytics
CN103379114B (zh) 2012-04-28 2016-12-14 国际商业机器公司 用于在MapReduce系统中保护隐私数据的方法和装置
US9165035B2 (en) * 2012-05-10 2015-10-20 Microsoft Technology Licensing, Llc Differential dataflow
US8972986B2 (en) * 2012-05-25 2015-03-03 International Business Machines Corporation Locality-aware resource allocation for cloud computing
US8984515B2 (en) 2012-05-31 2015-03-17 International Business Machines Corporation System and method for shared execution of mixed data flows
US9542462B1 (en) * 2012-06-14 2017-01-10 Google Inc. Scaling high-level statistical languages to large, distributed datasets
US9235446B2 (en) * 2012-06-22 2016-01-12 Microsoft Technology Licensing, Llc Parallel computing execution plan optimization
JP5935889B2 (ja) * 2012-08-02 2016-06-15 富士通株式会社 データ処理方法、情報処理装置およびプログラム
US20140059552A1 (en) * 2012-08-24 2014-02-27 International Business Machines Corporation Transparent efficiency for in-memory execution of map reduce job sequences
US9063721B2 (en) 2012-09-14 2015-06-23 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
WO2014047182A2 (en) 2012-09-21 2014-03-27 Nyse Group, Inc. High performance data streaming
US9471651B2 (en) 2012-10-08 2016-10-18 Hewlett Packard Enterprise Development Lp Adjustment of map reduce execution
US10489360B2 (en) 2012-10-17 2019-11-26 Ab Initio Technology Llc Specifying and applying rules to data
US9146830B2 (en) * 2012-10-26 2015-09-29 Jsmapreduce Corporation Hybrid local/remote infrastructure for data processing with lightweight setup, powerful debuggability, controllability, integration, and productivity features
US9832068B2 (en) 2012-12-17 2017-11-28 Microsoft Technology Licensing, Llc Reachability-based coordination for cyclic dataflow
US9536016B2 (en) * 2013-01-16 2017-01-03 Google Inc. On-disk multimap
US20140215471A1 (en) * 2013-01-28 2014-07-31 Hewlett-Packard Development Company, L.P. Creating a model relating to execution of a job on platforms
US11741090B1 (en) 2013-02-26 2023-08-29 Richard Paiz Site rank codex search patterns
US11809506B1 (en) 2013-02-26 2023-11-07 Richard Paiz Multivariant analyzing replicating intelligent ambience evolving system
US9336058B2 (en) 2013-03-14 2016-05-10 International Business Machines Corporation Automated scheduling management of MapReduce flow-graph applications
US10268727B2 (en) 2013-03-29 2019-04-23 Hewlett Packard Enterprise Development Lp Batching tuples
US9116953B2 (en) 2013-05-17 2015-08-25 Sap Se Calculation engine with dynamic partitioning of intermediate results
US9537931B2 (en) 2013-07-29 2017-01-03 Red Hat, Inc. Dynamic object oriented remote instantiation
WO2015030717A1 (en) * 2013-08-27 2015-03-05 Empire Technology Development Llc Consolidating operations associated with a plurality of host devices
KR20150033453A (ko) * 2013-09-24 2015-04-01 주식회사 엘지씨엔에스 빅데이터 처리 방법, 이를 수행하는 빅데이터 처리 장치 및 이를 저장하는 기록매체
US20150149745A1 (en) * 2013-11-25 2015-05-28 Markus Eble Parallelization with controlled data sharing
US10776325B2 (en) * 2013-11-26 2020-09-15 Ab Initio Technology Llc Parallel access to data in a distributed file system
CA2929716C (en) * 2013-12-06 2021-08-31 Ab Initio Technology Llc Source code translation
CN103678235B (zh) * 2013-12-09 2016-06-08 无锡市同威科技有限公司 基于并行流水线网络数据处理装置及方法
US9489225B2 (en) * 2014-01-15 2016-11-08 Cisco Technology, Inc. Allocating resources for multi-phase, distributed computing jobs
US9514171B2 (en) * 2014-02-11 2016-12-06 International Business Machines Corporation Managing database clustering indices
US9563697B1 (en) 2014-02-24 2017-02-07 Amazon Technologies, Inc. Calculating differences between datasets having differing numbers of partitions
US9424290B2 (en) 2014-03-11 2016-08-23 Wipro Limited System and method for data validation
US9367366B2 (en) * 2014-03-27 2016-06-14 Nec Corporation System and methods for collaborative query processing for large scale data processing with software defined networking
US9268597B2 (en) 2014-04-01 2016-02-23 Google Inc. Incremental parallel processing of data
US9607073B2 (en) 2014-04-17 2017-03-28 Ab Initio Technology Llc Processing data from multiple sources
US9483310B2 (en) 2014-04-29 2016-11-01 Bluedata Software, Inc. Associating cache memory with a work process
US11169993B2 (en) * 2014-06-06 2021-11-09 The Mathworks, Inc. Datastore mechanism for managing out-of-memory data
JP2016004328A (ja) * 2014-06-13 2016-01-12 富士通株式会社 タスク割当プログラム、タスク割当方法およびタスク割当装置
US11099841B2 (en) * 2014-06-26 2021-08-24 Sap Se Annotations for parallelization of user-defined functions with flexible partitioning
US9298590B2 (en) * 2014-06-26 2016-03-29 Google Inc. Methods and apparatuses for automated testing of streaming applications using mapreduce-like middleware
US10248688B2 (en) * 2014-06-26 2019-04-02 Sap Se Annotations for parallelization of user-defined functions with flexible partitioning
US9286044B2 (en) * 2014-06-27 2016-03-15 International Business Machines Corporation Hybrid parallelization strategies for machine learning programs on top of MapReduce
US9613127B1 (en) * 2014-06-30 2017-04-04 Quantcast Corporation Automated load-balancing of partitions in arbitrarily imbalanced distributed mapreduce computations
AU2015289442B2 (en) 2014-07-18 2019-07-11 Ab Initio Technology Llc Managing lineage information
US10826930B2 (en) 2014-07-22 2020-11-03 Nuix Pty Ltd Systems and methods for parallelized custom data-processing and search
CN105302536A (zh) * 2014-07-31 2016-02-03 国际商业机器公司 MapReduce应用的相关参数的配置方法和装置
CN106687921B (zh) * 2014-09-02 2021-02-02 起元科技有限公司 在基于图的程序中指定组件
US9933918B2 (en) * 2014-09-02 2018-04-03 Ab Initio Technology Llc Specifying control and data connections in graph-based programs
SG11201701652QA (en) 2014-09-02 2017-04-27 Ab Initio Technology Llc Compilation of graph-based program specifications with automated clustering of graph components based on the identification of particular data port connections
US9760406B2 (en) 2014-09-02 2017-09-12 Ab Initio Technology Llc Controlling data processing tasks
GB2530052A (en) 2014-09-10 2016-03-16 Ibm Outputting map-reduce jobs to an archive file
US9626393B2 (en) 2014-09-10 2017-04-18 Ab Initio Technology Llc Conditional validation rules
US10095654B2 (en) * 2014-09-30 2018-10-09 International Business Machines Corporation Mapping and reducing
US10353912B2 (en) 2014-10-10 2019-07-16 Salesforce.Com, Inc. Navigation of a data extraction graph of data and metadata from a data repository
US9747089B2 (en) * 2014-10-21 2017-08-29 International Business Machines Corporation Automatic conversion of sequential array-based programs to parallel map-reduce programs
US10437819B2 (en) 2014-11-14 2019-10-08 Ab Initio Technology Llc Processing queries containing a union-type operation
US9639566B2 (en) * 2014-12-18 2017-05-02 Here Global B.V. Method, apparatus and computer program product for improved storage of key-value pairs
US20160191508A1 (en) * 2014-12-31 2016-06-30 Nexenta Systems, Inc. Methods and Systems for Block Sharding of Objects Stored in Distributed Storage System
CN105897805B (zh) * 2015-01-04 2019-12-27 伊姆西公司 对多层架构的数据中心的资源进行跨层调度的方法和装置
US10417281B2 (en) 2015-02-18 2019-09-17 Ab Initio Technology Llc Querying a data source on a network
US10397313B2 (en) * 2015-03-18 2019-08-27 Nokia Of America Corporation Data stream load balancing utilizing multiple sets of servers
GB2554201B (en) * 2015-04-10 2022-05-11 Google Llc Binary translation into native client
US11200249B2 (en) 2015-04-16 2021-12-14 Nuix Limited Systems and methods for data indexing with user-side scripting
WO2016172015A1 (en) * 2015-04-20 2016-10-27 3M Innovative Properties Company Durable low emissivity window film constructions
US10133827B2 (en) 2015-05-12 2018-11-20 Oracle International Corporation Automatic generation of multi-source breadth-first search from high-level graph language
US9684526B2 (en) * 2015-05-15 2017-06-20 Ab Initio Technology Llc Techniques for configuring a generic program using controls
US10614126B2 (en) 2015-05-21 2020-04-07 Oracle International Corporation Textual query editor for graph databases that performs semantic analysis using extracted information
US9575736B2 (en) * 2015-07-22 2017-02-21 Oracle International Corporation Advanced interactive command-line front-end for graph analysis systems
US10127025B2 (en) 2015-07-22 2018-11-13 Oracle International Corporation Optimization techniques for high-level graph language compilers
US10810257B2 (en) 2015-08-27 2020-10-20 Oracle International Corporation Fast processing of path-finding queries in large graph databases
US10530892B2 (en) * 2015-09-28 2020-01-07 Microsoft Technology Licensing, Llc Processing request for multi-versioned service
US9323644B1 (en) * 2015-09-30 2016-04-26 Semmle Limited Query-based software dependency analysis
US9971570B2 (en) 2015-12-15 2018-05-15 Oracle International Corporation Automated generation of memory consumption aware code
US9715373B2 (en) 2015-12-18 2017-07-25 International Business Machines Corporation Dynamic recompilation techniques for machine learning programs
US10684781B1 (en) * 2015-12-23 2020-06-16 The Mathworks, Inc. Big data read-write reduction
US10394600B2 (en) * 2015-12-29 2019-08-27 Capital One Services, Llc Systems and methods for caching task execution
US10216926B2 (en) * 2016-01-29 2019-02-26 Cisco Technology, Inc. Isolation of untrusted code in operating system without isolation capability
KR102592611B1 (ko) * 2016-02-18 2023-10-23 한국전자통신연구원 맵 리듀스 장치, 맵 리듀스 제어장치 및 그 방법
CN107688493B (zh) * 2016-08-05 2021-06-18 阿里巴巴集团控股有限公司 训练深度神经网络的方法、装置及系统
US9977725B2 (en) 2016-08-26 2018-05-22 Cisco Technology, Inc. Automatic classification and parallel processing of untested code in a protected runtime environment
US10025566B1 (en) * 2016-10-07 2018-07-17 The Mathworks, Inc. Scheduling technique to transform dataflow graph into efficient schedule
US10613897B1 (en) * 2016-12-21 2020-04-07 Ca, Inc. Systems and methods for creating program-specific execution environments
US10769180B2 (en) 2017-02-02 2020-09-08 International Business Machines Corporation Efficient dataflow processing for objects
US10168705B2 (en) * 2017-04-06 2019-01-01 Uber Technologies, Inc. Automatic tuning of autonomous vehicle cost functions based on human driving data
US10540398B2 (en) 2017-04-24 2020-01-21 Oracle International Corporation Multi-source breadth-first search (MS-BFS) technique and graph processing system that applies it
CN107256363B (zh) * 2017-06-13 2020-03-06 杭州华澜微电子股份有限公司 一种由加解密模块阵列组成的高速加解密装置
US10585945B2 (en) 2017-08-01 2020-03-10 Oracle International Corporation Methods of graph-type specialization and optimization in graph algorithm DSL compilation
US10887235B2 (en) * 2017-08-24 2021-01-05 Google Llc Method of executing a tuple graph program across a network
US10642582B2 (en) 2017-08-24 2020-05-05 Google Llc System of type inference for tuple graph programs method of executing a tuple graph program across a network
US10599482B2 (en) 2017-08-24 2020-03-24 Google Llc Method for intra-subgraph optimization in tuple graph programs
CN107832144B (zh) * 2017-10-20 2020-07-28 南方电网科学研究院有限责任公司 分布式并行计算方法和装置
US11294943B2 (en) * 2017-12-08 2022-04-05 International Business Machines Corporation Distributed match and association of entity key-value attribute pairs
CN108197246A (zh) * 2017-12-29 2018-06-22 安徽迈普德康信息科技有限公司 一种地下管线电子地图管理系统
US11556710B2 (en) 2018-05-11 2023-01-17 International Business Machines Corporation Processing entity groups to generate analytics
US11036471B2 (en) * 2018-06-06 2021-06-15 Sap Se Data grouping for efficient parallel processing
US11277455B2 (en) 2018-06-07 2022-03-15 Mellanox Technologies, Ltd. Streaming system
US10733034B2 (en) 2018-06-15 2020-08-04 Sap Se Trace messaging for distributed execution of data processing pipelines
US10747506B2 (en) * 2018-06-15 2020-08-18 Sap Se Customizing operator nodes for graphical representations of data processing pipelines
US11275485B2 (en) 2018-06-15 2022-03-15 Sap Se Data processing pipeline engine
US10866831B2 (en) 2018-06-15 2020-12-15 Sap Se Distributed execution of data processing pipelines
US10949219B2 (en) 2018-06-15 2021-03-16 Sap Se Containerized runtime environments
CN109189477B (zh) * 2018-06-27 2021-09-28 北京中科睿芯科技集团有限公司 一种面向多上下文粗粒度数据流结构的指令发射控制方法
US11003686B2 (en) 2018-07-26 2021-05-11 Roblox Corporation Addressing data skew using map-reduce
JP2022500755A (ja) * 2018-09-11 2022-01-04 ホアウェイ・テクノロジーズ・カンパニー・リミテッド 順次計算dagのための異種スケジューリング
US20200106828A1 (en) * 2018-10-02 2020-04-02 Mellanox Technologies, Ltd. Parallel Computation Network Device
US10795672B2 (en) 2018-10-31 2020-10-06 Oracle International Corporation Automatic generation of multi-source breadth-first search from high-level graph language for distributed graph processing systems
US10565038B1 (en) * 2018-11-27 2020-02-18 Massachusetts Institute Of Technology Method and apparatus for graph-based computing
US11379308B2 (en) * 2018-12-10 2022-07-05 Zoox, Inc. Data processing pipeline failure recovery
US11625393B2 (en) 2019-02-19 2023-04-11 Mellanox Technologies, Ltd. High performance computing system
EP3699770A1 (en) 2019-02-25 2020-08-26 Mellanox Technologies TLV Ltd. Collective communication system and methods
US10956212B1 (en) * 2019-03-08 2021-03-23 The Mathworks, Inc. Scheduler for tall-gathering algorithms that include control flow statements
US11093223B2 (en) 2019-07-18 2021-08-17 Ab Initio Technology Llc Automatically converting a program written in a procedural programming language into a dataflow graph and related systems and methods
US10826801B1 (en) 2019-07-31 2020-11-03 Bank Of America Corporation Multi-level data channel and inspection architectures
US11115310B2 (en) 2019-08-06 2021-09-07 Bank Of America Corporation Multi-level data channel and inspection architectures having data pipes in parallel connections
US11470046B2 (en) 2019-08-26 2022-10-11 Bank Of America Corporation Multi-level data channel and inspection architecture including security-level-based filters for diverting network traffic
US11461135B2 (en) 2019-10-25 2022-10-04 International Business Machines Corporation Dynamically modifying the parallelism of a task in a pipeline
WO2021137669A1 (ko) * 2019-12-30 2021-07-08 매니코어소프트주식회사 딥러닝을 위한 가속기용 프로그램 생성 방법
CN113126958B (zh) * 2019-12-31 2022-07-08 思必驰科技股份有限公司 基于信息流的决策调度定制方法和系统
US11750699B2 (en) 2020-01-15 2023-09-05 Mellanox Technologies, Ltd. Small message aggregation
US11252027B2 (en) 2020-01-23 2022-02-15 Mellanox Technologies, Ltd. Network element supporting flexible data reduction operations
CN111488888B (zh) * 2020-04-10 2022-12-02 腾讯科技(深圳)有限公司 图像特征提取方法以及人脸特征生成设备
US11876885B2 (en) 2020-07-02 2024-01-16 Mellanox Technologies, Ltd. Clock queue with arming and/or self-arming features
US11848980B2 (en) * 2020-07-09 2023-12-19 Boray Data Technology Co. Ltd. Distributed pipeline configuration in a distributed computing system
US11513991B2 (en) * 2020-10-01 2022-11-29 Qualcomm Incorporated Batch operation across an interface
US11556378B2 (en) 2020-12-14 2023-01-17 Mellanox Technologies, Ltd. Offloading execution of a multi-task parameter-dependent operation to a network device
CA3209125A1 (en) 2021-01-31 2022-08-04 Ab Initio Technology Llc Data processing system with manipulation of logical dataset groups
US11556452B2 (en) 2021-03-31 2023-01-17 Bank Of America Corporation System for software compiler integrity verification
CN114579190B (zh) * 2022-02-17 2022-10-14 中国科学院计算机网络信息中心 基于流水线机制的跨中心协同计算的编排方法与系统
US11922237B1 (en) 2022-09-12 2024-03-05 Mellanox Technologies, Ltd. Single-step collective operations

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101568900A (zh) * 2006-12-22 2009-10-28 日本电气株式会社 并行排序装置、方法及程序

Family Cites Families (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6128642A (en) * 1997-07-22 2000-10-03 At&T Corporation Load balancing based on queue length, in a network of processor stations
US7164422B1 (en) * 2000-07-28 2007-01-16 Ab Initio Software Corporation Parameterized graphs with conditional components
EP1634182A2 (en) 2003-06-17 2006-03-15 PACT XPP Technologies AG Data processing device and method
US7743382B2 (en) 2003-11-03 2010-06-22 Ramal Acquisition Corp. System for deadlock condition detection and correction by allowing a queue limit of a number of data tokens on the queue to increase
US7389510B2 (en) * 2003-11-06 2008-06-17 International Business Machines Corporation Load balancing of servers in a cluster
US7756919B1 (en) * 2004-06-18 2010-07-13 Google Inc. Large-scale data processing in a distributed and parallel processing enviornment
US7590620B1 (en) * 2004-06-18 2009-09-15 Google Inc. System and method for analyzing data records
US7650331B1 (en) 2004-06-18 2010-01-19 Google Inc. System and method for efficient large-scale data processing
JP4275013B2 (ja) * 2004-06-21 2009-06-10 三洋電機株式会社 データフローグラフ処理装置、処理装置、リコンフィギュラブル回路。
CN101006433B (zh) 2004-08-25 2012-01-11 日本电气株式会社 信息通信装置和程序执行环境控制方法
US7941794B2 (en) * 2004-08-30 2011-05-10 Sanyo Electric Co., Ltd. Data flow graph processing method and processing apparatus provided with reconfigurable circuit
US20090217020A1 (en) * 2004-11-22 2009-08-27 Yourst Matt T Commit Groups for Strand-Based Computing
JP4556144B2 (ja) 2005-06-17 2010-10-06 日本電気株式会社 情報処理装置、復旧装置、プログラム及び復旧方法
US7716630B2 (en) * 2005-06-27 2010-05-11 Ab Initio Technology Llc Managing parameters for graph-based computations
US7739314B2 (en) 2005-08-15 2010-06-15 Google Inc. Scalable user clustering based on set similarity
GB0517304D0 (en) * 2005-08-23 2005-10-05 Netronome Systems Inc A system and method for processing and forwarding transmitted information
US20070083735A1 (en) * 2005-08-29 2007-04-12 Glew Andrew F Hierarchical processor
US8429630B2 (en) * 2005-09-15 2013-04-23 Ca, Inc. Globally distributed utility computing cloud
US7870556B2 (en) * 2006-05-16 2011-01-11 Ab Initio Technology Llc Managing computing resources in graph-based computations
JP4770657B2 (ja) * 2006-09-13 2011-09-14 日本電気株式会社 パイプライン合成システム、方法及びプログラム
US7844959B2 (en) * 2006-09-29 2010-11-30 Microsoft Corporation Runtime optimization of distributed execution graph
US8190610B2 (en) * 2006-10-05 2012-05-29 Yahoo! Inc. MapReduce for distributed database processing
US7921416B2 (en) * 2006-10-20 2011-04-05 Yahoo! Inc. Formal language and translator for parallel processing of data
US20080250227A1 (en) 2007-04-04 2008-10-09 Linderman Michael D General Purpose Multiprocessor Programming Apparatus And Method
US8296743B2 (en) * 2007-12-17 2012-10-23 Intel Corporation Compiler and runtime for heterogeneous multiprocessor systems
US8537160B2 (en) 2008-03-05 2013-09-17 Microsoft Corporation Generating distributed dataflow graphs
US9058483B2 (en) 2008-05-08 2015-06-16 Google Inc. Method for validating an untrusted native code module
JP5056644B2 (ja) 2008-07-18 2012-10-24 富士通セミコンダクター株式会社 データ変換装置、データ変換方法及びプログラム
JP4635082B2 (ja) * 2008-09-30 2011-02-16 株式会社東芝 マルチプロセッサシステム及びグルーピング方法
US7917463B2 (en) * 2008-10-10 2011-03-29 Business.Com, Inc. System and method for data warehousing and analytics on a distributed file system
US20100162230A1 (en) 2008-12-24 2010-06-24 Yahoo! Inc. Distributed computing system for large-scale data handling
US20100175049A1 (en) 2009-01-07 2010-07-08 Microsoft Corporation Scope: a structured computations optimized for parallel execution script language
US8225277B2 (en) * 2009-01-31 2012-07-17 Ted J. Biggerstaff Non-localized constraints for automated program generation
US9110706B2 (en) * 2009-02-09 2015-08-18 Microsoft Technology Licensing, Llc General purpose distributed data parallel computing using a high level language
US8209664B2 (en) * 2009-03-18 2012-06-26 Microsoft Corporation High level programming extensions for distributed data parallel processing
US8239847B2 (en) * 2009-03-18 2012-08-07 Microsoft Corporation General distributed reduction for data parallel computing
US20100281078A1 (en) 2009-04-30 2010-11-04 Microsoft Corporation Distributed data reorganization for parallel execution engines
US9733914B2 (en) * 2009-06-01 2017-08-15 National Instruments Corporation Loop parallelization analyzer for data flow programs
US8478967B2 (en) * 2009-06-01 2013-07-02 National Instruments Corporation Automatically creating parallel iterative program code in a data flow program
US8365142B2 (en) * 2009-06-15 2013-01-29 Microsoft Corporation Hypergraph implementation
US9268815B2 (en) * 2009-08-20 2016-02-23 Hewlett Packard Enterprise Development Lp Map-reduce and parallel processing in databases
US8321454B2 (en) * 2009-09-14 2012-11-27 Myspace Llc Double map reduce distributed computing framework
US8555265B2 (en) 2010-05-04 2013-10-08 Google Inc. Parallel processing of data
US8583757B2 (en) * 2010-05-31 2013-11-12 Hitachi, Ltd. Data processing method and computer system
US8381015B2 (en) * 2010-06-30 2013-02-19 International Business Machines Corporation Fault tolerance for map/reduce computing
US8510284B2 (en) * 2010-12-20 2013-08-13 Microsoft Corporation Large-scale event evaluation using realtime processors
US8751639B2 (en) * 2011-04-27 2014-06-10 Rackspace Us, Inc. Event queuing and distribution system
US9450873B2 (en) * 2011-06-28 2016-09-20 Microsoft Technology Licensing, Llc Performance isolation for clouds
US9542462B1 (en) * 2012-06-14 2017-01-10 Google Inc. Scaling high-level statistical languages to large, distributed datasets
US9454571B2 (en) * 2014-06-26 2016-09-27 Sap Se Optimization of parallelization of user-defined functions with flexible partitioning
US9350384B2 (en) * 2014-09-30 2016-05-24 International Business Machines Corporation Hierarchical data compression and computation
US10417239B2 (en) * 2017-01-13 2019-09-17 International Business Machines Corporation Reducing flow delays in a data streaming application caused by lookup operations

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101568900A (zh) * 2006-12-22 2009-10-28 日本电气株式会社 并行排序装置、方法及程序

Also Published As

Publication number Publication date
US8555265B2 (en) 2013-10-08
US9477502B2 (en) 2016-10-25
KR101870320B1 (ko) 2018-06-22
EP2567313A1 (en) 2013-03-13
US20170242715A1 (en) 2017-08-24
US20150248304A1 (en) 2015-09-03
US8959499B2 (en) 2015-02-17
CN103109260A (zh) 2013-05-15
US10795705B2 (en) 2020-10-06
US20190317782A1 (en) 2019-10-17
WO2011140201A1 (en) 2011-11-10
US11392398B2 (en) 2022-07-19
US20220300310A1 (en) 2022-09-22
US9626202B2 (en) 2017-04-18
US10338942B2 (en) 2019-07-02
CN105279022B (zh) 2019-10-01
KR20130114577A (ko) 2013-10-17
KR101875178B1 (ko) 2018-07-06
US20200401429A1 (en) 2020-12-24
CN105279022A (zh) 2016-01-27
US8887156B2 (en) 2014-11-11
EP2567313A4 (en) 2016-12-07
US10133592B2 (en) 2018-11-20
US20190065224A1 (en) 2019-02-28
CA3014814C (en) 2020-02-11
US20110276789A1 (en) 2011-11-10
CA2798266C (en) 2018-10-02
KR20180078341A (ko) 2018-07-09
US20170249567A1 (en) 2017-08-31
EP2567313B1 (en) 2019-07-17
KR101904526B1 (ko) 2018-11-28
US11755351B2 (en) 2023-09-12
US20140032527A1 (en) 2014-01-30
US9898313B2 (en) 2018-02-20
KR20170089958A (ko) 2017-08-04
DE202011110864U1 (de) 2017-01-16
US9678770B2 (en) 2017-06-13
US20230376332A1 (en) 2023-11-23
CA3014814A1 (en) 2011-11-10
US20170017797A1 (en) 2017-01-19
CA2798266A1 (en) 2011-11-10
US20110276962A1 (en) 2011-11-10
US20150178114A1 (en) 2015-06-25

Similar Documents

Publication Publication Date Title
CN103109260B (zh) 数据的并行处理
US8108193B2 (en) Collaboration framework for modeling
Farnaghi et al. Disaster planning using automated composition of semantic OGC web services: A case study in sheltering
Stefanello et al. Hybrid algorithms for placement of virtual machines across geo-separated data centers
Sánchez et al. Soil: An agent-based social simulator in Python for modelling and simulation of social networks
Vining et al. Developing a framework for trustworthy AI-supported knowledge management in the governance of risk and change
Liles On the characterization and analysis of system of systems architectures
Arena Towards semantics-driven modelling and simulation of context-aware manufacturing systems
Castejon et al. Multi-agent planning by distributed constraint satisfaction
Ren et al. Composition and automation of grid services
Moradi et al. An agent-based environment for simulation model composition
Dossou et al. The use of Multi-agent Systems for Improving a Logistic Platform in a GRAI Environment
Amini et al. A New Architecture for Enterprise Resource Planning SystemsBased on a Combination of Event-based Software Architecture and Service-oriented Architecture
Guedes et al. Developing mobile agent-based applications
CN116975050A (zh) 一种数据处理方法、装置、设备以及计算机可读存储介质
Nikolaidou et al. Frameworks for model-based design of enterprise information systems
Barn et al. Applying Component Concepts to Service Oriented Design: A Case Study.

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP01 Change in the name or title of a patent holder

Address after: American California

Patentee after: Google limited liability company

Address before: American California

Patentee before: Google Inc.

CP01 Change in the name or title of a patent holder