分布式与云计算系统第6章2.

上传人:最**** 文档编号:117931910 上传时间:2019-12-11 格式:PPT 页数:66 大小:2.82MB
返回 下载 相关 举报
分布式与云计算系统第6章2._第1页
第1页 / 共66页
分布式与云计算系统第6章2._第2页
第2页 / 共66页
分布式与云计算系统第6章2._第3页
第3页 / 共66页
分布式与云计算系统第6章2._第4页
第4页 / 共66页
分布式与云计算系统第6章2._第5页
第5页 / 共66页
点击查看更多>>
资源描述

《分布式与云计算系统第6章2.》由会员分享,可在线阅读,更多相关《分布式与云计算系统第6章2.(66页珍藏版)》请在金锄头文库上搜索。

1、1 微软的Dryad和DryadLINQ Dryad: Dryad比MapReduce更具灵活性,因为Dryad应 用程序的数据流并非被动或事先决定,并且用户 可以很容易地定义。为了达到这样的灵活性,一 个Dryad程序或者作业由一个有向无环图(DAG)定 义,其顶点是计算引擎,边是顶点之间的通信信 道。所以,用户或者应用开发者在作业中能方便 地指定任意DAG来指定数据流。 对于给定的DAG,Dryad分配计算顶点给底层 的计算引擎(集群节点),并控制边(集群结点 之间的通信)的数据流。数据分块、调度、映射 、同步、通信和容错是主要的实现细节,这些被 Dryad隐藏以助于其编程环境。 2 图6

2、-13 Dryad体系结构及其作业结构、控制和数据流 3 在Dryad中,分布式作业是一个有向无环图,每个顶 点就是一个程序,边表示数据信道。所以,整个作业将首 先由应用程序员构建,并定义了处理规程以及数据流。这 个逻辑计算图将由Dryad运行时自动映射到物理节点。一 个Dryad作业由作业管理器控制,作业管理器负责把程序 部署到集群中的多个节点上。它可以在计算集群上运行, 也可以作为用户工作站上的一个可访问集群的进程。作业 管理器有构建DAG和库的代码,来调度在可用资源上运行 的工作。数据传输是通过信道完成,并没有涉及作业管理 器。所以作业管理器应该不会成为性能的瓶颈。总而言之 ,作业管理器

3、: 1使用由用户提供的专用程序来构建作业通信图(数据 流图)。 2从名字服务器上收集把数据流图映射到底层资源(计 算引擎)所需的信息。 4 集群有一个名字服务器,用来枚举集群上所有 可用的计算资源。所以,作业管理器就能和名字服 务器联系,以得到整个集群的拓扑并制订调度决策 。有一个处理后台程序运行在集群的每一个计算节 点上。该程序的二进制文件将直接由作业管理器发 送至相应的处理节点。后台程序会被视为代理人, 以便作业管理器能和远程顶点进行通信,并能监视 计算的状态。通过收集这些信息,名字服务器能够 提供给作业管理器底层资源和网络拓扑的完美视图 。所以作业管理器能够: 1把数据流图映射到底层资源

4、。 2在各自的资源上调度所有必要的通信和同步。 5 当映射数据流图到底层资源时,它也考虑数据 和计算的位置。当数据流图映射到一系列计算引擎 上时,一个小的后台程序在每个集群节点上运行, 以运行分配的任务。每个任务是由用户用一个专用 程序定义的。在运行时内,作业管理器和每个后台 程序通信,以监视节点的计算状态及其之前和以后 节点的通信。在运行时,信道被用来传输代表处理 程序的顶点之间的结构化条目。 Dryad作业的执行可以看做是二维分布式管道 集。传统的UNIX管道是一维管道,管道里的每个节 点作为一个单独的程序。Dryad的二维分布式管道 系统在每个顶点上都有多个处理程序。通过这个方 法,可以

5、同时处理大规模数据。 6 在二维管道执行的时候,Dryad定义了关于动 态地构造和更改DAG的很多操作。这些操作包括创 建新的顶点、增加图的边、合并两个图,以及处理 作业的输入和输出。Dryad也拥有内置的容错机制 。一般会有两种故障:顶点故障和信道故障。它们 的处理方式是不一样的。 因为一个集群里有很多个节点,作业管理器可 以选择另一个节点来重新执行分配到故障节点上相 应的作业。如果是边出现了故障,会重新执行建立 信道的顶点,新的信道会重新建立并和相应的节点 再次建立连接。除了用来提高执行性能的运行时图 精炼外,Dryad还提供一些其他的机制。作为一个 通用框架,Dryad能用在很多场合,包

6、括脚本语言 的支持、映射-化简编程和SQL服务集成。 7 微软的DryadLINQ DryadLINQ建立在微软的Dryad执行框架之上。 Dryad能执行非周期性任务调度,并能在大规模服 务器上运行。DryadLINQ的目标是能够让普通的程 序员使用大型分布式集群计算。事实上,正如其名 ,DryadLINQ连接了两个重要的组件:Dryad分布式 执行引擎和NET语言综合查询(Language Integrated Query,LINQ)。使用DryadLINQ时执行 过程分为如下9个步骤: 1.一个.NET用户应用运行和创建一个DryadLINQ表 示对象。由于LINQ的延迟评估,表达式的真

7、正执行 还没有开始。 2.应用调用ToDryadTable触发了一个数据并行的执 行。这个表达对象传给了DryadLINQ。 8 图6-14 DryadLINQ上的LING表达式运行 9 3.DryadLINQ编译LINQ表达式到一个分布式Dryad执行计划。 表达式分解成子表达式,每个都在单独的Dryad顶点运行。 然后生成远端Dryad顶点的代码和静态数据,接下来是所需 要数据类型的序列化代码。 4.DryadLINQ调用一个自定义Dryad作业管理器,用来管理和 监视相应任务的执行流。 5.作业管理器使用步骤3建立的计划创建作业图。当资源可 用的时候,它来调度和产生顶点。 6.每个Dry

8、ad顶点执行一个与顶点相关的程序。 7.当Dryad作业成功完成,它就将数据写入输出表格。 8.作业管理器处理结束,它把控制返回给DryadLINQ。 DryadLINQ创建一个封装有执行输出的本地DryadTable对象 。这里的DryadTable对象可能是下一个阶段的输入。 9.控制返回给用户应用。DryadTable上的迭代接口允许用户 读取其内容作为.NET对象。 10 例6.4 单词计数问题直方图的执行举例 11 例6.5一个MapReduce WebVisCounter程序的Hadoop实现 图6-15 WebVisCounter程序运行的数据流 12 Sawzall和Pig L

9、atin高级语言 Sawzall是建立在谷歌的MapReduce框架之上的一 种高级语言。Sawzall是一种脚本语言,能进行并行 数据处理。和MapReduce一样,Sawzall能对大规模数 据集,甚至对整个互联网上收集的数据规模进行分布 式、容错处理。Sawzall最初的目标是处理谷歌日志 文件。 首先,数据用现场处理脚本在本地被分块和处理 。本地数据会被过滤,以得到必需的信息。然后,使 用整合器根据已发送的数据来获取最后的结果。用户 使用Sawzall脚本语言编写其应用。Sawzall运行时引 擎将相应的脚本翻译为能够运行在很多节点上的 MapReduce程序。Sawzall程序能够自

10、动利用集群计算 的威力,也能够从冗余服务器上获取可靠性。 13 图6-16 Sawzall的过滤、整合和校对的整个流 14 Pig Latin是雅虎开发的一种高级数据流语言 . Pig Latin、 Sawzall和DryadLINQ是在MapReduce及其扩展之上构建语言的 三种不同方法。 15 16 17 18 19 6.3 GAE的编程支持 GAE编程 图6-17总结了对于两种支持语言Java和Python ,GAE编程环境的一些主要特性。客户端环境包括 一个Java 的Eclipse插件,允许你在本地机器上调 试自己的GAE。对于Java Web应用程序开发者来说 ,还有一个GWT(

11、谷歌Web工具集)可用。开发者可 以使用它,或其他任何借助于基于JVM的解释器或 编译器的语言,如JavaScript或Ruby。Python会经 常和Django或者CherryPy之类的框架一起使用,但 是谷歌也提供一个内置的webapp Python环境。 20 图6-17 GAE编程环境 21 数据存储是一个NOSQL数据管理系统,实体的 大小至多是1MB,由一组无模式的属性来标记。查 询能够检索一个给定类型的实体,这是根据属性值 来过滤和排序的。Java提供一个Java数据对象和 JPA 接口,是由开源Data Nucleus Access平台来 实现,而Python有一个类似SQL

12、的查询语言称为GQL 。 如果其他进程试图同时更新同一个实体,那么 这个实体的更新是发生在一个事务处理中,并且重 试固定的次数。数据存储使用“实体群组”实现了贯 穿其分布式网络的事务。事务在单个群组中操作实 体。这些同一群组的实体被存储在一起。当实体创 建的时候,GAE应用可以把实体分配给群组。 22 谷歌安全数据连接能够和互联网建立隧道连 通,并能将内联网和一个外部GAE应用相连。URL Fetch操作保障了应用程序能够使用HTTP和HTTPS 请求获取资源,并与互联网上的其他主机进行通 信。有一个专门的邮件机制,从你的GAE应用程序 中发送电子邮件。 应用程序能够使用GAE URL获取服务

13、访问互联 网上的资源,比如Web服务或者其他数据。URL获 取服务使用相同的高速谷歌基础设施来检索Web资 源,这些谷歌基础设施是为谷歌的很多其他产品 来检索网页的。还有许多谷歌“企业”设施,包括地 图、网站、群组、日程、文档和YouTube等。这些 支持谷歌数据API,它能在GAE内部使用。 23 一个应用程序可以使用谷歌账户来进行用户 认证。谷歌账户处理用户账户的创建和登录,如 果一个用户已经有了谷歌账户(如一个Gmail账户 ),他就能用这个账户来使用应用程序。GAE使用 一个专用的Images服务来处理图片数据,能够调 整大小、旋转、翻转、裁剪和增强图片。一个应 用程序能够不响应Web

14、服务来执行任务。 另外,应用程序能执行由应用程序本身加入 到一个队列中的任务,比如处理请求时创建的一 个后台任务。配置一个GAE应用消耗的资源有一定 上限或者固定限额。 24 谷歌文件系统(GFS) GFS主要是为谷歌搜索引擎的基础存储服务建 立的。因为网络上抓取和保存的数据规模非常大 ,谷歌需要一个分布式文件系统,在廉价、不可 靠的计算机上存储大量的冗余数据。没有一个传 统的分布式文件系统能够提供这样的功能,并存 储如此大规模的数据。另外,GFS是为谷歌应用程 序设计的,并且谷歌应用程序是为谷歌而建立。 在传统的文件系统设计中,这种观念不会有吸引 力,因为在应用程序和文件系统之间应该有一个

15、清晰的接口,比如POSIX接口。 25 谷歌关于GFS的设计做出了一些特殊决策。如 前所述,选择64MB块大小。使用复制来达到可靠性 。单个主服务器可以协调访问以及保管元数据。这 个决策简化了整个集群的设计和管理。开发者不需 要考虑许多分布式系统中的难题。 GFS中没有数据高速缓存,因为大规模流读取 和写入既不代表时间也不代表空间的近邻性。GFS 提供了相似但不相同的POSIX文件系统访问接口。 其中明显的区别是应用程序甚至能够看到文件块的 物理位置。这样的模式可以提高上层应用程序。自 定义API能够简化问题,并聚焦在谷歌应用上。自 定义API加入了快照和记录附加操作,以利于建立 谷歌应用程序

16、。 26 图6-18 GFS体系结构 27 图6-19 GFS中的数据变异序列 28 GFS中的数据变异采用如下的步骤: 1客户端询问主机哪个块服务器掌握了当前发行版 本的块和其他副本的位置。如果没有发行版本,那 么主机授权给一个它挑选的副本(没有显示)。 2主机回复了主版本的身份和其他(第二级)副本 的位置。客户端缓存这个数据以备将来的变异。只 有当主版本变的不可达或回复它不再拥有一个发行 版时,它才需要重新和主机联系。 3客户端将数据推送给所有副本。客户端可以按任 意顺序推送数据。每个块服务器将数据存储在一个 内部LRU缓存区,直到数据被使用了或失效了。通过 将数据流和控制流解耦合,对基于网络拓扑的高代 价数据流进行调度,我们就可以提高性能,而不用 考虑哪个块服务器是主要的。 29 4.一旦所有副本都确认接收数据,客户端就将写请求 送至主要版本。该请求

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号