专业选修课程,以下内容主要围绕老师的重点复习。
云计算具备以下几种特征,包括资源共享、弹性调度、服务可扩展与按需分配。 (1)资源共享 云计算业务向云用户提供了对计算、存储、网络、软件等多种IT基础设施资 源租用的服务,而用户不需要自己拥有和维护这些基础设施资源。
(2 )弹性调度 云用户能够按需获得和调用FT基础设施资源,也能够按需撤销和缩减资源。 云计算平台 可以按云用户的需求快速部署和调度资源。
(3)服务可扩展 云计算可以根据用户的规模、使用量、需求增加云中相应的资源,使得资源 的规模可以 根据需要扩大,满足应用和用户规模变化的需要。
(4)按需分配 用户按需使用云中的资源,按实际的使用量付费。云计算能够兼容不同硬件 厂商的产品, 从而保护云业务提供商的原有投资。另外,由于云的特殊容错措施, 可采用大量廉价设备来构建云,降低成本。
超大规模
虚 拟 化
高可靠性
通 用 性
高可伸缩性
极其廉价
首先我们需要知道什么是云交付模型,云交付模型(cloud delivery model)是云提供者提供的具体的、事先打包好的IT资源组合,公认的和被形式化描述了的三种常见云交付模型有:
将软件作为服务 SaaS ( Software as a Service ) 针对性更强,它将某些特定应用软件功能封装成服务如: Salesforce online CRM
将平台作为服务 PaaS ( Platform as a Service ) 对资源的抽象层次更进一步,提供用户应用程序运行环境 如: Google App Engine Microsoft Windows Azure
将基础设施作为服务 IaaS ( Infrastructure as a Service )将硬件设备等基础资源封装成服务供用户使用 如: Amazon EC2/S3
1.公有云
公有云为第三方云厂商所拥有和运营,他们通过 internet 提供其计算资源(如服务器和存储空间)。Tencent Cloud 是公有云的一个示例。在公有云中,所有硬件、软件和其他支持性基础结构均为云提供商所拥有和管理。使用 Web 浏览器访问这些服务和管理你的帐户。
2.私有云
私有云是指专供一个企业或组织使用的云计算资源。私有云可以实际位于公司的现场数据中心之上。某些公司还向第三方服务提供商付费托管其私有云。在私有云中,在专用网络上维护服务和基础结构。
3.混合云
混合云组合了公有云和私有云,通过允许在这二者之间共享数据和应用程序的技术将它们绑定到起。混合云允许数据和应用程序在私有云和公共云%之间移动,使你能够更灵活地处理业务并提供更多部署选项,有助于你优化现有基础结构、安全性和符合性
SOA 构建层:封装云计算能力成标准的 Web Services 服务 ,并纳入到 SOA 体系
管理中间件层:云计算的资源管理,并对众多应用任务进行调度,使资源能够高效、面向对象程序设计安全地为应用提供服务
资源池层:将大量相同类型的资源构成同构或接近同构的资源池
物理资源层:计算机、存储器、网络设施、数据库和软件等
管理中间件层和资源池层是云计算技术的最关键部分, SOA构建层的功能更多依靠外部设施提供。
为什么需要一致性:
·数据不能存在单个节点(主机)上,否则可能出现单点故障。
·多个节点(主机)需要保证具有相同的数据。
一致性算法的定义:
一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的
一致性的分类
·强一致性
说明:保证系统改变提交以后立即改变集群的状态。
模型:
Paxos
Raft(muti-paxos)
ZAB(muti-paxos)
·弱一致性
说明:也叫最终一致性,系统不保证改变提交以后立即改变集群的状态,但是随着时间的推移最终状态是一致的。
模型:
DNS系统
Gossip协议
一致性算法实现举例
Google的Chubby分布式锁服务,采用了Paxos算法
etcd分布式键值数据库,采用了Raft算法
ZooKeeper分布式应用协调服务,Chubby的开源实现,采用ZAB算法
虚拟机迁移的定义:
虚拟机迁移是将虚拟机实例从源宿主机迁移到目标宿主机,并且在目标宿主机上 能够将虚拟机运行状态恢复到其在迁移之前相同的状态,以便能够继续完成应用 程序的任务。
虚拟机迁移的分类:
实时迁移的定义:
实时迁移( LiveMigration ),就是保持虚拟机运行的同时,把它从一个计算机迁移到另一个计算机,并在目的计算机恢复运行的技术。
实时迁移存在的原因:
1、云计算中心的物理服务器负载经常处于动态变化中,当一台物理服务器负载过大时,若此刻不可能提供额外的物理服务器,管理员可以将其上面的虚拟机迁移到其他服务器,达到负载平衡。
2、云计算中心的物理服务器有时候需要定期进行升级维护,当升级维护服务器时,管理员可以将其上面的虚拟机迁移到其他服务器,等升级维护完成之后,再把虚拟机迁移回来
虚拟机迁移的步骤:
1、预迁移2、预定资源3、预复制4、停机复制5、提交6、启动
内存的迁移:
虚拟机迁移方案:
网络资源的迁移:
虚拟机这种系统级别的封装方式意味着迁移时VM的所有网络设备,包括协议状态(如 TCP连接状态)以及IP地址都要随之一起迁移。
在局域网内,可以通过发送ARP重定向包,将VM的 IP 地址与目的机器的 MAC 地址相绑定,之后的所有包就可以发送到目的机器上。
存储设备的迁移:
·迁移存储设备的最大障碍在于需要占用大量时间和网络带宽,通常的解决办法 是以共享的方式共享数据和文件系统,而非真正迁移。 l
·目前大多数集群使用NAS( Network Attached Storage ,网络连接存储)作为存储设备共享数据。 l
·NAS 实际上是一个带有瘦服务器的存储设备,其作用类似于一个专用的文件服 务器。 l
·在局域网环境下,NAS已经完全可以实现异构平台之间,如 NT 、 UNIX 等的 数据级共享。 l
·基于以上的考虑, Xen 并没有实现存储设备的迁移,实时迁移的对象必须共享 文件系统。
1远程镜像技术
2快照技术
3基于IP的SAN的远程数据容灾备份技术
4数据库复制技术
在一个集群中,每台接入交换机与每台汇聚交换机都相连,构成一个完全二分图。 每个汇聚交换机与某一部分核心交换机连接,使得每个集群与任何一个核心层交换机都相连
FatTree 结构有如下特点:
·消除了树形结构上层链路对吞吐量的限制 l
·为内部节点间通信提供多条并行链路 l
·横向扩展的尝试降低了构建数据中心网络的成本 l
·与现有数据中心网络使用的以太网结构和 IP 配置的服务器兼容
但是, FatTree 的扩展性受限于核心交换机端口数量,目前比较常用的是 48 端口 10GG 核心交换机,在 3 层树结构中能够支持 27648 台主机。
软件定义网络定义:
将网络的控制平面与数据转发平面进行分离,网络智能地被抽取到一个集中式的控制器中,数据流的接入、路由等都由控制器来控制,而交换机只是按控制器所设定的规则进行数据分组的转发,最终通过开放可编程的软件模式来实现网络的自动化控制功能
软件运营服务是SAAS(Software as a Service)的中文翻译。是指用户获取软件服务的一种新形式。它不需要用户将软件产品安装在自己的电脑或服务器上。而是按某种服务水平协议(SLA)直接通过网络向专门的提供商获取自己所需要的、带有相应软件功能的服务。
SaaS模式是多重租赁的架构模式,即在物理上很多不同的用户共同分享硬件基础设施,但在逻辑上每个用户独享所属的服务。多用户结构设计最大化了用户间的资源分享,但仍可以安全区分每个用户所拥有的数据。
例如,一个公司 的用户通过SaaS的客户关系管理 (CRM)应用程序访问用户信息,这个用户所使用的应用程序实例能够同时为几十或者上百个不同公司的用户提供服务,而这些用户对于其他用户是完全未知的。
• 典型的SaaS部署通常不需要任何硬件就能在现有的互联网框架下运行, 有时为了使SaaS应用程序运行更加稳定,只需更改防火墙的规则和配置。
• SaaS的应用程序交付模式很典型地运用了以网络作为基础设施的一对多的交付方式。终端用户可以通过网络浏览器接入SaaS应用程序,甚至有些SaaS 提供商提供其接口用以支持他们应用程序的独有特性。
• SaaS模式使得用户可以把应用程序的管理运营外包给第三方(软件提供商或服务提供商),这样可以降低应用程序软件的软件许可、服务器及其他基础设施的开销,其中也包括内部应用程序运维人员的费用。
• SaaS模式使得软件提供商得以控制和限制软件的使用,遏制软件的复制和分发,促进其对软件所有衍生版本的控制。SaaS的集中控制常常可以使得软件提供商或者代理商通过多个业务建立持续的收入,却不需要在用户的每个设备上 都预装软件。
SaaS安全主要包括3个方面,分别是物理部署安全、多用户隔离及业务的授权访问。
在SaaS模式下,用户的数据和资料等都保存在SaaS服务器端,服务器端一旦崩溃或存储数据的服务器遭到黑客攻击,这些数据的安全就会受到威胁。所以, 物理部署的安全是保证SaaS安全的基本需要。 物理部署安全包括管理和技术两方面。管理方面的安全主要是服务器机房的环境安全,包括气体灭火、恒温恒湿、联网电子锁防盗、24专人和录像监控、 网络设备带宽冗余、口令进入机房等。技术方面服务器数据存储需要加密,网络传输需要采用安全的通信协议。服务器和防火墙的负载平衡、数据库集群和网络 储存备份在近几年也成为必 须采用的技术。
对于SaaS服务而言,解决SaaS底层架构的安全问题关键在于,在多用户共享应用的情况下如何解决用户之间的隔离问题。 解决用户之间的隔离问题可以在云架构的不同层次实现,即物理层隔离、平台层隔离和应用层隔离。
(1)物理层隔离
这种方法为每个用户配置单独的物理资源,以实现在物理上的隔离。
(2)平台层隔离
平台层处于物理层和应用层之间,主要是封装物理层提供的服务,使用户能够更加方便地使用底层服务。要在这一层上实现隔离,需要平台层能够响应不同用户 的不同需求,把属于不同用户的数据按照映射的方式反馈给不同的用户,这样就能 够达到隔离的目的。
(3)应用层隔离
应用层隔离主要包括应用隔离沙箱和共享应用实例方式。
前者采用沙箱隔离应用, 每个沙箱形成一个应用池,池中应用与其他池中的应用相互隔离,每个池都有一系列后台进程来处理应用请求。这种方式能够通过设定池中进程数目达到控制系统最大资源利用率的目的。
后者要求应用本身需要支持多用户,用户之间是隔离的,但是成千上万的用户可能使用同一个应用实例,用户可以用配置的方式对应用进行定制。这种方式 具有较高的资源利用率和配置灵活性。
云计算环境下的业务提供方式可以采用用户通过业务提供商颁发的凭证直接访问云计算服务提供商的方式使用户获取业务资源,而且这种方式还保护了业务提供商的用户信息。
根据用户获取凭证内容的不同,用户有两种获取资源的方法。
1)用户从业务提供商获取的访问凭证包括业务资源信息、业务逻辑信息和访问控 制信息等。用户可以通过此凭证直接访问云服务提供商,云服务提供商根据 此凭证直接 向用户提供业务资源。
2)用户从业务提供商获取的访问凭证包括业务资源信息,但不包括业务逻辑 信息和访问控制信息。当用户通过此凭证直接访问云计算服务提供商时,云计算 服务提供商 需耍首先根据此凭证向业务提供商获取业务逻辑信息和访问控制信 息,然后根据业务逻辑信息和访问控制信息向用户提供业务资源。
具体步骤如下
• 用户向业务提供商申请资源信息,业务资源信息可为各类业务资源的ID 等。 • 业务提供商根据用户申请,向用户提供相关资源信息。
• 用户向云计算服务提供商发送业务资源信息,请求访问业务资源。
• 云计算服务提供商确认用户请求中是否携带该资源的访问控制凭证。在没有凭证时,云计算服务提供商根据请求中携带的资源信息获取相应的业务提供商信息,并向该业务提供商发送资源访问控制请求,其中资源访问控制请求中携带用户的标识信息和业务资源信息。
• 业务提供商根据用户的标识信息对用户进行身份认证和访问控制,颁发该业务资源的访问控制信息给云计算服务提供商;资源访问控制信息包括业务资源授权信息。
• 云计算服务提供商对接收的资源访问控制信息进行认证,并向认证通过 的用户提供 相应的业务资源。 针对上述两类不同的方法,第一类方法的用户从业务提供商获取的凭证中包 括权限信息, 从而减少了云计算服务提供商获取权限的过程,因此访问业务的效 率相对较高。而第二类方 法的用户可以更灵活地使用业务,用户可以利用授权凭 证随时随地使用业务。因为用户获取 的凭证信息相对简单,存放、传输等要求低, 并且云计算服务提供商向业务提供商获取用户的 权限信息,减少了权限信息的传 输环节,降低了权限信息被窃取的风险。
IaaS(Infrastructure as a Service),即基础设施即服务。指把IT基础设施作为一种服务通过网络对外提供,并根据用户对资源的实际使用量或占用量进行计费的一种服务模式。
在这种服务模型中,普通用户不用自己构建一个数据中心等硬件设施,而是通过租用的方式,利用 Internet从IaaS服务提供商获得计算机基础设施服务,包括服务器、存储和网络等服务。
(1)租赁
IaaS当你使用IaaS服务,购买服务器和存储资源时,你可以获得你需要的资源即时访问。然而,你不是租赁实际的服务器或其他基础设施。它不像租来一辆卡车开到你的办公室交付服务。该物理组件仍放在基础设施服务提供商的数据中心。 在一个私有的IaaS内,租赁呈现出不同的重点。虽然你可能不会对每个访问资源的用户收费,在该收费模式中,你可以根据各个部门的使用情况,按一星期、一个月或者一年分配使用费用。由于IaaS模型的灵活性,较多资源的使用者应该比较少资源的使用者支付更多的费用。
(2)自助服务
自助服务是IaaS的一个关键特性,能让用户通过一个自助服务门户获得资源,如服务器和网络,而无需依赖IT为他们提供这些资源。该门户类似于一台银行自动取款机(ATM)模型,通过一个自助服务界面,可以轻松处理多个重复性任务。
(3)动态缩放
当资源能按照工作负载或任务需求自动伸展或收缩时,这就称为动态缩放。如果用户需求比预期的资源要多,就可以立即获得它们。这种IaaS的提供商或创建者通常优化了环境,这样的硬件、操作系统和自动化可以支持一个巨量的工作负载。 [2]
(4)服务等级
许多消费者获得了按需模型的能力,而无需签署合同。在其他解决方案中,消费者要为特定的存储量和/或计算量签订一份合同。一个典型的IaaS合同有某个等级的服务保障。在低端市场中,供应商可能会声明:该公司会尽最大努力提供良好的服务。根据不同的服务和价格,可以承包99.999%的可用性。你需要的服务等级取决于你正在运行的工作负载。 [2](
5)许可
使用公共的IaaS运行你希望的软件,已导致在许可(不是你和你云提供商之间的许可)和支付模式上的创新。例如,一些IaaS和软件供应商已经创造了带上你的许可(BYOL)计划,这样,你就用一种方法,即可在传统环境中也可在云环境中,使用你的软件了。另一种选择是即用即付(PAYG)模式,它一般集成了软件许可和按需基础设施服务。
计量确保用户能按照他们需要的资源和使用收费。这种计量按照对IaaS服务的评估收费,从实例的启动开始,到实例的终止结束。除了每个实例的基本费用,IaaS提供商还可以对存储、数据传输以及可选的服务(如增强安全性、技术支持或先进监视等)收费。
以开源软件为例来说,现有开源软件支持的IaaS体系结构大体上可分为两种。 一种是以Open- Nebula、 Nimbus和ECP等软件为代表的两层体系结构。两层体系结构分为控制层和工作节点层,其中控制层由云控制器和存储系统构成,工作节点层由一系列的工作节点构成。
另一种是以Eucalytus和XEN Cloud等软件为代表的三层体系结构,三层体系结构与两层体系结构的主要区别是增加了一个集群控制节点中间层,该层的作用主要有3个方面:
(1)控制相应集群中的网络管理情况,一般会在集群节点上建立起该集群的DHCP和DNS服务器;
(2)监控该集群的DHCP和DNS服务器,群中节点的资源使用情况并将监控到的结果向上层的云控制器汇报,云控制器对底层的工作节点的调用要以集群控制节点监控到的信息为参考;
(3)充当路由器的功能,当两个集群间的工作节点通信时,它们通过双方的集群控制节点进行通信。
从功能角度来看,相对于两层体系结构而言,三层体系结构具有更好的扩展性。在两层体系结构中,云控制器直接管理工作节点,这种直接管理方式使得云控制器对VM的部署速度更快。在三层体系结构中,由集群控制节点与工作节点直接通信,工作节点通过集群控制节点与云控制器进行通信,云控制器通过中间层集群控制节点来负责对工作节点的调度,这样缓解了云控制器的开销,增强了整个平台的扩展性。
在云计算IaaS中,存在着两个方面的安全问题:同用户的数据安全和不同用户之间的数据安全。
同用户的数据安全,一般而言是指用户自己对于数据的用途不同。一部分数据,如企业公开财务信息、公司最新新闻、公司股票信息、公司业绩等等,是可以向社会大众公开的公共资源。而另一些,如企业的技术信息、资金变动等等内部重要信息,关乎到企业的生死存亡,是不能对外公布的核心数据。云计算IaaS需要对两种数据进行分别处理,并且进行全方位的保护,保证数据的安全和隔离,防止后者数据进入前者的数据中。
不同用户之间的数据是不同的,甚至有些用户数据是不能外泄的。一旦发生用户之间的数据相互覆盖、复制,不仅对用户造成困扰,也会让用户产生不信任感。这就需要对不同客户间的数据进行隔离,保证各个客户的数据间的准确和安全,防止“串门”事件的发生。另外,做好安全审计也是商用系统信息安全的重要部分,对各类操作建立日志,并且分析审计,对虚拟机、数据库、管理信息等等进行安全审计,保证系统的安全。在此基础上,还需要保证客户数据的完整、更新及时,建立防火墙、数据加密、权限设置、数据备份等等对数据进行全方位的安全保障,并且结合法律方面的东西,在规章制度上对数据安全进行有效保护。
VPN指的是在公用网络上建立专用网络的技术。整个VPN网络的任意两个节点之间的连接并没有传统专网所需的端到端的物理链路,而是架构在公用网络服务商所提供的网络平台,如Internet、ATM (异步传输模式)、frame relay (帧中继)等之上的逻辑网络,用户数据在逻辑链路中传输。
VPN具备以下特性。
• 成本低。投资小,只需购买相关的VPN设备,并向本地ISP购买一定带宽的接入服务。
• 高可用性。通过购买ISP的宽带接入服务,部分维护责任迁移至ISP。如果公网 中的一个VPN节点不可用,可以使用公网的另外一个节点代替。
• 高安全性。通过加密技术使数据分组在公网上安全地传输,实现端到端的安全性。
• 高可扩展性。可从公网动态申请网络资源,进行VPN的动态扩展和维护, 有利于保护投资,降低网络投资成本。 由于VPN在不安全的Internet中实现通信机制,需支持采用安全机制实现 VPN的安 全通信,如隧道技术、加解密认证技术、密钥交换技术等。
HDFS 架构
HDFS 采用 master/slave 体系来构建分布式存储服务 -->提高了HDFS 的可扩展性又简化了架构设计 l
HDFS里将文件分块存储-->优化存储颗粒度
namenode统一管理所有 slave 机器 datanode 存储空间
datanode 以块为单位存储实际的数据 l
真正的文件 I/O 操作时客户端直接和 datanode 交互
1负责维护文件系统的命名空间( Namespace ) l
2协调客户端对文件的访问 l
3记录命名空间内的任何改动或命名空间本身的属性改动
1执行文件系统的命名空间操作 l
2决定数据块到 DataNode 的映射
1负责它们所在的物理节点上的存储管理 l
2 HDFS开放文件系统的命名空间以便让用户以文件的形式存储数据。
首先,客户端从NameNode获得组成文件的数据块的位置列表
其次,客户端直接从DataNode上读取文件数据
事务日志(EditLog)记录HDFS元数据的变化
映象文件(FsImage)存储文件系统的命名空间
事务日志和映象文件都存储在NameNode的本地文件系统中。
将新的元数据刷新到本地磁盘的新的映象文件中,这样可以截去旧的事务日志,这个过程称为检查点(Checkpoint)
辅助NameNode处理映象文件和事务日志。
l
NameNode更新映象文件并清理事务日志,使得事务日志的大小始终控制在可配置的限度下
只有单个 NameNode 节点, 使用 SecondaryNameNode或BackupNode 节点实时获取NameNode元数据信息,备份元数据
有两个NameNode节点,并使用ZooKeeper实现NameNode节点间的热切换。
ZooKeeper集群:至少三个 ZooKeeper 实体,用来选举 ActiveNamenode 。
JourNalNode :至少三个,用于与两NameNode交换数据,也可使用 NFS 。
集群 HTTPFS:提供 Web 端读写HDFS功能。
从架构上看HDFS存在单点故障,无论是一般拓扑还是商用拓扑,新增的实体几 乎都是增强NameNode可靠性的组件,当然这里的ZooKeeper集群还可以用于 Hbase
HDFS将每个文件存储成一系列数据块(Block),默认块大小为 64MB (可配置)。 为了容错,文件的所有数据块都会有副本(副本数量即复制因子,可配置)。 HDFS 的文件都是一次性写入的,并且严格限制为任何时候都只有一个写用户
HDFS集群一般运行在多个机架上,不同机架上机器的通信需要通过交换机。HDFS 采用机架感知( Rack-aware )的策略来改进数据的可靠性、可用性和网络带宽的利用率。 l
机架的错误远比节点的错误少,这个策略可以防止整个机架失效时数据丢失, 提高数据的可靠性和可用性,又能保证性能。
HDFS 会尽量使用离程序最近的副本来满足用户请求,这样可以减少总带宽消耗和读延时。 l
HDFS 的架构支持数据均衡策略
NameNode周期性地从集群中的每个DataNode接受心跳包和块报告,收到心跳包说明该 DataNode 工作正常 l
NameNode会标记最近没有心跳的DataNode为宕机,不会发给它们任何新的 I/O 请求。 l
NameNode 会不断检测这些需要复制的数据块,并在需要的时候重新复制。
多种原因可能造成从DataNode获取的数据块有损坏。 l
HDFS客户端软件实现了对 HDFS 文件内容的校验和检查( Checksum )。 l DataNode获得的数据块对应的校验和隐藏文件中的不同,客户端就会判定数据块有损坏,将从其他DataNode获取该数据块的副本。
映象文件和事务日志是 HDFS 的核心数据结构。 l
NameNode可以配置为支持维护映象文件和事务日志的多个副本。任何对映象文件或事务日志的修改,都将同步到它们的副本上。
当NameNode重新启动时,总是选择最新的一致的映象文件和事务日志。
HDFS的应用程序一般对文件实行一次写、多次读的访问模式。 l
文件一旦创建、写入和关闭之后就不需要再更改了。 l
这样就简化了数据一致性问题,高吞吐量的数据访问才成为可能;运行在 HDFS 上的应用主要以流式读为主,做批量处理;更注重数据访问的高吞吐量
客户端创建文件的请求不是立即到达NameNode ,HDFS客户端先把数据缓存到本地的一个临时文件,程序的写操作透明地重定向到这个临时文件。 l
当这个临时文件累积的数据超过一个块的大小( 64MB )时,客户端才会联系 NameNode。 l
如果NameNode在文件关闭之前死机,那么文件将会丢失。 l
如果不采用客户端缓存,网络速度和拥塞都会对输出产生很大的影响。
当客户端准备写数据到 HDFS 的文件中时,数据一开始会写入本地临时文件。 l DataNode从前一个节点接收数据的同时,即时把数据传给后面的节点,这就是流水线复制。
硬件错误是常态而不是异常。 l
HDFS 被设计为运行在普通硬件上,所以硬件故障是很正常的。 l
错误检测并快速自动恢复是 HDFS 的最核心设计目标。
一般企业级的文件大小可能都在TB级甚至 PB 级, HDFS支持大文件存储, 而且提供整体上高的数据传输带宽。 l
一个单一的 HDFS 实例应该能支撑数以千万计的文件,并且能在一个集群里扩 展到数百个节点。
1、NameNode高可靠性
2、HDFS 快照
3、元数据管理与恢复工具
4、HDFS 安全性
5、HDFS 配额功能
6、HDFS C语言接口
7、HDFS Short-Circuit 功能
8、WebHdfs
管理计算机资源、提供用户接口
Yarn:一方面管理整个集群的计算资源(CPU、内存等);另一方面提供用户程序访问系统资源的API。
Yarn的主要思想是将MRv1版JobTracker的两大功能——资源管理和任务调度,拆分成两个独立的进程:
资源管理模块-->全局资源管理进程ResourceManager
任务管理模块-->任务管理进程ApplicationMaster
Yarn依旧是master/slave结构
主进程ResourceManager是整个集群资源仲裁中心
从进程NodeManager管理本机资源
ResourceManager和从属节点的进程NodeManager组成了Hadoop 2.0的分布式数据计算框架
①Client:客户端,负责向集群提交作业。
② ResourceManager :集群主进程,仲裁中心,负责集群资源管理和任务调度。 ③Scheduler :资源仲裁模块。
④ApplicationManager:选定,启动和监管ApplicationMaster。
⑤NodeManager:集群从进程,管理监视 Containers ,执行具体任务。
⑥ Container :本机资源集合体,如某 Container 为 4 个 CPU , 8GB 内存。 ⑦ApplicationMaster:任务执行和监管中心。
作业提交->任务分配->任务执行->进度和状态更新->任务完成or任务失败
ApplicationMaster失败:ApplicationManager 会重新选择一个 Container 再次执行此任务对应的 ApplicationMaster
计算节点失败:ApplicationMaster 首先向 Scheduler 申请资源,接着根据申请到的资源重新分配失败节点上的任务
从 Yarn 架构和 Yarn 任务执行过程能看出 Yarn 具有巨大优势:
1、Scheduler-->纯粹的资源仲裁中心
2、ApplicationManager-->只监管 ApplicationMaster
3、ApplicationMaster-->负责任务整体执行
4、Yarn的设计大大减轻ResourceManager 的资源消耗,并且ApplicationMaster 可分布于集群中任意一台机器,设计上更加优美。
除了ResourceManager和NodeManager两个实体外,Yarn还包括WebAppProxyServer 和 JobHistoryServer 两个实体。
JobHistoryServer管理已完成的Yarn任务
·MRv1中:历史任务的日志和执行时的各种统计信息统一由 JobTracker 管理
·Yarn 将管理历史任务的功能抽象成一独立实体 JobHistoryServer
WebAppProxyServer任务执行时的Web页面代理
·通过使用代理,不仅进一步降低了ResourceManager的压力,还能降低Yarn受到的Web攻击
·负责监管具体MapReduce任务执行全过程,将从Container那里收集过的任务执行信息汇总并显示到一个Web界面上
一个MapReduce操作分为两个阶段:映射阶段和化简阶段。
映射阶段:MapReduce框架将用户输入的数据分割为M个片断,对应M个Map任务。
化简阶段:每一个Reduce操作的输入是一个
CapacityScheduler是一种多用户多任务调度策略,它以队列为单位划分任务,以Container为单位分配资源,它也是Hadoop2.0默认的调度策略,为多个用户共享集群资源提供安全可靠的保障。
通过共建集群的方式,不但可以提高资源利用率,还能在必要时刻使用更多的集群资源,同时,组织机构间共建集群也大大降低了运维成本。
容量调度策略通过队列来划分资源,队列间关系类似于一棵多叉树,队列间一层层继承,根队列称为root队列,Yarn初次启动时默认启动队列为root.default 队列。
容量调度算法例题:
1、某三个组织机构 companyA, companyB 和 institutionC 欲共同组建一个 Hadoop 集群 DataCenterABC 。高峰时 companyA 需要使用 60 台服务 器, companyB 使用 30 台,而 institutionC 使用 10 台,如何配置多级队列来满足各个组织需求?
多级队列对应的配置文件 capacity-scheduler.xml 中设置如下:
2、若companyA下有算法部和研发部,算法部A_algorithm须使用90%资源,研发A_RD使用10%资源时,又如何分配?
解:在多级队列对应的配置文件 capacity-scheduler.xml 中设置如下:
在上述条件下,若 A_algorithm 部门只允许joe 和hue用户,并且每个用户至少配置本部门30%的资源,又如何配置多级队列?
在多级队列对应的配置文件 capacity-scheduler.xml 中设置如下:
容量调度策略的特性
多级队列
容量调度策略以队列来划分集群资源,不同机构可以在集群 里新建不同队列
容量确定性
规定某队列占用集群资源的上下限,能够确保即使其他队列 用到其最高峰时,也能预留充足资源留给此队列
安全性
每个队列都有相应的访问控制列表 ACL 文件
弹性
通过设置队列额外资源使用量,能够让此队列使用超出规定 的资源量
多用户
通过设置不同队列拥有资源的比例,避免某用户或某进程独 占集群资源,实现多用户多任务调度
易操作性
主要包括实时配置和实时更改队列状态
容量调度策略管理接口
·Web接口:
yarn-site.xml指定使用容量调度策略。
capacity-scheduler.xml配置全局多级队列和队列的ACL文件。mapred-site.xml配置客户端提交MapReduce任务时使用的队列 。Hadoop-policy.xml配置全局ACL文件。
·Shell命令接口
$HADOOP_YARN_HOME/bin/yarn rmadmin – refreshQueues,管理员可以通过此命令在不停止集群的情况下 ,使多级队列的配置立即生效
FairScheduler是一种允许多个Yarn任务公平使用集群资源的可插拔式调度策略
集群资源
·满足时FairScheduler会将资源分配给集群中所有的任务
·受限时 FairScheduler 则会将正在执行任务释放的部分资源分配给等待队列里的任务
从宏观上看,集群资源公平地为每一个任务所拥有,它不仅可以让短作业在合理 的时间内完成,也避免了长作业长期得不到执行的尴尬局面
公平调度策略的特征
接口
yarn-site.xml 设定属性 yarn.resourcemanager.scheduler.classYarn 启动公 平调度策略,设置属性 yarn.scheduler.fair.allocation.file 来指 定多级队列文件位置。
fair-scheduler.xml 配置多级队列的文件,此文件名与位置是通过 Yarn 配置文件 yarn-site.xml 里 yarn.scheduler.fair.allocation.file 属性指定
Hbase 是基于Hadoop的开源分布式数据库,它以Google的BigTable为原型,设计并实现了具有高可靠性、高性能、列存储、可伸缩、实时读写的分布式数据库系统。
HBase适合于存储非结构化数据
Hbase是基于列的而不是基于行的模式
Hbase在Hadoop之上提供了类似于BigTable的能力
•表中仅有一行数据,行的唯一标识为com.cnn.www,对这行数据的每一次逻辑修改都有一个时间戳关联对应。
•表中共有四列:contents:html,anchor:cnnsi.com,anchor:my.look.ca,mime:type,每一列以前缀的方式给出其所属的列族
行键是数据行在表中的唯一标识,并作为检索记录的主键。
在Hbase中访问表中的行有三种方式:
1通过单个行健访问
2给定行健的范围访问
3全表扫描
Hbase提供了两个版本的回收方式:
1、对每个数据单元,只存储指定个数的最新版本
2、保存最近一段时间内的版本(如七天),客户端可以按需查询
元素由行健、列(<列族>:<限定符>)和时间戳唯一确定,元素中的数据以字节码的形式存储,没有类型之分。
物理模型:
表中的空值是不被存储的
如果没有指名时间戳,则返回指定列的最新数据值
可以随时向表中的任何一个列添加新列,而不需要事先声明
主节点运行的服务称为HMaster
从节点服务称为HRegionServer
底层采用HDFS存储数据
1)Client
Client端使用Hbase的RPC机制与HMaster和HRegionServer进行通信
2)ZooKeeper
存储了ROOT表的地址、HMaster的地址和HRegionServer地址
3)HMaster
Hbase主节点,将Region分配给HRegionServer,协调HRegionServer的负载并维护集群状态
4)HRegionServer
HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据
1、部署前提
2、Hbase部署规划
3、部署Hbase
4、配置Hbase
5、HDFS里新建Hbase存储目录
6、启动Hbase集群
Hbase提供了诸多访问接口,下面简单罗列各种访问接口。
最常规和高效的访问方式,适合 Hadoop MapReduce Job 并行批处理 Hbase 表数据。
Hbase 的命令行工具,最简单的接口,适合管理、测试时使用。
利用 Thrift 序列化技术,支持 C++ , PHP , Python 等多种语言 ,适合其他异构系统在线访问 Hbase 表数据
支持REST风格的HTTP API访问Hbase,解除了语言限制。
可以使用Pig Latin流式编程语言操作Hbase中的数据,和Hive类似,本质上最终也是编译成MR Job来处理Hbase表数据,适合做数据统计。
同Pig类似,用户可以使用类SQL的HiveQL语言处理Hbase表中数据,当然最终本质依旧是HDFS与MR操作
①假定MySQL里有member表,要求使用Hbase的Shell接口,在Hbase中新建并存储此表。
②简述Hbase是否适合存储问题①中的结构化数据,并简单叙述Hbase与关系型数据库的区别
解:
将姓名、性别、年龄这三个字段抽象为个人属性(personalAttr),
教育、职业、收入抽象为社会属性(socialAttr),
personalAttr列族包含name、gender和age三个限定符;
socialAttr下包含edu、prof、inco三个限定符。
进入Hbase命令行:hbase shell
查看所有表:list
创建member表:create ‘表名’,‘行键名’,‘大类列键名1’,‘大类列键名2’
查看表的内容:scan ‘member’
插入数据:put ‘表名’ ‘行键’ ‘大类列键:具体列键名’ ‘内容’
废弃表:disable ‘表名’
删除表:drop ‘表名’
退出:quit
[root@iClient~]#hbase shell #进入Hbase命令行
hbase(main):001:0>list #查看所有表
hbase(main):002:0>create 'member','id','personalAttr','socialAttr'
#创建member表
hbase(main):003:0> list hbase(main):004:0>scan 'member'
#查看member内容
hbase(main):005:0>put 'member','201401','personalAttr:name','aa'
#向member表中插入数据
hbase(main):004:0>put 'member','201401','personalAttr:gender','0'
hbase(main):007:0>put 'member','201401','personalAttr:age','21'
hbase(main):008:0>put 'member','201401','socialAttr:edu','e0'
hbase(main):009:0>put 'member','201401','socialAttr:job','p3'
hbase(main):010:0>put 'member','201401','socialAttr:imcome','m'
hbase(main):011:0>scan 'member'
hbase(main):012:0>disable 'member' # 废弃 member 表
hbase(main):013:0>drop 'member' # 删除 member 表
hbase(main):014:0>quit
列Hbase和关系型数据库的区别:
Hbase只提供字符串这一种数据类型,其他数据类型的操作只能靠用户自行处理,而关系型数据库有丰富的数据类型;
Hbase数据操作只有很简单的插入、查询、删除、修改、清空等操作,不能实现表与表关联操作,而关系型数据库有大量此类 SQL 语句和函数 ;
Hbase基于列式存储,每个列族都由几个文件保存,不同列族的文件是分离的,关系型数据库基于表格设计和行模式保存;
Hbase修改和删除数据实现上是插入带有特殊标记的新记录,而关系型数据库是数据内容的替换和修改;
Hbase为分布式而设计,可通过增加机器实现性能和数据增长,而关系型数据库很难做到这一点
本地计算(Map)-->洗牌(Shuffl)-->合并再计算(Reduce)
取新机器cMaster1,采用客户-服务器模式构建由机器cSlave0、cSlave1和cMaster1组成的分布式计算集群。
cSlave0最好是处理存于本机硬盘上的file0,而不是将file1从cSlave1调过来(通过网络)再处理file1,这就是所谓的“本地计算”
定义:
“洗牌”:规定将Key值相同的KV对,通过网络发往同一台机器
步骤:
第一步:每台机器将各自KV对中的Value连接成一个链表
第二步:各台机器可对
第三步:将得出的结果再存于DFS。
容易看出,无论是Map、Shuffle还是Reduce,甚至是存储结果,在每个阶段都是并行的,整个过程则构成一个有向无环图(DAG)
只要保证存于cSlave0上的数据,同时还存在于别的机器上,即使cSlave0宕机,数据依旧不会丢失
引入新机器cSlave2和cSlave3,将存于cSlave0的file0同样存储于cSlave2,存于cSlave1的file1同样存一份于cSlave3。
cSlave0~3的计算任务统一由cMaster1指派。cMaster1选中先结束的那台机器的计算结果,并停止另一台机器里还在计算的进程
通过冗余存储,不仅提高了分布式存储可靠性,还提高了分布式计算的可靠性
MapReduce一种处理海量数据的并行编程模式,用于大规模数据集(通常大于1TB)的并行运算。
“Map(映射)”、“Reduce(化简)”的概念和主要思想,都是从函数式编程语言和矢量编程语言借鉴
适合非结构化和结构化的海量数据的搜索、挖掘、分析与机器智能学习等
为什么需要MapReduce?
1、Google拥有海量数据,并且需要快速处理
2、计算问题简单,但求解困难
3、待处理数据量巨大(PB级),只有分布在成百上千个节点上并行计算才能在可接受的时间内完成
Map函数——对一部分原始数据进行指定的操作。每个Map操作都针对不同的原始数据,因此Map与Map之间是互相独立的,这使得它们可以充分并行化
Reduce操作——对每个Map所产生的一部分中间结果进行合并操作,每个Reduce所处理的Map中间结果是互不交叉的,所有Reduce产生的最终结果经过简单连接就形成了完整的结果集
开发者需要编写的两个主要函数:
Map输入参数:in_key和in_value,它指明了Map需要处理的原始数据
Map输出结果:一组
Reduce输入参数:(key,[value1,…,valuem])
Reduce工作:对这些对应相同key的value值进行归并处理
Reduce输出结果:(key,final_value),所有Reduce的结果并在一起就是最终结果
怎么用MapReduce计算一个大型文本文件中各单词出现次数?
Map的输入参数指明了需要处理哪部分数据,以“<在文本中的起始位置,需要处理的数据长度>”表示,经过Map处理,形成一批中间结果“<单词,出现次数>”。而Reduce函数处理中间结果,将相同单词出现的次数进行累加,得到每个单词总的出现次数
MapReduce操作执行流程图
(1)输入文件分成M块,每块大概16M~64MB(可以通过参数决定),接着在集群的机器上执行分派处理程序
(2)M个Map任务和R个Reduce任务需要分派,Master选择空闲Worker来分配这些Map或Reduce任务
(3)Worker读取并处理相关输入块,Map函数产生的中间结果
(4)中间结果定时写到本地硬盘,分区函数将其分成R个区。中间结果在本地硬盘的位置信息将被发送回Master,然后Master负责把这些位置信息传送给ReduceWorker
(5)当Master通知执行Reduce的Worker关于中间
(6)Reduce Worker根据每一个唯一中间key来遍历所有的排序后的中间数据,并且把key和相关的中间结果值集合传递给用户定义的Reduce函数。Reduce函数的结果写到一个最终的输出文件
(7)当所有的Map任务和Reduce任务都完成的时候,Master激活用户程序。此时MapReduce返回用户程序的调用点
Master会周期性地设置检查点(checkpoint),并导出Master的数据。一旦某个任务失效,系统就从最近的一个检查点恢复并重新执行
Master周期性地给Worker发送ping命令,若没有应答,则认为Worker失效,终止其任务调度,把该任务调度到其他Worker上重新执行
假设有一批海量的数据,每个数据都是由26个字母组成的字符串,原始的数据集合是完全无序的,怎样通过MapReduce完成排序工作,使其有序(字典序)呢?
1、对原始的数据进行分割(Split),得到N个不同的数据分块
2、每一个数据分块都启动一个Map进行处理。采用桶排序的方法,每个Map中按照首字母将字符串分配到26个不同的桶中
3、每个桶对应一个reduce函数
按照首字母将Map中不同桶中的字符串集合放置到相应的Reduce中进行处理。具体来说就是首字母为a的字符串全部放在Reduce1中处理,首字母为b的字符串全部放在Reduce2,以此类推
Paxos算法 :Leslie Lamport最先提出的一种基于消息传递(Messages Passing)的一致性算法,用于解决分布式系统中的一致性问题。
Paxos 算法解决的问题是一个分布式系统如何就某个value(决议)达成一致决议)达成一致。
proposers提出决议(Value,系统接下来执行的指令)
acceptors批准决议,采用少数服从多数的原则 Ø
learners获取并使用已经通过的决议
Paxos算法保证数据的一致性
(1)决议只有被proposers提出后才能批准
(2)每次只批准一个决议
(3)只有决议确定被批准后learners 才能获取这个决议
1、proposer选择一个编号n,并向accepter多数派发出一个prepare请求
2、如果accepter接受到的prepare所带有的编号n比它之前所做出过回应的prepare请求的编号都要高,则该accepter回应proposer一个promise
1、如果 proposer 收到了 accepter 多数派对它所发出的 prepare 请求所做的回应,则它发出带有proposal的accept请求,proposal=(num,value),value为回应所带回的 proposal 的 value 值 l
2、如果accepter接受到一个accept请求,如果该 accepter 之前没有对 任何编号大于 n 的 prepare 请求做出过 promise ,则接受该 proposal
解决一致性问题算法:为了减少决议发布过程中的消息量,acceptors将这个通过的决议发送给learners 的一个子集,然后由这个子集中的learners 去通知所有其他的learners;
特殊情况:如果两个proposer在这种情况下都转而提出一个编号更大的提案,那么就可能陷入活锁。此时需要选举出一个president,仅允许president提出提
prepare-->promise-->proposal
PageRank是一种在搜索引擎中根据网页之间相互的链接关系计算网页排名的技术。
PageRank是Google用来标识网页的等级或重要性的一种方法。其级别从1到10级,PR值越高说明该网页越受欢迎(越重要)。
PageRank近似于一个用户,是指在Internet上随机地单击链接将会到达特定网页的可能性。通常,能够从更多地方到达的网页更为重要,因此具有更高的PageRank.
Rank leak:一个独立的网页如果没有外出的链接就产生等级泄漏
解决办法:
1.将无出度的节点递归地从图中去掉,待其他节点计算完毕后再加上
2.对无出度节点添加一条边,指向那些指向它的顶点
Rank sink:整个网页图中的一组紧密链接成环的网页如果没有外出的链接就产生Rank sink
假定一个上网者从一个随机的网页开始浏览,上网者不断点击当前网页的链接开始下一次浏览。但是,上网者最终厌倦了,开始了一个随机的网页。随机上网者用以上方式访问一个新网页的概率就等于这个网页PageRank值。
1这种随机模型更加接近于用户的浏览行为
2一定程度上解决了rank leak和rank sink的问题
3保证pagerank具有唯一值。
图的表示:
设定任意两个顶点之间都有直接通路在每个顶点处以概率d按原来蓝色方向转移,以概率1-d按红色方向转移。
到学术论文的重要性排序
到学术论文的作者的重要性排序
囗某作者引用了其它作者的文献,则该作者认为其它作者是“重要”的。
网络爬虫(WebCrawler)
囗可以利用PR值,决定某个URL,所需要抓取的网页数量和深度
囗重要性高的网页抓取的页面数量相对多一些,反之,则少一些
到关键词与句子的抽取(节点与边)
是一个与查询无关的静态算法,所有网页的PageRank值通过离线计算获得;有效减少在线查询时的计算量,极大降低了查询响应时间。
1、过分相信链接关系
2、一些权威的网页往往是相互不链接的
3、人们的查询具有主题特征,PageRank忽略了主题相关性,导致结果的相关性和主题性降低
4、旧的页面等级会比新页面高。因为即使是非常好的新页面也不会有很多上游链接,除非它是某个站点的子站点。
云计算安全与传统安全具有以下3个相同点。
1)目标是相同的,保护信息、数据的安全和完整。
2)保护对象相同,保护计算、网络、存储资源的安全性。
3)部分采用技术类似,如传统的加解密技术、安全检测技术等。
1、客户端资源占用率低
2、病毒库置于服务器端
3、具备云安全态势感知新功能
虚拟化安全问题
数据安全问题
云安全审计问题
云安全管理问题
云安全边界界定问题
云计算系统可靠性问题
云平台系统安全漏洞问题
云业务模式带来的安全问题
法律层面存在风险
看hbase的例题
(1)政府及公共事业
政府行业将云计算技术逐步转化为实际应用,一方面是面向政府工作人员,成为政府办公、计算平台的“政务云”,另一方面是面向普通公众,成为“公共服务云”
(2)制造业:云计算发力制造业运营模式创新
在PaaS模式下,用户首先采用云计算运营商支持的编程语言和工具编写相应的应用程序,然后放到云计算平台上运行;
在SaaS模式下,用户既可以获得低廉的ERP、CRM等企业信息化解决方案及服务,又可以进行快速有效的仿真模拟。通过这种购买服务的方式,企业可以降低设计与制造成本,大幅缩短企业产品升级换代周期,提高产品性能,提升企业信息化能力,大幅提升工业企业的自主创新效率,并推动企业核心竞争优势的提升。
(3)电信:借势发力,对内对外双重“整合”
对内进行业务系统IT资源整合,提升内部IT资源的利用率和管理水平,降低业务的提供成本;
对外通过云计算构建新兴商业模式的基础资源平台,提供公用IT服务,提升传统电信经济的效率,加速电信运营商平台化趋势与产业链的整合趋势,并在应用层面推动云计算的落地。
(4)金融与能源:信息化整合的“关键武器“
搭建基于laaS的物理集成平台,对各类服务器基础设施应用进行集成,形成能够高度复用与统一管理的IT资源池,对外提供统一硬件资源服务,同时在信息系统整合方面,需要建立基于PaaS系统的整合平台,实现各异构系统间的互联互通。因此,云计算模式将成为金融、能源等大型企业信息化整合的“关键武器”
(5)教育:云计算为教育信息化服务
各大高校将根据自身研究领域与技术需求建立云计算平台,并对原来各下属研究所的服务器与存储资源加以有机整合,提供高效可复用的云计算平台,为科研与教学工作提供强大的计算机资源,进而大大提高研发工作效率。
(6)医药医疗:云计算助推新医改
以“云信息平台”为核心的信息化集中应用模 式孕育而生, 逐步取代目前各系统分散为主体的应用模式,进而提高医药企业内部信息共享能力与医 疗信息公共平台的整体服务能力。
(7)云计算推动农业信息化建设
通过与骨干网络等基础设施建设的配合,对农业生产的各种要素进行数字化设计、智能化控制、精准化运行、科学化管理,实现云服务与农业发展紧密结合, 从而推动农业 信息化的建设。农业生产方面,可以指导生产者、经营者和管理者 将农产品顺利进入市 场,实现农业增产、农民增收;在农民生活方面借助信息传 播媒体,设计并提供针对农 村、农业、农民特点和使用习惯的软件与服务,以提 高农民生活质量