技术开发 频道

分布式并行计算平台Dryad入门

    【IT168 技术】MapReduce 是由Google公司开发的一个针对大规模群组中的海量数据处理的分布式编程模型,在处理T级别以上巨量数据的业务上有着明显的优势。与Google的MapReduce相似,2010年12月21日微软推出了dryad的公测版,Dryad也通过分布式计算机网络计算海量数据,成为谷歌MapReduce分布式数据计算平台的竞争对手。与 MapReduce不同的是,Dryad是针对运行Windows HPC Server的计算机集群设计的,而且DryadLINQ使用.NET的LINQ查询语言模型。Dryad使.Net程序员可以利用数据中心的服务器集群对数据进行并行处理,这样使得程序员在操作数千台机器时,无需关心并行处理的细节。本文将从Dryad与云计算、Dryad的架构、DryadLINQ、Dryad同MapReduce的比较、Dryad的应用及前景这五个方面来进行介绍。

  Dryad与云计算

  云计算是网格计算(Grid Computing)、分布式计算(Distributed Computing)、并行计算(Parallel Computing)、效用计算(Utility Computing)、网络存储(Network Storage Technologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等计算机技术和网络技术相融合的产物。典型的云计算技术特征可分为虚拟化技术、分布式技术、并行计算/分布式计算、XaaS、WEB X.0、数据存储、网络技术等等。

  分布式计算(Distributed Computing)是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。

  并行计算(Parallel computing,或称并行处理、平行计算)一般是指许多指令得以同时进行的计算模式。

  高性能计算是云计算的特征之一,分布式并行计算是实现高性能计算的关键技术。2004年,谷歌发布了两篇关于MapReduce和分布式文件系统GFS的研究报告,这两篇报告成为Hadoop的基础。Apache 将Hadoop变为开源项目,雅虎也对Hadoop进行了单独开发。现在,Hadoop是雅虎的在线基础设施的重要支撑,并且已经被Facebook、 Twitter、苹果和微软等科技巨头采用。2008年,微软收购了语义搜索企业Powerset,并将Powerset公司基于Hadoop的相关技术用于必应(Bing)搜索引擎。

  Dryad被设计为伸缩于各种规模的计算平台:从单台多核计算机、到由几台计算机组成的小型集群,直至拥有数千台计算机的数据中心。Dryad执行引擎负责处理大型分布式、并行应用程序中会出现的各种难题:对计算机和它们的CPU进行调度,从通信或计算机的失败中恢复,以及数据在节点之间的传递等等。

  Dryad的架构

  一个Dryad程序员通过使用单向通道来连接并行程序。Dryad系统的总体的构建用来支持有向无环图(Directed Acycline Graph,DAG)类型数据流的并行程序。一个Dryad 任务被表示为一个有向无环图,当发生重要的计算事件时,这些图甚至在执行期间也能发生变化。Dryad Job结构如下图1所示:

  


▲ Dryad Job结构

  Dryad构建在Cluster Service和分布式文件系统之上,它的工作原理是这样的:当用户使用Dryad平台时,任务管理器(Job Manager,JM)获取图之后,便会在程序的输入通道准备完毕,并且有可用机器的时候对它进行调度。JM从命名服务器(Name Server,NS)那里获得一个可用的机器,并通过一个维护进程(daemon,D)来调度这个程序。文件,共享内存,或TCP管道都可以作为程序(节点)之间通信用的通道。在运行过程中可以动态改变图的形状,并得到很好的容错性。在调试的时候,整个图也可以运行在单个系统上。

  最底层使用了群集系统的windows server,这些server提供了群集服务(Cluster service)。在Cluster Service的基础上可以构建分布式文件系统(Cosmos),同时也支持CIFS和NTFS的文件系统,这使得数据的访问对上面的应用程序是半透明的。Dryad可以处理任务的创建和管理、资源管理、任务监控和可视化、容错、重新执行和调度等工作。有关Dryad系统架构的内容也可以参考IT168专题文章:http://tech.it168.com/a2011/0318/1167/000001167839.shtml

   Dryad的技术架构图如下所示:


▲Dryad技术架构

  DryadLINQ

  DryadLINQ是一种分布式计算语言,能够将LINQ编写的程序转变为能够在Dryad上运行的程序,它提供一种高级语言接口,使普通程序员可以轻易进行大规模的分布式计算,它结合了微软Dryad和LINQ两种关键技术,被用于在该平台上构建应用。DryadLINQ可以把LINQ程序转化成分布式计算指令,以便运行于PC集群的编译器。这个转化过程可以分解为三个步骤:

  1. C#和LINQ数据对象转化为分布式的文件块。

  2. LINQ查询转化为分布式Dryad任务。

  3. C#方法转化为运行于Dryad任务节点上的代码。

  DryadLINQ的具体功能如下

  1. 声明式编程:计算指令要求使用类似SQL的高级语言进行表示。

  2. 自动并行化:DryadLINQ编译器将顺序的声明式代码,转化为分布在大规模计算机集群中高度并行的查询计划。而对于单台机器中多核的使用,DryadLINQ则依赖PLINQ并行框架。

  3. Visual Studio集成:程序员在使用DryadLINQ时可以利用VS中大量的高级特性,如智能提示、代码重构、集成调试、构建以及原代码管理。

  4. .NET集成:所有的.NET类库,包括Visual Basic,以及各种动态语言都可以自由使用。

  5. 类型安全:对分布式计算进行静态检查。

  6. 自动序列化:数据传输机制会自动处理所有的.NET对象类型。

  7. 任务图的优化?静态:一系列丰富的查询优化规则,可以使查询计划有更好的局部性(locality)及更好的性能。

  8. 动态:对已经处理完的数据集进行统计,以此作为运行时的优化查询计划的依据。

  Dryad VS MapReduce

  Google设计并实现了一套大规模数据处理的编程规范Map/Reduce系统。这样,非分布式专业的程序编写人员也能够为大规模的集群编写应用程序而不用去顾虑集群的可靠性、可扩展性等问题。Map/Reduce通过“Map(映射)”和“Reduce(化简)”这样两个简单的概念来参加运算,用户只需要提供自己的Map函数以及Reduce函数就可以在集群上进行大规模的分布式数据处理。据称,Google的文本索引方法,即搜索引擎的核心部分,已经通过Map Reduce的方法进行了改写,获得了更加清晰的程序架构。

  与传统的分布式程序设计相比,MapReduce封装了并行处理、容错处理、本地化计算、负载均衡等细节,还提供了一个简单而强大的接口。通过这个接口,可以把大尺度的计算自动地并发和分布执行,从而使编程变得非常容易。还可以通过由普通PC构成的巨大集群来达到极高的性能。另外,MapReduce也具有较好的通用性,大量不同的问题都可以简单地通过MapReduce来解决。

  Dryad使用Dryad LINQ来进行编程,解决了传统分布式数据库SQL语句功能受限、类型系统受限问题,与此同时解决了MapReduce模型中的计算模型受限和没有系统级优化问题。通过Dryad LINQ,开发人员可以将对象封装、自动并行化、自动序列化合任务图的优化,结合Visual Studio 2010得到了比BigTable +MapReduce更快的联合查询的效率,在开发使用上也更易被.Net平台下的开发人员接受。

  Dryad的应用及前景

  Dryad也通过分布式计算机网络计算海量数据,运行在Microsoft HPC Pack 2008 SP1之上,需要.NET Framework 3.5 SP1。在应用Dryad上,微软内部比较广泛,如微软AdCenter中的数据分析和Trident项目-一个基于Dryad/DryadLINQ及微软其他一些技术的科研工作流平台。

  Trident项目是一个科学工作流控制台,为科学家们提供了一个灵活而强大的方式,可以对大规模的,变化纷繁的数据集进行分析。它提供了可视化工具来创建、管理和分享工作流,并且可以在Windows HPC Server 2008集群上执行这些工作流。Trident基于Dryad/DryadLINQ和WF开发,并提供了WPF和Siverlight两种版本的可视化界面。开发人员还可以扩展Trident,并与Word,SQL Server,Data Service等多种技术进行集成,使Trident的适用范围更为广泛。

  云计算的时代即将到来,对于开发者最大的影响就是,如果还像以前一样只和一台计算机和有限的存储打交道已远远不够,以前开发的软件或许只在单机上运行就可以了。但云时代的工程师应该更多的掌握分布式计算的基本原理和开发方法,有能力掌握用于分布式计算的协议或语言,开发出可以运行在几百台、几千台甚至几万台计算机上的应用程序,并用该程序管理分布在不同数据中心的海量存储设备。

  总结:

  微软推出Dryad的目的也是让开发者们能够在Windows或者.Net平台上编写大规模的并行应用程序,同时与Google在分布式并行计算领域展开竞争,也可以理解为微软、Google云计算战争下的一个局部战场。不管Dryad对MapReduce的挑战结果如何,对广大的.Net平台下的开发者来说总算是有了Windows平台下的分布式并行计算平台,从无到有、从有到完善是任何事物发展的必经阶段。就目前来说,Dryad平台的出现是微软云计算领域一个重大的技术提升,为微软提供更好的云打下一个坚实的技术基础。

0
相关文章