当前位置:   article > 正文

【云计算与大数据概述 】课堂笔记_云计算与大数据概论

云计算与大数据概论

文章目录


在这里插入图片描述

第一章 云计算与大数据基础

1.1 云计算基础
1.1.1 云计算简介
  1. 云计算的技术内容包括分布式计算技术,虚拟化技术,网络技术,服务器技术,数据中心技术,云计算平台技术,存储技术等
  2. 云计算的定义:一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机和其他设备(维基百科)
  3. 云计算时代基本的3种角色:资源的整合运营者,资源的使用者,终端客户
1.1.2 云计算的特点
  1. 资源池弹性可扩张:资源的集中管理和输出,能够有效应对不断增长的资源需求
  2. 按需提供资源服务:敏捷的适应用户对资源不断变化的需求
  3. 虚拟化:利用软件来实现硬件资源的虚拟化管理,调度及使用
  4. 网络化的资源接入:基于云计算系统的应用服务通过网络来提供给用户
  5. 高可靠性和安全性:数据被复制到多个服务器节点上有多个副本备份
  6. 经济性
1.1.3 云计算技术分类
  1. 按技术路线分:
    资源整合型云计算:集群架构,通过将大量节点的计算资源和存储资源整合后输出,核心技术为分布式计算和存储技术(如:MPI,Hadoop,HPCC,Storm等)
    资源切分型云计算:虚拟化系统,通过系统虚拟化实现对单个服务器资源的弹性化切分,核心技术为虚拟化技术
  2. 按服务对象分:
    公有云:服务对象是面向公众的云计算服务,公有云对云计算系统的稳定性,安全性和并发服务能力有高的要求
    私有云:主要服务于某一组织内部的云计算服务,其服务并不向公众开放
  3. 按资源封装的层次分:
    基础设施即服务(IaaS):把单纯的计算和存储资源不经封装的直接通过网络以服务的形式提供给用户使用
    平台即服务(PaaS):计算和存储资源经封装后,以某种接口和协议的形式提供给用户调用,资源的使用者不再直接面对底层资源
    软件即服务(SaaS):将计算和存储资源封装为用户可以直接使用的应用并通过网络提供给用户
1.2大数据基础
1.2.1 大数据简介
  1. 大数据:大数据是现有数据库管理工具和传统数据处理应用很难处理的大型,复杂的数据集,大数据的挑战包括采集,存储,搜索,共享,传输,分析和可视化等
    三个特性:规模性,多样性,高速性,价值
  2. 数据的来源:信息管理系统,网络信息系统,物联网系统,科学实验系统等
    数据类型包括结构化数据(如数据库中的数据),半结构化数据,非结构化数据
  3. 生产数据的三个阶段
    1)被动生成数据:数据随业务系统的运行产生
    2)主动式生产数据:人可以随时随地通过手机等移动终端生成数据
    3)感知式生成数据:物联网的发展,遍布各地的数据采集设备不断地自动采集,生成数据
  4. 大数据时代的特点
    1)数据产生方式:被动采集变为主动生成
    2)数据采集密度:
    以往采集密度低,采样数据有限,
    现可以更加密集的采样,从而精确地获取事件的全局数据
    3)数据源:
    以往是单一的数据源,
    现在通过分布式计算,分布式文件系统,分布式数据库等技术对多个数据源获取的数据进行整合处理
    4)数据处理方式:
    以往采用离线处理,
    现在可以根据实际需求对数据采取灵活的处理方式,对较大的数据源,响应时间要求低的应用采取批处理的方式进行集中式计算,而对响应时间要求高的实时数据处理则采用流处理的方式进行实时计算,而且可以对历史数据的分析进行预测
    在这里插入图片描述
  5. 大数据的应用领域
1.2.2 主要的大数据处理系统
  1. 数据查询分析计算系统:对大规模数据进行实时或准实时查询(如HBase,Hive,Cassandra,Impala,Shark,Hana等)
  2. 批处理系统(如Hadoop,Spark)
    MapReduce是被广泛使用的批处理计算模式
  3. 流式计算系统:具有很强的实时性,对不断产生的数据实时进行处理,常用于电信,电力等行业应用以及互联网行业的访问日志等
  4. 迭代计算系统
  5. 图计算系统:存储,计算图数据
  6. 内存技术系统:使用内存计算完成高速的大数据处理
1.2.3 大数据处理的基础流程
大数据的处理流程可以定义为在适合工具的辅助下,对广泛异构的数据源进行抽取和集成,结果按照一定的标准统一存储,利用合适的数据分析技术对存储的数据进行分析,从中提取有益的知识并利用恰当的方式将结果展示给终端用户。
  • 1
  1. 数据抽成与集成:对数据进行抽成和集成,从中提取出关系和实体,经过关联和聚合等操作,按一定格式对数据存储
    方法:基于物化或ETL方法的引擎,基于联邦数据库或中间件方法的引擎,基于数据流方法的引擎
  2. 数据分析:用户根据自己的需求对获取的数据进行分析处理,比如数据挖掘,机器学习,数据统计等,数据分析可用于决策支持,商业智能,推荐智能,预测系统等
  3. 数据解释:对数据处理结果有合适的展示方式,才能被终端用户正确理解
    主要技术包括可视化,人机交互
    在这里插入图片描述
1.3云计算与大数据的发展
  • 云计算的兴起因素:高速互联网技术发展,资源利用率需求,简单与创新需求,其他需求

第二章 云计算与大数据的相关技术

2.1 云计算与大数据

—云计算与大数据相比云计算更像是对一种新的技术模式的描述而不是对某一项技术的描述,而大数据则较为确切地与一些具体的技术相关联。
—云计算整合的资源主要是计算和存储资源,云计算技术的发展也清晰地呈现出两大主题—计算和数据。伴随这两大主题,出现了云计算和大数据这两个热门概念。
—在分布式系统中实现计算和数据有效融合从而提高数据处理能力,简化分布式程序设计难度,降低系统网络通信压力从而使系统能有效地面对大数据处理的机制称为计算和数据的协作机制。
—面向数据也可以更准确地称为“面向数据的计算”,面向数据要求系统的设计和架构是围绕数据为核心展开的,面向数据也是云计算系统的一个基本特征,而计算与数据的有效协作是面向数据的核心要求。

2.2 云计算与物联网

物联网:通过射频识别装置,红外感应装置,全球定位系统,激光扫描器等信息传感设备,按约定的协议把任何物品与互联网连接,进行信息交换和通信,以实现智能化识别,定位,跟踪,监控和管理的一种网络
云计算技术将给物联网带来以下深刻变革:
(1)解决服务器节点的不可靠性问题,最大限度降低服务器的出错率。(2)低成本的投入可以换来高收益,让限制访问服务器次数的瓶颈成为历史。(3)让物联网从局域网走向城域网甚至是广域网,在更广的范围内进行信息资源共享。(4)将云计算与数据挖掘技术相结合,增强物联网的数据处理能力,快速做出商业抉择。

2.3 一致性哈希算法 *
2.3.1 一致性哈希算法的基本原理
  • 哈希算法:是一种将任意长度的串映射为固定长度的串,在存储和计算定位时可以被看作是一种路由算法,通过这种路由算法文件块能被唯一的定位到一个节点的位置。
  • 传统的哈希算法:无法满足节点数目频繁变化的要求
  • 一致性哈希算法:无中心节点的计算和数据定位,使计算可以惟一地找到其所要处理和分析的数据,使计算能最大可能地在数据存储的位置发起,从而节约大量的网络资源,同时避免了系统单点失效造成的不良影响。(如需要存储大量Key-Value的Amazon的电子商务应用和Facebook的社交网站应用都采用了一致性哈希算法)
  • 一致性哈希原理:对Key值首先用MD5算法将其变换为一个长度32位的十六进制数值,再用这个数值对2^32 取模,将其映射到由 2^32个值构成的环状哈希空间,对节点也以相同的方法映射到环状哈希空间,最后Key值会在环状哈希空间中找到大于它的最小的节点值(后一个节点值)作为路由值。
    在这里插入图片描述
2.3.2 一致性哈希算法中计算和存储位置的一致性

数据存储位置是唯一的,把存储位置映射到哈希环上,在处理文件的程序上指定数据存储位置,计算出文件所处的节点位置,将计算程序分配到这个位置,则计算找到了数据
应用举例:在这里插入图片描述

2.4 非关系型数据库
2.4.1 从关系型数据库到非关系型数据库

云计算技术对数据库高并发读/写的需求,对海量数据的高效率存储和访问的需求,对数据库的高可扩展性和高可用性的需求都让传统关系型数据库系统显得力不从心。同时关系型数据库技术中的一些核心技术要求如:数据库事务一致性需求,数据库的写实时性和读实时性需求,对复杂的SQL查询,特别是多表关联查询的需求等在Web 2.0技术中却并不是必要的,而且系统为此付出了较大的代价。非关系型数据库技术的出现是云计算、大数据技术的必然需求。

2.4.2 非关系型数据库的定义(NoSQL)
  • 非关系型数据库,又被称为NoSQL(Not Only SQL),意为不仅仅是SQL(Structured Query Language,结构化查询语言),NoSQL描述的是大量结构化数据存储方法的集合
    在这里插入图片描述
  • 根据结构化方法以及应用场合的不同,主要可以将NoSQL分为以下几类:
    (1)Column-Oriented(列存储数据库)
    面向检索的列式存储,其存储结构为列式结构,不同于关系型数据库的行式结构,这种结构会让很多统计聚合操作更简单方便,使系统具有较高的可扩展性。
    这类数据库还可以适应海量数据的增加以及数据结构的变化,这个特点与云计算所需的相关需求是相符合的。
    比如Google Appengine的Big Table以及相同设计理念的Hadoop子系统HBase就是这类的典型代表。需要特别指出的是,BigTable特别适用于MapReduce处理,这对于云计算的发展有很高的适应性。
    (2)Key-Value(键值存储数据库)
    面向高性能并发读/写的缓存存储,其结构类似于数据结构中的Hash表,每个Key分别对应一个Value,能够提供非常快的查询速度、大数据存放量和高并发操作,非常适合通过主键对数据进行查询和修改等操作。
    Key-Value数据库的主要特点是具有极高的并发读/写性能,非常适应作为缓存系统使用。
    MemcacheDB、Berkeley DB、Redis、Flare就是Key-Value数据库的代表。
    (3)Document-Oriented(文档型数据库)
    面向海量数据访问的文档存储,这类存储的结构与Key-Value非常相似,也是每个Key分别对应一个Value,但是这个Value主要以JSON(JavaScript Object Notations)或者XML等格式的文档来进行存储。
    这种存储方式可以很方便地被面向对象的语言所使用。
    这类数据库可以在海量的数据中快速查询数据,典型代表为MongoDB、CouchDB等。
    (4)图形(Grach)数据库
    图形结构数据库同其他行列以及刚性结构的SQL数据库不同,他是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或查询API。如:Neo4J,InfoGrid,Ifinite Graph。
    在这里插入图片描述
  • NoSQL优点:具有扩展简单、高并发、高稳定性、成本低廉等优势,
  • NoSQL缺点:
    NoSQL暂不提供对SQL的支持,会造成开发人员的额外学习成本;
    NoSQL大多为开源软件,其成熟度与商用的关系型数据库系统相比有差距;
    NoSQL的架构特性决定了其很难保证数据的完整性,适合在一些特殊的应用场景使用。
2.5 集群高速通信标准InfiniBand
  • 集群结构是云计算系统的基本结构之一,在集群结构中节点之间的协调和数据传送一般都通过消息传递机制进行,在传统的高性能计算系统集群内部的网络通信能力成为了影响集群计算能力的一个重要因素,由于受到网络通信速度的制约甚至提出以计算换通信的编程理念。
    云计算系统中集群的规模变得空前巨大,为了很好地实现集群内部的调度和协调高速的网络通信是必不可少的。InfiniBand就是目前较为常见的一种高速集群通信协议,它在高性能计算领域已得到广泛的应用。
  • InfiniBand是唯一既提供机箱内底板互联解决方案,又可以使高速带宽延伸出机箱外部的互联标准,是一种把I/O和系统域网络统一起来的标准。
  • 与其他商品化系统域网络不同,InfiniBand网络首先由行业协会制定标准,然后生产商根据标准制造出InfiniBand设备,不同生产商的产品要求具有互操作性,这样可以使InfiniBand产品具有更好的性能价格比。
  • InfinBand 既可作为系统内部互联技术又可作为网络互联技术
    既可用于构造高性能刀片服务器(Blade Server);
    又可用于构建具有高可用性和高可伸缩性的大规模集群系统;
    还可用于构建性能卓越的存储区域网络SAN。
    在这里插入图片描述
2.6 云计算大数据集群的自组织特性
  • 自组织理论主要研究混沌系统在随机识别时系统内部自发地由无序变为有序、形成耗散结构的过程
    自组织算法按照自下而上的机制进行控制,与一般采用中心控制算法不同,在进化计算、任务分配、网络自组织演化等中得到广泛的研究
  • 典型的进化算法(如蚁群算法)由个体依据简单规则,通过正反馈、分布式协作依靠群体的力量自动寻找最优路径;任务分配通过多智能体并行实现在离散、有限的数据结构上,寻找一个满足给定约束条件并使目标函数值达到最大或者最小的解;人工生命进化由人工分子的非线性相互作用引起,是远离热平衡的相变,是自组织的研究方向之一;网络自组织演化研究在内在机制驱动下,网络自行从简单向复杂、从粗糙向细致方向发展,不断地以局部优化达到全局优化的过程。
  • 研究自组织必然要提到耗散结构理论,一个开放系统当某个参数变化到一定的临界值时,系统发生突变,其状态可能从原来的混乱无序的状态转变到一种在时间、空间上或功能上有序的新状态,这种新的有序结构(耗散结构)需要系统不断地与外界交换物质和能量才能得以维持并保持一定的稳定性
  • 自组织现象:系统从无序自动走向有序结构,出现自组织现象的系统必须是耗散结构的

第三章 虚拟化技术

3.1 虚拟化技术简介
3.1.1 虚拟化技术的发展
  • 广义地定义虚拟化技术:虚拟化技术就是一种逻辑简化技术,实现物理层向逻辑层的变化
    从这个定义来看,一个系统采用虚拟化技术后,其对外表现出的运动方式是一种逻辑化的运动方式,而不是真实的物理运动方式
    采用虚拟化技术能实现对物理层运动复杂性的屏蔽,使系统对外运行状态呈现出简单的逻辑运行状态
3.1.2 虚拟化的描述
  • 维基百科中虚拟化的描述:
    “在计算机技术中,虚拟化(Virtualization)是将计算机物理资源如服务器、网络、内存及存储等予以抽象、转换后呈现出来,使用户可以以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式、地域或物理组态所限制的”
3.1.3 虚拟化技术的优势和劣势
  • 虚拟化技术的优势
    (1)虚拟化技术可以提高资源利用率
    传统的IT企业为每一项业务分配一台单独的服务器,服务器的实际处理能力往往远超服务器的平均负载,使得服务器大部分时间都处于空闲状态,造成资源的浪费
    虚拟化技术可以减少必须进行管理的物理资源的数量,隐藏了物理资源的部分复杂性
    为了达到资源的最大利用率,虚拟化还把一组硬件资源虚拟化为多组硬件资源,并动态地调整空闲资源,减小服务器的规模
    (2)提供相互隔离、高效的应用执行环境
    虚拟化技术能够实现较简单的共享机制无法实现的隔离和划分,从而对数据和服务进行可控和安全的访问
    例如,用户可以在一台计算机上模拟多个不同、相互之间独立的操作系统,这些虚拟的操作系统可以是Windows或Linux系统。其中的一个或多个子系统遭受攻击而崩溃时,不会对其他系统造成影响。在使用备份机制后,受到攻击的子系统可以快速恢复。
    (3)虚拟化可以简化资源和资源的管理
    计算机有硬盘、磁盘等硬件资源和Web服务等软件资源。用户对计算机资源进行访问是通过标准接口来进行的。
    使用标准接口的好处是用户不用知道虚拟资源的具体实现。底层的基础设施发生变化时,只要标准接口没有发生变化,用户基本上感受不到这种变化。这是因为,与用户直接接触的是标准接口,虽然底层的具体实现发生改变,但是用户与虚拟资源进行交互的方式并没有改变。
    传统的IT服务器资源是硬件相对独立的个体,对每一种资源都要进行相应的维护和升级,会耗费大量的人力、物力。
    而虚拟化系统降低了用户与虚拟资源之间的耦合度,利用这种松耦合的关系,管理者可以在对用户影响最小的基础上对资源进行管理。
    此外,虚拟化系统还将资源进行整合,在管理上相对而言比较方便,在升级时也只需添加动作,从而提高工作效率。
    (4)虚拟化技术实现软件和硬件的分离
    用户在同一个计算机系统上可以运行多个软件系统,不同的软件系统通过虚拟机监视器(VMM, Virtual Machine Monitor)来使用底层的硬件资源,从而实现多个软件系统共享同一个硬件资源,达到软件和硬件的分离。
    这样,在虚拟化的统一的资源池能够运行更多的软件系统,充分利用已有的硬件资源。
  • 虚拟化技术的劣势
    (1)可能会使物理计算机负载过重
    虚拟化技术虽然是在虚拟的环境中运行的,但是其并不是完全虚拟的,依然需要硬件系统的支持。
    (2)升级和维护引起的安全问题
    物理计算机的操作系统及操作系统上的各种应用软件都需要不定时地进行升级更新,以增强其抵抗攻击的能力。每台客户机也都需要进行升级更新。一台物理计算机上安装多台客户机,会导致在客户机上安装补丁速度缓慢。如果客户机上的软件不能及时更新,则很可能会被病毒攻击,带来安全隐患。
    (3)物理计算机的影响
    传统的物理计算机发生不可逆转的损坏时,若不是作为服务器出现,则只有其自身受到影响。当采用虚拟化技术的物理计算机发生宕机时,其所有的虚拟机都会受到影响。在虚拟机上运行的业务也会受到一定程度的影响,甚至是损坏
    此外,一台物理计算机的虚拟机往往会有相互通信,在相互通信的过程中,可能会导致安全风险。
3.1.4 虚拟化技术的分类

虚拟化技术从计算体系结构的层次上可分为:
在这里插入图片描述

  • 指令集架构级虚拟化
    指令集架构级虚拟化是通过纯软件方法,模拟出与实际运行的应用程序(或操作系统)所不同的指令集去执行,采用这种方法构造的虚拟机一般称为模拟器
    模拟器是将虚拟平台上的指令翻译成本地指令集,然后在实际的硬件上执行。其特点是简单、具有鲁棒性、可跨平台
  • 硬件抽象层虚拟化
    硬件抽象层虚拟化是指将虚拟资源映射到物理资源,并在虚拟机的运算中使用实实在在的硬件。即使用软件来虚拟一台标准计算机的硬件配置,如CPU、内存、硬盘、声卡、显卡、光驱等,成为一台虚拟的裸机
    这样做的目的是为客户机操作系统呈现和物理硬件相同或类似的物理抽象层。客户机绝大多数指令在宿主机上直接运行,从而提高了执行效率。但是,给虚拟机分配的硬件资源的同时虚拟软件本身也要占用实际硬件资源的,对性能损耗较大
    硬件抽象层的虚拟机具有以下优点:
    (1)高度的隔离性
    (2)可以支持与宿主机不同的操作系统及应用程序
    (3)易于维护及风险低
    比较有名的硬件抽象层虚拟化解决方案有VMWare、Virtual PC、Xen、KVM等
  • 操作系统层虚拟化
    操作系统层虚拟化是指通过划分一个宿主操作系统的特定部分,产生一个个隔离的操作执行环境。操作系统层的虚拟化是操作系统内核直接提供的虚拟化,虚拟出的操作系统之间共享底层宿主操作系统内核和底层的硬件资源
    操作系统虚拟化的关键点在于将操作系统与上层应用隔离开,将对操作系统资源的访问进行虚拟化。使得上层应用觉得自己独占操作系统
    操作系统虚拟化的好处是实现了虚拟操作系统与物理操作系统的隔离并且有效避免物理操作系统的重复安装
  • 编程语言层上的虚拟化
    编程语言层上的虚拟机是在应用层上创建的,并支持一种新定义的指令集。这一类虚拟机运行的是针对虚拟体系结构的进程级作业,通常这种虚拟机是作为一个进程在物理计算机系统中运行的,使得用户感觉不到应用程序是在虚拟机上运行的。
    这种层次上的虚拟机主要有JVM(Java Virtual Machine) ,JVM是通过在物理计算机上仿真模拟计算机的各种功能来实现的,是虚拟出来的计算机。 JVM使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上进行无缝迁移
  • 库函数层的虚拟化
    在操作系统中,应用程序的编写会使用由应用级的库函数提供的一组API函数。这些函数隐藏了一些操作系统的相关底层细节,降低了程序员的编程难度
    库函数层的虚拟化就是对操作系统中的应用级库函数的接口进行虚拟化,创造出了不同的虚拟化环境。使得应用程序不需要修改,就可以在不同的操作系统中迁移
    不同的操作系统库函数的接口不一样。如利用API转换技术做出Linux与Windows相对应的函数来调用DLL,从而能在Linux系统中运行Windows程序
3.2 常见虚拟化软件
3.2.1 VirtualBox

VirtualBox是一款开源免费的虚拟机软件,使用简单、性能优越、功能强大且软件本身并不臃肿,VirtualBox是由德国软件公司InnoTek开发的虚拟化软件,现隶属于Oracle 旗下,并更名为Oracle VirtualBox。
其宿主机的操作系统支持Linux、Mac、Windows三大操作平台,在Oracle VirtualBox虚拟机里面,可安装的虚拟系统包括各个版本的Windows操作系统、Mac OS X(32位和64位都支持)、Linux内核的操作系统、OpenBSD、Solaris、IBM OS2甚至Android 4.0系统等操作系统,在这些虚拟的系统里面安装任何软件,都不会对原来的系统造成任何影响。
它与同类的VMware Workstation虚拟化软件相比,VirtualBox对Mac系统的支持要好很多,运行比较流畅,配置比较傻瓜化,对于新手来说也不需要太多的专业知识,很容易掌握,并且免费这一点就足以比商业化的VMware Workstation更吸引人,因此VirtualBox更适合预算有限的小环境。

3.2.2 VMware Workstation

一款功能强大的商业虚拟化软件,和VirtualBox一样,仍然可以在一个宿主机上安装多个操作系统的虚拟机,宿主机的操作系统可以是Windows或Linux,可以在VMware Workstation中运行的操作系统有DOS、Windows 3.1、Windows 95、Windows 98、Windows 2000、Linux、FreeBSD等。
VMware Workstation虚拟化软件虚拟的各种操作系统仍然是开发、测试 、部署新的应用程序的最佳解决方案。VMware Workstation占的空间比较大,VMware公司同时还提供一个免费、精简的Workstation环境—VMware Player,可在VMware官方网站下载使用。
对于企业的 IT开发人员和系统管理员而言, VMware Workstation在虚拟网络、实时快照、拖曳共享文件夹、支持 PXE 等方面的特点使它成为必不可少的工具。
总体来看,VMware Workstation的优点在于其计算机虚拟能力,物理机隔离效果非常优秀,它的功能非常全面,倾向于计算机专业人员使用,其操作界面也很人性化;VMware Workstation的缺点在于其体积庞大,安装时间耗时较久,并且在运行使用时占用物理机的资源较大。

3.2.3 KVM

KVM(Kernel-based Virtual Machine)是一种针对Linux内核的虚拟化基础架构,它支持具有硬件虚拟化扩展的处理器上的原生虚拟化。
最初,它支持x86处理器,但现在广泛支持各种处理器和操作系统,包括Linux、BSD、Solaris、Windows、Haiku、ReactOS 和AR-OS等。
基于内核的虚拟机 (KVM) 是针对包含虚拟化扩展(Intel VT 或 AMD-V)的 x86 硬件上的Linux的完全原生的虚拟化解决方案。对半虚拟化(Paravirtualization)的有限支持也可以通过半虚拟网络驱动程序的形式用于Linux和Windows Guest系统。

3.3 系统虚拟化

1.系统虚拟化: 指在一台物理计算机系统上虚拟出一台或多台虚拟计算机系统
虚拟计算机系统(简称虚拟机):是指使用虚拟化技术运行在一个隔离环境中的具有完整硬件功能的逻辑计算机系统,包括操作系统和应用程序。一台虚拟机中可以安装多个不同的操作系统,并且这些操作系统之间相互独立
2.系统虚拟化的典型特征
虚拟机有同一性、高效性、受控性的3个典型特征
同一性是指虚拟机的运行环境和物理机的运行环境在本质上应该是相同,表现形式上可以有所差别
高效性是指软件在虚拟机上运行时,大部分是在硬件上运行的,只有少数是在虚拟机中运行的,从而在虚拟机中运行的软件的性能接近在物理机上运行的性能
资源受控是指VMM完全控制和管理系统资源
3.系统虚拟化的优点
(1)硬件无关性
虚拟机与底层硬件之间是虚拟化层,其与底层硬件之间并没有直接的联系。所以只要另一台计算机提供相同的虚拟硬件抽象层,一个虚拟机就可以无缝地进行迁移
(2)隔离性
使用虚拟机,应用软件可以独立地在虚拟机上运行,不受其他虚拟机的影响。即使其他的虚拟机崩溃,也可以正常运行。这种隔离性的好处是:可以在一台物理机虚拟出的多台虚拟机上进行不同的操作,相互之间没有影响
(3)多实例
在一台物理机上可以运行多台虚拟机,而一台虚拟机上又可以安装多个操作系统。不同的虚拟机的繁忙、空闲时间又不同,这样虚拟机交错使用物理计算机的硬件资源,资源利用率比较高
(4)特权功能
系统虚拟化的虚拟化层是在本地硬件与虚拟机之间,其将下层的资源抽象成另一种形式的资源,提供给上层的虚拟机使用
虚拟化层拥有更高的特权体现在:虚拟化层中添加的功能不需要了解客户机的具体语义,实现起来更加容易,并且添加的功能具有较高的特权级,不能被客户机绕过

3.3.1 服务器虚拟化

系统虚拟化的最大价值在于服务器虚拟化。服务器虚拟化是将系统虚拟化技术应用于服务器上,将一台或多台服务器虚拟化为若干台服务器使用。现在,数据中心大部分使用的是x86服务器。一个数据中心可能有成千上万台x86服务器。以前,出于性能、安全等方面的考虑,一台服务器只能执行一个服务,导致服务器利用率低下。服务器虚拟化是在一台物理服务器上虚拟出多个虚拟服务器,每个虚拟服务器执行一项任务。这样的话,服务器的利用率相对较高
1.服务器虚拟化的分类
服务器虚拟化按虚拟的服务器台数可以分为以下3种类型
(1)将一台服务器虚拟成多台服务器,即将一台物理服务器分割成多个相互独立、互不干扰的虚拟环境
(2)服务器整合,就是多个独立的物理服务器虚拟为一个逻辑服务器,使多台服务器相互协作,处理同一个业务
(3)服务器先整合、再切分,就是将多台物理服务器虚拟成一台逻辑服务器,然后再将其划分为多个虚拟环境,即多个业务在多台虚拟服务器上运行
2.服务器虚拟化所需的技术
物理服务器有其不可缺少的关键部件,如CPU、I/O等。服务器虚拟化的关键技术是对CPU、内存、I/O硬件资源的虚拟化。
(1)CPU虚拟化
CPU虚拟化技术是把物理CPU抽象成虚拟CPU,任意时刻一个物理CPU只能运行一个虚拟CPU指令。每个客户操作系统可以使用一个或多个虚拟CPU。在这些客户操作系统之间,虚拟CPU的运行相互隔离,互不影响
(2)内存虚拟化
内存虚拟化是对宿主机的真实物理内存统一管理,虚拟化成虚拟的物理内存,然后分别供若干个虚拟机使用,使得每个虚拟机拥有各自独立的内存空间
对于真实的操作系统而言,内存是从物理地址0开始的,且是连续的,至少在一些大粒度上是连续的。在虚拟化中,所有的客户操作系统可能会同时使用起始地址是0的物理内存,为了满足所有的客户操作系统的起始物理地址都是0且它们内存地址的连续性,VMM引入了一层新的地址空间—客户机物理地址空间
虚拟机监视器(VMM)通过虚拟机内存管理单元(Memory Management Unit,MMU)来管理虚拟机内存,即其负责分配和管理每个虚拟机的物理内存
客户机操作系统看到的是一个虚拟的物理内存地址空间(即客户机物理地址空间),不再是真正的物理内存地址空间
有了客户机物理地址空间就形成了两层地址映射即应用程序所对应的客户机虚拟地址空间到客户机物理地址的映射,客户机物理地址到宿主机物理地址的映射
前一种映射是由客户机操作系统完成的,后一种是由VMM通过动态地维护镜像页表来管理的
(3)I/O虚拟化
在一台虚拟机上可以安装多个操作系统,这些客户操作系统都会对外设资源进行访问。但是,外设资源是有限的,为了使所有的客户操作系统都能访问外设资源,虚拟机监视器需通过I/O虚拟化的方式复用有限的外设资源。此时,VMM截获客户操作系统对外设的访问请求,然后通过软件的方式模拟真实外设的效果。但并不要求完整地虚拟化出所有外设的所有接口
在I/O设备中有一种比较特殊的设备—网卡。网卡除了和一般的I/O设备一样作为虚拟机的共享设备外,还要解决虚拟机与外部网络或者虚拟机相互之间的通信问题。
网卡虚拟化技术主要分为两类:虚拟网卡技术和虚拟网桥技术。
虚拟网卡是指虚拟机中的网卡,是通过软件的方法模拟网络环境
虚拟网桥是指利用软件方法实现的网桥其作用是在一台服务器中,使多块共享一块物理网卡的虚拟网卡对外表现为多块独立的网卡

3.3.2 桌面虚拟化

桌面虚拟化依赖于服务器虚拟化,直观上来说就是将计算机的桌面进行虚拟化,是将计算机的桌面与其使用的终端设备相分离
桌面虚拟化为用户提供部署在云端的远程计算机桌面环境,用户可以使用不同的终端设备通过网络来访问该桌面环境,即在虚拟桌面环境服务器上运行用户所需要的操作系统和应用软件
桌面虚拟化的应用软件安装在云端服务器上,即使本地服务器上没有应用软件,用户依然可以通过虚拟桌面来访问相关的应用
1.桌面虚拟化的优势
(1)更灵活的访问和使用
传统的计算机桌面,需要在特定的设备上使用,例如,某用户的计算机桌面上安装了PhotoShop软件,若要使用,只能用自己的那台计算机。
虚拟桌面不是本人直接安装在设备上,而是部署在远程服务器上的。任何一台满足接入要求的终端设备在任何时间、任何地点都可以进行访问。例如,拥有虚拟桌面的用户,在上班的时候可以使用单位提供的瘦客户端设备来访问虚拟桌面,在出行的路上可以使用智能手机、平板计算机上安装的客户端软件来访问虚拟桌面,更加方便、快捷。
(2)更低的用户终端配置
虚拟桌面部署在远程服务器上,所有的计算都在远程服务器上进行,而终端设备主要是用来显示远程桌面内容。
所以,终端设备没有必要拥有与远程服务器相似的配置,对其配置要求更低、维护相对而言也更加容易。
(3)更便于集中管控终端桌面
虚拟桌面并不是没有自己的个人桌面,其完全可以与本地的个人桌面同时存在,两者可以互不干扰。
使用虚拟桌面,运行商将所有的桌面管理放在后端的数据中心中,数据中心可以对桌面镜像和相关的应用进行管理、维护。而终端用户不用知道具体的管理和维护,就可以使用经过维护后的桌面。
(4)更高的数据安全性
用户在虚拟桌面上所做的应用是在后台的数据中心中执行的,所产生的数据也存储在数据中心,并没有存储在用户的终端设备上。从而,用户终端设备的损坏对数据没有影响。
此外,由于传统的物理桌面会接入内部网,一旦一个终端感染病毒,就可能殃及整个内部网络。而虚拟桌面的镜像文件受到感染,受影响的只是虚拟机,能很快地得到清除和恢复。
(5)更低的成本
虚拟桌面简化了用户终端,用户可以选择配置相对较低的终端设备,从而节省购买成本。
传统的每台计算机上都要有一个桌面环境。而且这些计算机分布在世界各地。管理起来比较困难,管理成本也比较高。
而虚拟桌面及其相关应用的管理和维护都是在远程服务器端运行的,成千上万的用户可以使用同一个虚拟桌面,从而降低了管理和维护的成本。
2.虚拟桌面的解决方案
用户开始使用桌面已经很多年了,最先是在自己的计算机上使用,现在已经形成了***基于虚拟桌面基础架构(VDI)基于服务器计算技术(SBC)***两种技术解决方案,这两种技术方案都是一种端到端的桌面管理解决方案
在这里插入图片描述
(1)基于VDI的虚拟桌面解决方案

基于VDI的虚拟桌面解决方案是基于服务器虚拟化的,拥有服务器虚拟化的所有优点
其原理是在远程数据中心的服务器上安装虚拟机并在其中部署用户所需要的操作系统及操作系统上的各种应用,此时虚拟桌面就是虚拟机上的操作系统及其上的各种应用。然后通过桌面显示协议将完整的虚拟桌面交付给终端用户使用。终端用户通过一对一的方式连接和控制运行在远端服务器上的实例

桌面显示协议是指在远程桌面与终端之间所使用的通信协议,用于键盘等输入设备、显示设备等与桌面信息之间的数据传输。
桌面显示协议是桌面虚拟化软件的核心部件。当前主流的显示协议包括RDP(Remote Desktop Protocol)、PCoIP、SPICE、ICA等。

(2)基于SBC的虚拟桌面解决方案

基于SBC的虚拟桌面解决方案的原理是在数据中心内的物理机上直接安装、运行操作系统和应用软件,此时的桌面就是服务器上的物理桌面。用户通过和服务器建立的会话对服务器桌面及相关应用进行访问和操作
这类解决方案在服务器上部署的操作系统是必须支持多用户多会话的,并且允许多个用户共享操作系统桌面。同时,用户会话产生的输入/输出数据被封装为桌面交付协议格式在服务器和客户端之间传输

3.3.3 网络虚拟化
  • 网络虚拟化一般是指虚拟专用网。虚拟专用网对网络连接进行了抽象,远程用户可以像物理连接在组织内部网络的用户一样来访问该网络
    虚拟专用网络是通过一个公用网络建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定隧道。使用这条隧道可以对数据进行几倍加密达到安全使用互联网的目的。虚拟专用网可以保护网络环境,使用户能够快捷、安全地访问组织内部的网络
  • 网络虚拟化还有另外一种形式—虚拟局域网
    虚拟局域网能把一物理局域网中的节点在逻辑上划分为多个虚拟局域网,或者是把多个物理局域网中的节点划分到一个虚拟局域网中
    每一个虚拟局域网都有一组相同需求的计算机工作站,其工作方式与物理局域网类似
    虚拟局域网增强了网络安全和网络管理。如,在同一个虚拟局域网中的计算机工作站之间的通信与直接在独立的交换机上运行是一样的,虚拟局域网中的广播只有虚拟局域网中的计算机工作站才能收到,控制了不必要的广播风暴的产生

第四章 集群系统基础

当前云计算技术领域存在两个主要技术路线,一个是基于集群技术的云计算资源整合技术,另一个是基于虚拟机技术的云计算资源切分技术
基于集群技术的云计算资源整合技术路线将分散的计算和存储资源整合输出,主要依托的技术为分布式计算技术。集群技术从传统的高性能计算逐步走向云计算和大数据领域,集群架构是当前高性能计算的主流架构,然而无独有偶,集群架构也是大数据领域技术的主流架构,大数据可以认为是面向计算的高性能计算技术,集群技术是大数据系统的重要技术。

4.1 集群系统的基本概念
  • 集群系统是一组独立的计算机(节点)的集合体,节点间通过高性能的互联网络连接,各节点除了作为一个单一的计算资源供交互式用户使用外,还可以协同工作,并表示为一个单一的、集中地计算资源,供并行计算任务使用。集群系统是一种造价低廉、易于构建并且具有较好可扩放性的体系结构。
  • 集群系统发展迅速的原因:
    1.作为集群节点的工作站系统的处理性能越来越强大,更快的处理器和更高效的多CPU机器将大量进入市场;
    2.随着局域网上新的网络技术和新的通信协议的引入,集群节点间的通信能获得更高的带宽和较小的延迟
    3.集群系统比传统的并行计算机更易于融合到已有的网络系统中去;
    4.集群系统上的开发工具更成熟,而传统的并行计算机上缺乏一个统一的标准;
    5.集群系统价格便宜并且易于构建;
    6.集群系统的可扩放性良好,节点的性能也很容易通过增加内存或改善处理器性能获得提高。
  • 集群系统重要特征:
    1.集群系统的各节点都是一个完整的系统,节点可以是工作站,也可以是PC或SMP器;
    2.互联网络通常使用商品化网络,如以太网、FDDI、光纤通道和ATM开关等,部分商用集群系统也采用专用网络互联
    3.网络接口与节点的I/O总线松耦合相连;
    4.各节点有一个本地磁盘
    5.各节点有自己的完整的操作系统
  • 集群系统作为一种可扩放并行计算体系,与SMP(对称多处理结构 一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统)、MPP(大规模并行处理结构 将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果)体系具有一定的重叠性,三者之间的界限是比较模糊的,有些MPP系统如IBM SP2,采用了集群技术,因此也可以把它划归为集群系统。
    在这里插入图片描述
    1.MPP通常是一种无共享的体系结构,节点可以有多种硬件构成方式,不过大多数只有主存和处理器
    2.SMP可以认为是一种完全共享的体系结构,所有的处理器共享所有可用的全局资源(总线、内存和I/O等)
    3.对于集群来说,集群的节点复杂度通常比MPP高,因为各集群节点都有自己的本地磁盘和完整的操作系统
    4.MPP的节点通常没有磁盘,并且可以只是使用一个微内核(提供操作系统核心功能的内核的精简版本),而不是一个完整的操作系统
    5.SMP服务器则比一个集群节点要复杂,因为它有更多的外设终端,如终端、打印机和外部RAID等
    6.DSM表示分布式共享内存
  • 集群系统的设计中要考虑5个关键问题:
    (1)可用性:如何充分利用集群系统中的冗余资源,使系统在尽可能长的时间内为用户服务。集群系统有一个可用性的中间层,它使集群系统可以提供检查点、故障接管、错误恢复以及所有节点上的容错支持等服务。
    (2)单一系统映像SSI:集群系统与一组互联工作站的区别在于,集群系统可以表示为一个单一系统。集群系统中也有一个单一系统映像的中间层,它通过组合各节点上的操作系统提供对系统资源的统一访问。
    (3)作业管理:因为集群系统需要获得较高的系统使用率,集群系统上的作业管理软件需要提供批处理、负载平衡、并行处理等功能。
    (4)并行文件系统PFS:由于集群系统上的许多并行应用要处理大量数据,需进行大量的I/O操作,而这些应用要获得高性能,就必须要有一个高性能的并行支持文件。
    (5)高效通信:集群系统比MPP机器更需要一个高效的通信子系统,因为集群系统有以下几点:节点复杂度高,耦合不可能像MPP那样紧密,节点间的连接线路比较长,带来了较大的通信延迟等问题。
4.2 集群系统的分类

传统的集群系统可以分为4类:
(1)高可用性集群系统
高可用性集群系统通常通过备份节点的使用来实现整个集群系统的高可用性,活动节点失效后备份节点自动接替失效节点的工作。高可用性集群系统就是通过节点冗余来实现的,一般这类集群系统主要用于支撑关键性业务的需要,从而保证相关业务的不间断服务。
(2)负载均衡集群系统
负载均衡集群系统中所有节点都参与工作,系统通过管理节点(利用轮询算法、最小负载优先算法等调度算法)或利用类似一致性哈希等负载均衡算法实现整个集群系统系统内负载的均衡分配。
(3)高性能集群系统
高性能集群系统主要是追求整个集群系统系统计算能力的强大,其目的是完成复杂的计算任务,在科学计算中常用的集群系统就是高性能集群系统系统,目前物理、生物、化学等领域有大量的高性能集群系统提供服务。
(4)虚拟化集群系统
在虚拟化技术得到广泛使用后,人们为了实现服务器资源的充分利用和切分,将一台服务器利用虚拟化技术分割为多台独立的虚拟机使用,并通过管理软件实现虚拟资源的分配和管理。这类集群系统称为虚拟集群系统,其计算资源和存储资源通常是在一台物理机上。利用虚拟化集群系统可以实现虚拟桌面技术等云计算的典型应用。

目前基于集群系统结构的云计算系统往往是几类集群系统系统的综合,集群系统式云计算系统既需要满足高可用性的要求又尽可能地在节点间实现负载均衡,同时也需要满足大量数据的处理任务。
所以像Hadoop、HPCC这类云计算大数据系统中前三类集群系统的机制都存在。
而在基于虚拟化技术的云计算系统中采用的往往是虚拟化集群系统。

4.3 单一系统映射

云计算系统需要将计算资源和存储资源形成一个统一的资源池,目前基于集群系统技术的云计算系统如Hadoop等,从使用者来看并不需要了解集群系统的具体结构,也不需要分别对集群系统中的每一个节点进行操作,系统对外都有一个统一的接口,这就是单一系统映像技术

  • 单一系统映像的好处:
    (1)终端用户不需要了解应用在哪些节点上运行;
    (2)操作员不需要了解资源所在地位置;
    (3)降低了操作员错误带来的风险,使系统对终端用户表现出更高的可靠性和可用性;
    (4)可灵活采用集中式或分布式的管理或控制,避免了对系统管理员的高需求;
    (5) 大大简化了系统的管理,一条命令就可以对分布在系统中的多个资源进行操作;
    (6)提供了位置独立的消息通信。
  • 单一系统映像相关定义
    (1)单一系统
    尽管系统中有多个处理器,用户依然把整个集群系统视为一个单一的系统来使用
    (2)单一控制
    逻辑上,最终用户或系统用户使用的服务都来自只有惟一接口的同一个地方,例如,一个用户将批处理作业提交到一个队列集,系统管理员就可以从一个单一的控制点配置集群系统的所有软、硬件组件。
    (3)对称性
    用户可以从任一个节点上获得集群服务,也就是说,对于所有的节点和所有的用户,除了那些对一般访问权限作保护的服务和功能外,所有的集群服务和功能性都是对称的。
    (4)位置透明
    用户不用了解真正执行服务的物理设备位置。
4.4Beowulf集群

Beowulf集群是一种用作并行计算的集群架构,通常是由一台主节点和一台以上的子节点通过以太网或其他网络连接的系统,它采用市面上可以购买的普通硬件(例如装有Linux的PC)、标准以太网卡和交换机,它不包含任何特殊的硬件设备,可以重新组建。

  • Beowulf系统的特点
    (1)Beowulf系统通常由一个管理节点和多个计算节点构成。它们通过以太网(或其他网络)连接。管理节点监控计算节点,通常也是计算节点的网关和控制终端。当然它通常也是集群系统文件服务器。在大型的集群系统中,由于特殊的需求,这些管理节点的功能也可能由多个节点分摊。
    (2)Beowulf系统通常由最常见的硬件设备组成,例如,PC、以太网卡和以太网交换机。Beowulf系统很少包含用户定制的特殊设备。
    (3)Beowulf系统通常采用廉价且广为传播的软件,例如,Linux操作系统、并行虚拟机(PVM)和消息传递接口(MPI)。
    在这里插入图片描述
4.5 集群文件系统
4.5.1 集群文件系统概念

集群文件系统存储数据时并不是将数据放置于某一个节点存储设备上,而是将数据按一定的策略分布式地放置于不同物理节点的存储设备上
集群文件系统将系统中每个节点上的存储空间进行虚拟的整合,形成一个虚拟的全局逻辑目录,集群文件系统在进行文件存取时依据逻辑目录按文件系统内在的存储策略与物理存储位置对应,从而实现文件的定位。
集群文件系统相比传统的文件系统要复杂,它需要解决在不同节点上的数据一致性问题及分布式锁机制等问题,所以集群文件系统一直是云计算技术研究的核心内容之一。

  • 在云计算系统采用集群文件系统优点:
    (1)由于集群文件系统自身维护着逻辑目录和物理存储位置的对应关系,集群文件系统是很多云计算系统实现计算向数据迁移的基础。利用集群文件系统可以将计算任务在数据的存储节点位置发起,从而避免了数据在网络上传输所造成的拥塞。
    (2)集群文件系统可以充分利用各节点的物理存储空间,通过文件系统形成一个大规模的存储池,为用户提供一个统一的可弹性扩充的存储空间。
    (3)利用集群文件系统的备份策略、数据切块策略可以实现数据存储的高可靠性以及数据读取的并行化,提高数据的安全性和数据的访问效率。
    (4)利用集群文件系统可以实现利用廉价服务器构建大规模高可靠性存储的目标,通过备份机制保证数据的高可靠性和系统的高可用性。
4.5.2 典型的集群文件系统Lustre

Lustre存储系统是高性能分布式存储领域中最为著名的系统之一,在全球,有过半的超级计算中心使用Lustre存储系统,随着Lustre存储系统的发展,越来越多的中大型计算中心和集成平台都在采用Lustre存储系统。
元数据:管理数据的数据

  • Lustre存储系统的优点
    1.通过接口提供高性能传输的数据共享,具备并行访问的能力,在数据高并发交互时,系统能对上传、下载的数据操作进行负载均衡,Lustre存储系统采用双网分离的方式和分布式的锁管理机制来实现并发控制,元数据所走的网络和文件数据传输的所走的网络不同,元数据的VFS(存储数据的逻辑视图)部分通常是元数据服务器10%的负载,剩下的90%工作由分布在各个节点的数据所在服务器完成。
    2.Lustre存储系统能够在不影响现行网络的情况下弹性扩充系统的存储容量,还能增加节点数来扩充网络带宽,具备灵活的扩展性。
    3.在发生访问故障时,Lustre还能对元数据进行切换,具备访问的稳定可靠性,Lustre系统中可以拥有两个元数据服务器,采用Active-Standby(主备方式,指一台服务器处于某种业务的激活状态时,即Active状态时,另一台服务器处于该业务的备用状态,即Standby状态)的机制,当一台服务器坏掉时,马上切换到另外一个备份服务器。
    4.提供相对健全的接口给用户进行二次开发,以满足不同需求的项目,例如一个在线网盘存储的项目就可以通过Lustre存储系统提供的接口进行上层开发,网盘系统里所有用户所存储的文件都最终存储在Lustre存储系统中,而对于用户来说则是透明的,用户只需面对网盘系统的视图,同时Lustre存储系统本身属于开源项目,对有条件的技术工程师来说,可以进行改造并加以优化。
  • Lustre存储系统的缺点
    1.与其他很多能支持多操作系统平台安装部署的开源系统不同,Lustre存储系统只能部署在Linux操作系统上,其核心程序很依赖Linux操作系统的内核和底层文件操作方法。
    2.对于存储系统来说,节点之间的故障是一个常见的问题,存储系统要考虑节点间故障时如何快速恢复正常。Lustre在遇到这样的故障时,恢复正常势必要进行切换,切换的条件则需依赖于第三方的心跳技术(heartbeat),heartbeat包含心跳监测和资源接管两个核心模块,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务。
    3.最重要的一点,Lustre存储系统本身不具备数据自备份的能力,也就意味着使用Lustre存储系统作为存储方案时,在系统开发之前,一定要规划一套在其上层开发的存储备份方案,也就是在写入Lustre存储资源池的同时,要通过上层软件再把数据写一份到其他存储资源池来备用。
  • Lustre存储系统的组成
    (1)元数据服务器
    元数据服务器(Metadata Server,MDS)负责管理文件系统的基本信息,负责管理整个系统的命名空间,维护整个文件系统的目录结构、用户权限,并负责维护文件系统数据的一致性。
    通过MDS的文件和目录访问管理,Lustre能够控制客户端对文件系统中文件和目录的创建、删除、修改。
    Client可以通过MDS读取保存到元数据存储节点 (MDT,Metadata Target,MDT)上的元数据。当Client读写文件时,从MDS得到文件信息,从OSS中得到数据。Client通过LNET协议和MDS/OSS通信。
    在Lustre中,MDS可以有两个,采用Active-Standby的容错机制,当其中一个MDS不能正常工作时,另外一个后备MDS可以启动服务。
    (2)元数据存储节点
    元数据存储节点(Metadata Target,MDT)负责存储元数据服务器所要管理的元数据的文件名、目录、权限和文件布局,一个文件系统有且只能有一个MDT,不同的MDS之间共享同一个MDT。
    (3)对象存储服务器
    对象存储服务器(Object Storage Servers,OSS)提供针对一个或多个的本地OST网络请求和文件I/O服务,OST、MDT和Client可以同时运行在一个节点。但是典型的配置是一个MDT专用一个节点,每个OSS节点可以有两个或多个OST,一个客户端可以有大量的计算节点。
    (4)对象存储节点
    OST(Object Storage Target,OST)负责实际数据的存储,处理所有客户端和物理存储之间的交互。这种存储是基于对象的,OST将所有的对象数据放到物理存储设备上,并完成对每个对象的管理。
    OST和实际的物理存储设备之间通过设备驱动方式来实现交互。通过驱动程序的事件响应,Lustre能继承新的物理存储技术及文件系统,实现对物理存储设备的扩展。
    为了满足高性能计算系统的需要,Lustre针对大文件的读写进行优化,为集群系统提供较高的I/O吞吐率。Lustre将数据条块化,再把数据分配到各个存储服务器上,以提供比传统SAN的“块共享”更为灵活和可靠的共享方式。
    (5)客户端
    客户端(Client)通过标准的POSIX接口向用户提供对文件系统的访问。
    对客户端而言,客户端同OST进行文件数据的交互,包括文件数据的读写、对象属性的改动等;同MDS进行元数据的交互,包括目录管理、命名空间管理等。
    存储设备是基于对象的智能存储设备,与基于块的IDE存储设备不同。客户端在需要访问文件系统的文件数据时,先访问MDS,获取文件相关的元数据信息,然后就直接和相关的OST通信,获取文件的实际数据。
    客户端通过网络读取服务器上的数据,存储服务器负责实际文件系统的读写操作以及存储设备的连接,元数据服务器负责文件系统目录结构、文件权限和文件的扩展属性以及维护整个文件系统的数据一致性和响应客户端的请求。
4.6 分布式系统中计算和数据的协作机制
4.6.1 基于计算切分的分布式计算

基于消息传递机制的并行计算技术MPI (Message-Passing Interface)帮助工作站集群和Beowulf集群实现强大的计算能力,提供了灵活的编程机制。
MPI将大量的节点通过消息传递机制连接起来,从而使节点的计算能力聚集成为强大的高性能计算,主要面向计算密集的任务。
MPI提供API接口,通过MPI_Send()和MPI_Recv()等消息通信函数实现计算过程中数据的交换。
高性能计算是一种较为典型的面向计算的系统,通常处理的是计算密集型任务,因此在基于MPI的分布式系统中并没有与之匹配的文件系统支持,计算在发起前通过NFS等网络文件系统从集中的存储系统中读出数据并用于计算
在这里插入图片描述
如图,典型的利用MPI实现的分布式计算系统在发起计算时实际上是首先将计算程序由主节点通过NFS等网络共享文件系统分发到各子节点内存启动计算,由于没有分布式文件系统的支持,MPI一般不能直接从节点存储设备上读取数据,计算程序在子节点发起后只有通过网络共享文件读取需要处理的数据来进行计算,在这里数据和计算程序一般都是被集中存储在阵列等专门的存储系统中
这一过程并没有计算寻找数据的过程,计算程序只是按设计要求先被分发给了所有参与计算的节点。在进行MPI并行程序设计时,程序设计者需要事先将计算任务本身在程序中进行划分,计算程序被分配到节点后根据判断条件启动相应的计算工作,计算中需要进行节点间的数据交换时通过MPI提供的消息传递机制进行数据交换。
由于CPU的运行速度远远大于网络数据传输的速度,通常希望不同节点间的任务关联性越小越好,在MPI的编程实践中就是“用计算换数据通信”的原则,使系统尽可能少地进行数据交换。MPI的消息传递机制为计算的并行化提供了灵活的方法,但目前对于任意问题的自动并行化并没有非常有效的方法,因此计算的切分工作往往需要编程人员自己根据经验来完成,这种灵活性是以增加编程的难度为代价的。
MPI的基本工作过程可以总结为:切分计算,注入程序,启动计算,读取数据
MPI虽然是典型的面向计算的分布式系统,但它也有类似于后来Google系统中的MapReduce能力,如MPI提供MPI_Reduce()函数实现Reduce功能,只是没有像GFS的分布式文件系统的支持,MPI的Reduce能力是相对有限而低效的,并不能实现计算在数据存储位置发起的功能。

  • 通常将MPI这样以切分计算实现分布式计算的系统称为基于计算切分的分布式计算系统。
    这种系统计算和存储的协作是通过存储向计算的迁移来实现的,也就是说系统先定位计算节点再将数据从集中存储设备通过网络读入计算程序所在的节点,在数据量不大时这种方法是可行的,但对于海量数据读取这种方式会很低效。
4.6.2 基于计算和数据切分的混合型分布式计算技术——网格计算

网格技术:将分布在世界各地的大量异构计算设备的资源整合起来,构建一个具有强大计算能力的超级计算系统。
在这里插入图片描述
如图,网格系统往往事先会将计算程序以某种形式安装(如屏幕保护程序)在异构计算终端服务器上,用于监控计算终端的工作状态,当计算终端空闲时就会启动计算程序对数据进行处理,网格服务器则负责切分数据向计算终端分发数据并汇总计算结果。*** ***
在这种系统结构下计算和数据的协作机制是通过数据来寻找计算实现的,即在网格中移动的主要是数据而不是计算,这种情况在数据量较小时是容易实现的,但如果需要处理的数据量很大这种以迁移数据为主的方法就显得很不方便了。
在网格系统中计算是先于数据到达计算终端的,这与MPI十分相似,数据是由计算程序主动发起请求获得,从而实现计算和数据的一致性。总的来看网格系统既具有面向数据系统中切分数据来实现分布式计算的思想,又具有面向计算的系统中计算向数据迁移的特征,所以典型的网格系统是一种既有面向数据又有面向计算特征的混合系统,完成的任务主要还是计算密集的需要高性能计算的任务,应用领域主要是在科学计算等专业的领域。

4.6.3 基于数据切分的分布式计算技术

基于数据切分实现分布式计算的方法在面向计算时代也被经常使用,被称为数据并行(data parallel)方法,但在面向计算时代真正的问题在于计算和数据之间只是简单的协作关系,数据和计算事实上并没有很好地融合,计算只是简单读取其需要处理的数据而已,系统并没有太多考虑数据的存储方式、网络带宽的利用率等问题。
通过数据切分实现计算的分布化是面向数据技术的一个重要特征,2003年Google逐步公开了它的系统结构,Google的文件系统GFS实现了在文件系统上就对数据进行了切分,这一点对利用MapReduce实现对数据的自动分布式计算非常重要,文件系统自身就对文件施行了自动的切分完全改变了分布式计算的性质,MPI、网格计算都没有相匹配的文件系统支持,从本质上看数据都是集中存储的,网格计算虽然有数据切分的功能,但只是在集中存储前提下的切分。具有数据切分功能的文件系统是面向数据的分布式系统的基本要求。
与MPI不同,这种框架通常不是拆分计算来实现分布式处理,而是通过拆分数据来实现对大数据的分布式处理,MapReduce框架中分布式文件系统是整个框架的基础如图4.5所示,
在这里插入图片描述
这一框架下的文件系统一般将数据分为64MB的块进行分布式存放,需要对数据进行处理时将计算在各个块所在的节点直接发起,避免了从网络上读取数据所耗费的大量时间,实现计算主动“寻找”数据的功能,大大简化了分布式处理程序设计的难度。
在这里数据块被文件系统预先切分是MapReduce能自动实现分布式计算的重要前提,系统通过主节点的元数据维护各数据块在系统中存储的节点位置,从而使计算能有效地找到所需要处理的数据。MapReduce这种大块化的数据拆分策略非常适合对大数据的处理,过小的数据分块会使这一框架在进行数据处理时的效率下降。
MapReduce框架使计算在集群节点中能准确找到所处理的数据所在节点位置的前提是所处理的数据具有相同的数据类型和处理模式,从而可以通过数据的拆分实现计算向数据的迁移,事实上这类面向数据系统的负载均衡在其对数据进行分块时就完成了,系统各节点的处理压力与该节点上的数据块的具体情况相对应,因MapReduce框架下某一节点处理能力低下可能会造成系统的整体等待形成数据处理的瓶颈。
在MapReduce框架下节点服务器主要是完成基本的计算和存储功能,因此可以采用廉价的服务器作为节点,这一变化改变了人们对传统服务器的看法。2005年Apache基金会以Google的系统为模板启动了Hadoop项目,Hadoop完整地实现了上面描述的面向数据切分的分布式计算系统,对应的文件系统为HDFS,Hadoop成为了面向数据系统的一个被广泛接纳的标准系统。

数据分析技术是基于数据切分的分布式系统的研究热点。对类似于Web海量数据的分析需要对大量的新增数据进行分析,由于MapReduce框架无法对以往的局部、中间计算结果进行存储,MapReduce框架只能对新增数据后的数据集全部进行重新计算,以获得新的索引结果,这样的计算方法所需要的计算资源和耗费的计算时间会随着数据量的增加线性增加。
迭代操作是PageRank、K-means等Web数据分析的核心操作,MapReduce作为一种通用的并行计算框架,其下一步迭代必须等待上一步迭代完成并把输出写入文件系统才能进行,如果有终止条件检查也必须等待其完成。
同时,上一步迭代输出的数据写入文件系统后马上又由下一步迭代读入,导致了明显的网络带宽、I/O、CPU时间的浪费。
Twister对MapReduce的任务复用、数据缓存、迭代结束条件判断等进行调整以适合迭代计算,但其容错机制还很欠缺。
Pregel是Google提出专用于解决分布式大规模图计算的计算模型,非常适合计算如FaceBook等社交关系图分析,其将处理对象看成是连通图,而MapReduce将处理对象看成是Key-Value对;Pregel将计算细化到顶点,而MapReduce将计算进行批量化,按任务进行循环迭代控制。

4.6.4 三种分布式系统的分析对比

其中混合型分布式系统是发展过程中的一个中间阶段,它同时具有面向计算和面向数据的特征,如混合型系统中也存在数据拆分这类面向数据系统的典型特征,但却是以集中式的存储和数据向计算迁移的方式实现计算和数据的位置一致性。
对于面向数据的分布式系统往往有对应的分布式文件系统的支持,从文件存储开始就实现数据块的划分,为数据分析时实现自动分布式计算提供了可能,计算和数据的协作机制在面向数据的系统中成为了核心问题,其重要性凸现出来。
在这里插入图片描述

第五章 MPI——面向计算

5.1 MPI

MPI (Message Passing Interface,消息传递接口)
MPI标准描述是是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准,MPI本身并不是一个具体的实现,而只是一种标准描述,MPI库可以被FORTRAN77/C/Fortran90/C++调用。
消息传递机制使服务器之间能有机的结合在一起形成一个更大的计算资源池,通过消息通信机制服务器之间能进行数据交换从而实现对计算任务的相互协作。

5.2 MPI的架构和特点

云计算的定义中计算资源池的形成是十分重要的一项技术,MPI的核心工作就是实现大量服务器计算资源的整合输出,MPI为分布式程序设计人员提供了最大的灵活性和自由度,但随之而来的代价是编程的复杂性程序设计人员需要自己实现任务在节点中的分配,并保证节点间的协调工作,当面对上千个节点的分布式系统时这种编程模式会成为程序员的噩梦。
目前MPI的应用领域主要还是科学计算领域,但这种分布式计算机制却在后来的云计算系统中得到了或多或少的体现。
MPI具有以下的特点:
(1)程序编写灵活,功能强大。
MPI为分布式程序设计人员提供了功能强大的消息通信函数,如阻塞通信、非阻塞通信、组通信、归约、自定义数据类型等。程序设计人员能在上面较为灵活的实现算法的并行化工作。
(2)能支持多种编程语言。
MPI目前能支持FORTRAN77/C/Fortran90/C++等语言的调用,能满足大多数科学计算的应用需要。
(3)MPI对计算的支持强大,但对文件的支持较弱。
MPI设计的初衷就是为了计算密集的任务定制的,是面向计算时代的典型技术,其对计算的支持十分强大;
MPI自身没有与之相融合的分布式文件系统,数据在MPI中的存储主要是依靠NFS等集中存储设备,计算时各节点需要通过网络从集中存储设备上读取数据,在面对大数据处理时网络带宽会成为其严重的瓶颈。这就是我们常说的“数据向计算迁移”;
而Hadoop等云计算系统通常是“计算向数据迁移”,从而避免了网络瓶颈。
(4)MPI需要程序设计人员自己实现求解问题的并行化。
MPI并不为程序设计人员提供任何预设的程序并行化方案和模块,任何问题的并行化都需要程序设计人员自己来完成。任务切分和节点分配工作系统并不提供任何的监控系统支持,需要程序设计人员自己实现系统任务分配及负载的平衡。
(5)MPI没有提供计算失效的处理机制。
MPI并不为用户自动处理节点失效,如果在计算中出现节点失效问题需要重启计算任务。
(6)网络是MPI的主要瓶颈。
MPI的消息传递机制是通过网络进行传输的,通常网络的数据传输速度与CPU计算速度相比要慢很多,大量的消息传递会大大的降低程序的计算效率,而且集群规模越大这个问题越严重,在MPI的编程原则中甚至有“用计算换通信”的说法,即宁愿多算也要尽可能地减少消息通信。
所以在并行计算集群中往往会采用高速通信技术实现节点间的数据通信。

5.4 MPI分布式程序设计基础
5.4.1 最简单的并行程序
  1. MPI函数说明
    (1)并行初始化函数:int MPI_Init(int argc, char argv)
    参数描述: *argc为变量数目,*argv为变量数组,两个参数均来自main函数的参数。
  • MPI_Init()是MPI程序的第一个函数调用,标志着并行程序部分的开始,它完成MPI程序的初始化工作,所有MPI程序并行部分的第一条可执行语句都是这条语句。
  • 该函数的返回值为调用成功标志。
  • 同一个程序中MPI_Init()只能被调用一次。
  • 函数的参数为main函数的参数地址,所以并行程序和一般C语言程序不一样,它的main函数参数是不可缺少的,因为MPI_Init()函数会用到main函数的两个参数。
    (2)并行结束函数:int MPI_Finalize()
  • MPI_Finalize()是并行程序并行部分的最后一个函数调用,出现 该函数后表明并行程序的并行部分的结束。
  • 一旦调用该函数后,将不能再调用其他的MPI函数,此时程序将释放MPI的数据结构及操作。
  • 这条语句之后的代码仍然可以进行串行程序的运行。
  • 该函数的调用较简单,没有参数。

在这里插入图片描述
以上结果是在有两个节点的并行集群上运行的结果。本实例第一眼看上去和普通的C语言程序几乎一样,学过C语言的读者会感觉到相当的亲切和熟悉。不同的只是多了一个mpi.h的头文件,以及MPI_Init()和MPI_Finalize()这两个函数。程序虽然简单但它确实是一个真正的并行程序。
程序的运行结果证明了这一点:我们程序中只有一个打印语句,按照串行程序的结果将只有一行打印结果,然而现在却出现了两行“hello parallel world!”,这是我们的两个计算节点在向你表明,我们已经进入了并行计算世界了,主程序中的打印语句被每个节点都执行了一次,我们有两个节点所以打印了两行文字,它们分别来自于不同的节点。

在这里插入图片描述

  • 所有并行程序都必须是这样的结构,其中main函数的参数argc和argv分别为程序输入参数个数及输入参数数组,MPI_Init()函数中需对argc和argv取地址&argc、&argv,这个实例是并行程序的最小应用,MPI_Init()函数和MPI_Finalize()函数之间就是程序的并行部分,将在所有节点上获得执行
  • MPI的函数一般都是以MPI_开头,所以非常容易识别。
  • 所有的MPI并行程序必须包含mpi.h头文件,因为这一头文件定义了所有的MPI函数及相关常数。

这里是引用

5.4.2 获取进程标志和机器名
  • 并行程序设计需要协调大量的计算节点参与计算,而且需要将任务分配到各个节点并实现节点间的数据和信息交换,面对成百上千的不同节点如没有有效的管理将面临计算的混乱,并行计算的实现将无法完成;
  • 其次各个进程需要对自己和其他进程进行识别和管理,每个进程都需要有一个惟一ID,用于并行程序解决“我是谁”的问题,从而实现对大量计算节点的管理和控制,有效地完成并行计算任务。
  • 因此获取进程标识和机器名是MPI需要完成的基本任务,各节点根据自己的进程ID判断哪些任务需要自己完成。
  1. MPI函数说明
    (1)获得当前进程标识函数:
    int MPI_Comm_rank ( MPI_Comm comm, int *rank )
    参数描述:comm为该进程所在的通信域句柄;rank为调用这一函数返回的进程在通信域中的标识号
  • 这一函数调用通过指针返回调用该函数的进程在给定的通信域中的进程标识号rank,有了这一标识号,不同的进程就可以将自身和其他的进程区别开来,节点间的信息传递和协调均需要这一标识号。
  • 一般对于comm参数,我们采用MPI_COMM_WORLD通信域,MPI_COMM_WORLD是MPI提供的一个基本通信域,在这个通信域中每个进程之间都能相互通信,我们也可建立自己的子通信域,但在这里我们使用MPI默认的MPI_COMM_WORLD通信域。
    (2)获取通信域包含的进程总数函数:
    int MPI_Comm_size(MPI_Comm comm, int *size)
    参数描述:comm为通信域句柄,size为函数返回的通信域comm内包括的进程总数。
  • 这一调用返回给定的通信域中所包括的进程总个数,不同的进程通过这一调用得知在给定的通信域中一共有多少个进程在并行执行。
    (3)获得本进程的机器名函数:
    int MPI_Get_processor_name( char *name,int *resultlen)
    参数描述:name为返回的机器名字符串,resultlen为返回的机器名长度。
  • 这个函数通过字符指针name、整型指针resultlen返回机器名及机器名字符串的长度。
  • MPI_MAX_PROCESSOR_NAME为机器名字符串的最大长度,它的值为128。

这里是引用
在这里插入图片描述

  • 本实例程序启动后会在各个节点同时执行,各节点通过MPI_Comm_rank()函数取得自己的进程标识myid,不同的进程执行MPI_Comm_rank()函数后返回的值不同,如节点0返回的myid值为0;通过MPI_Comm_size()函数获得MPI_COMM_WORLD通信域中的进程总数numprocs,通过MPI_Get_processor_name()函数获得本进程所在的机器名。
  • 各进程调用自己的打印语句将结果打印出来,一般MPI中对进程的标识是从0开始的。
  • 在本例中机器名分别为wang1、wang2、wang3共3个节点。

在这里插入图片描述

5.4.3 有消息传递功能的并行程序
  1. MPI函数说明
    (1)消息发送函数
    int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)
    参数描述:buf为发送缓冲区的起始地址,count将发送的数据的个数,datatype 发送数据的数据类型;dest为目的进程标识号;tag为消息标志;comm为通信域。
  • MPI_Send()函数是MPI中的一个基本消息发送函数,实现了消息的阻塞发送,在消息未发送完时程序处于阻塞状态。
  • MPI_Send()将发送缓冲区buf中的count个datatype数据类型的数据发送到目的进程,目的进程在通信域中的标识号是dest,本次发送的消息标志是tag,使用这一标志就可以把本次发送的消息和本进程向同一目的进程发送的其他消息区别开来。
  • MPI_Send()操作指定的发送缓冲区是由count个类型为datatype的连续数据空间组成,起始地址为buf。
  • 注意,这里count的值不是以字节计数,而是以数据类型为单位指定消息的长度,这样就独立于具体的实现,并且更接近于用户的观点,发送10个MPI_FLOAT型的数据,则count应为10,而不是所占的字节数。其中datatype数据类型可以是MPI的预定义类型,也可以是用户自定义的类型,但不能直接使用C语言中的数据类型。
    在这里插入图片描述(2)消息接收函数:
    int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status)
    参数描述:buf为接收缓冲区的起始地址;count为最多可接收的数据个数;datatype为接收数据的数据类型;source为接收数据的来源进程标识号;tag为消息标识,应与相应发送操作的标识相匹配;comm为本进程和发送进程所在的通信域;status为返回状态。
  • MPI_Recv()是MPI中基本的消息接收函数,MPI_Recv()从指定的进程source接收消息,并且该消息的数据类型和消息标识和该接收进程指定的datatype和tag相一致,接收到的消息所包含的数据元素的个数最多不能超过count个。
  • 接收缓冲区是由count个类型为datatype的连续元素空间组成,由datatype指定其类型,起始地址为buf,count和datatype共同决定了接收缓冲区的大小,接收到的消息长度必须小于或等于接收缓冲区的长度,这是因为如果接收到的数据过大,MPI没有截断,接收缓冲区会发生溢出错误,因此编程者要保证接收缓冲区的长度不小于发送数据的长度。
  • 如果一个短于接收缓冲区的消息到达,那么只有相应于这个消息的那些地址被修改,count可以是零,这种情况下消息的数据部分是空的。
  • 其中datatype数据类型可以是MPI的预定义类型,也可以是用户自定义的类型,通过指定不同的数据类型调用MPI_Recv()可以接收不同类型的数据。
  • 消息接收函数和消息发送函数的参数基本是相互对应的,只是消息接收函数多了一个status参数,返回状态变量status用途很广,它是MPI定义的一个数据类型,使用之前需要用户为它分配空间。
  • 在C语言实现中,状态变量是由至少3个域组成的结构类型。这3个域分别是:MPI_SOURCE,MPI_TAG和MPI_ERROR。它还可以包括其他的附加域,这样通过对status.MPI_SOURCE、status.MPI_TAG和status.MPI_ERROR的引用就可以得到返回状态中所包含的发送数据进程的标识,发送数据使用的tag标识和该接收操作返回的错误代码。
5.4.4 Monte Carlo法在并行程序设计中应用

蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法,属于计算数学的一个分支,它是在20世纪40年代中期为了适应当时原子能事业的发展而发展起来的。主要思想是通过随机试验的方法,得到所要求解的问题(某种事件)出现的频率,用它们作为问题的解。
简而言之,就是用频率来代替概率,当实验样本足够大的时候,就可以得到比较精确的解结果。蒙特卡罗是一种充满了魅力的算法,我们往往可以以一种简单的方法实现许多复杂的算法,大量的智能算法中也都有蒙特卡罗算法的身影,由于采用了随机数,所以蒙特卡罗方法的并行化能力特别强,而且特别简单。
本节基于蒙特卡罗思想用MPI程序实现对值的并行求解,以展示蒙特卡罗算法的神奇魅力。
在这里插入图片描述

第六章 Hadoop——分布式大数据系统

Hadoop是由Apache软件基金会研发的一种开源、高可靠、伸缩性强的分布式计算系统,主要用于对大于1TB的海量数据的处理。
Hadoop采用Java语言开发,是对Google的MapReduce核心技术的开源实现。
目前Hadoop的核心模块包括系统HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)和分布式计算框架MapReduce,这一结构实现了计算和存储的高度耦合,十分有利于面向数据的系统架构,因此已成为大数据技术领域的事实标准

6.1 Hadoop概述

Hadoop与MPI在数据处理上的差异主要体现在数据存储与数据处理在系统中位置不同,MPI是计算与存储分离,Hadoop是计算向存储迁移
在这里插入图片描述
在MPI中数据存储的节点和数据处理的节点往往是不同的,一般在每次计算开始时MPI需要从数据存储节点读取需要处理的数据分配给各个计算节点对数据进行处理,因此MPI中数据存储和数据处理是分离的。
对于计算密集型的应用MPI能表现出良好的性能,但对于处理TB级数据的数据密集型应用由于网络数据传输速度很慢,MPI的性能会大大降低,甚至会到不可忍受的地步,所以对于构建在MPI上的并行计算系统网络通讯速度一直是一个重要的性能指标,用“计算换通信”也是MPI并行程序设计中的基本原则。
在Hadoop中由于有HDFS文件系统的支持,数据是分布式存储在各个节点的,计算时各节点读取存储在自己节点的数据进行处理,从而避免了大量数据在网络上的传递,实现“计算向存储的迁移”。

6.2 HDFS

Hadoop系统实现对大数据的自动并行处理,是一种数据并行方法,这种方法实现自动并行处理时需要对数据进行划分,而对数据的划分在Hadoop系统中从数据的存储就开始了,因此文件系统是Hadoop系统的重要组成部分,也是Hadoop实现自动并行框架的基础。Hadoop的文件系统称为HDFS(Hadoop Distributed File System)。

6.2.1 HDFS文件系统的原型GFS
  • Hadoop中的HDFS原型来自Google 文件系统(Google File System,GFS),为了满足Google迅速增长的数据处理要求,Google设计并实现了GFS。

  • Google文件系统是一个可扩展的分布式文件系统,用于对大量数据进行访问的大型、分布式应用。

  • 它运行于廉价的普通硬件上,但可以提供容错功能。它可以给大量的用户提供总体性能较高的服务,也可以提供容错功能。

  • 我们认为GFS是一种面向不可信服务器节点而设计的文件系统。

  • ***谷歌“三宝”是“Google文件系统”、“BigTable大表”、“MapReduce算法”,***有了自己的文件系统,谷歌就可以有效地组织庞大的数据、服务器和存储,并用它们工作。作为谷歌“三宝”的其中之一,GFS的技术优势不言而喻。

  • GFS为分布式结构,它是一个高度容错网络文件系统,主要由一个Master(主)和众多chunkserver(大块设备)构成的。
    在这里插入图片描述

  • GFS的工作过程
    (1)客户端使用固定大小的块将应用程序指定的文件名和字节偏移转换成文件的一个块索引,向Master发送包含文件名和块索引的请求。
    (2)Master收到客户端发来的请求,Master向块服务器发出指示,同时时刻监控众多chunkserver的状态。chunkserver缓存Master从客户端收到的文件名和块索引等信息。
    (3)Master通过和chunkserver的交互,向客户端发送chunk-handle和副本位置。其中文件被分成若干个块,而每个块都是由一个不变的、全局惟一的64位的chunk-handle标识。Handle是由Master在块创建时分配的。而出于安全性考虑,每一个文件块都要被复制到多个chunkserver上,一般默认3个副本。
    (4)客户端向其中的一个副本发出请求,请求指定了chunk handle(chunkserver以chunk handle标识chunk)和块内的一个字节区间。
    (5)客户端从chunkserver获得块数据,任务完成。

  • 通常Client可以在一个请求中询问多个chunk的地址,而Master也可以很快回应这些请求。

  • GFS是可以被多个用户同时访问的,一般情况下,Application和chunkserver是可以在同一台机子上的,主要的数据流量是通过Application和chunkserver之间,数据访问的本地性极大地减少了Application与Master之间的交互访问,减少了Master的负荷量,提高了文件系统的性能。

  • 客户端从来不会从Master读和写文件数据。客户端只是询问Master它应该和哪个 chunkserver联系。Client在一段限定的时间内将这些信息缓存,在后续的操作中客户端直接和chunkserver交互。由于Master对于读和写的操作极少,所以极大地减小了Master的工作负荷,真正提高了Master的利用性能。

  • Master保存着三类元数据(metadata):文件名和块的名字空间、从文件到块的映射、副本位置。所有的metadata都放在内存中。操作日志的引入可以更简单、更可靠地更新Master的信息。

  • 为GFS的控制和神经系统,副本为Master的备份,Chunk主要用来和用户交换数据。网络中的主机瘫痪,不会对整个系统造成大的影响,替换上去的主机会自动重建数据。即使Master瘫痪,也会有Shadow作为替补,并且Shadow在一定时候也会充当Master来提供控制和数据交换。Google每天有大量的硬盘损坏,但是由于有GFS,这些硬盘的损坏是允许的。

  • 有人形象地比喻:分布式的文件系统被分块为很多细胞单元,一旦细胞损坏,神经系统(Master)会迅速发现并有相应的冗余措施来使系统正常运行,这些细胞可以看作很多GFS主机。这一工作方式就是人类大脑的工作方式。

  • 当然,作为Google的技术基石,GFS可以给大量的用户提供总体性能较高的服务,具有以下优势:
    (1)Google采用的存储方法是大量、分散的普通廉价服务器的存储方式,极大降低了成本。
    (2)对大文件数据快速存取,这个毫无疑问是可以达到的。
    (3)容易扩展,它是成本很低的普通电脑,支持动态插入节点;
    (4)容错能力强,它的数据同时会在多个chunkserver上进行备份,具有相当强的容错性;
    (5)高效访问,它是通过Big table来实现的,它是Google File System上层的结构。GFS在实现分布式文件系统的做法上面很多都是简单的,但是确实非常高效。
    (6)GFS相对于HDFS稳定性是无庸置疑的,并在Google系统中得到了采用且稳定的运行。

6.2.2 HDFS文件的基本结构

HDFS是一种典型的主从式的分布式文件系统,该文件系统完全是仿照Google的GFS文件系统而设计的
在这里插入图片描述

  • HDFS由一个名叫Namenode的主节点和多个名叫Datanode的子节点组成。
  • Namenode存储着文件系统的元数据,这些元数据包括文件系统的名字空间等,向用户映射文件系统,并负责管理文件的存储等服务,但实际的数据并不存放在Namenode。Namenode的作用就像是文件系统的总指挥,并向访问文件系统的客户机提供文件系统的映射,这种做法并不是Google或Hadoop的创新,这和传统并行计算系统中的单一系统映像(Single System Image)的做法相同。
  • HDFS中的Datanode用于实际对数据的存放,对Datanode上数据的访问并不通过Namemode,而是与用户直接建立数据通信。
  • Hadoop启动后我们能看到Namenode和Datanode这两个进程。
  • HDFS的工作过程是这样的:
    用户请求创建文件的指令由Namenode进行接收,Namenode将存储数据的Datanode的IP返回给用户,并通知其他接收副本的Datanode,由用户直接与Datanode进行数据传送。Namenode同时存储相关的元数据。
    整个文件系统采用标准TCP/IP协议通信,实际是架设在Linux文件系统上的一个上层文件系统。HDFS上的一个典型文件大小一般都在G字节至T字节。
  • 主从式是云计算系统的一种典型架构方法,系统通过主节点屏蔽底层的复杂结构,并向用户提供方便的文件目录映射。有些改进的主从式架构可能会采用分层的主从式方法,以减轻主节点的负荷。
6.2.3 HDFS的存储过程

HDFS在对一个文件进行存储时有两个重要的策略:一个是副本策略,一个是分块策略。
副本策略保证了文件存储的高可靠性;
分块策略保证数据并发读写的效率并且是MapReduce实现并行数据处理的基础。

  • HDFS的分块策略:通常HDFS在存储一个文件会将文件切为64MB大小的块来进行存储,数据块会被分别存储在不同的Datanode节点上,这一过程其实就是一种数据任务的切分过程,在后面对数据进行MapReduce操作时十分重要,同时数据被分块存储后在数据读写时能实现对数据的并发读写,提高数据读写效率。
    HDFS采用64MB这样较大的文件分块策略有以下3个优点:
    (1)降低客户端与主服务器的交互代价;
    (2)降低网络负载;
    (3)减少主服务器中元数据的大小。
  • HDFS的副本策略:
    HDFS对数据块典型的副本策略为3个副本:
    (1)第一个副本存放在本地节点,
    (2)第二个副本存放在同一个机架的另一个节点,
    (3)第三个本副本存放在不同机架上的另一个节点。
    这样的副本策略保证了在HDFS文件系统中存储的文件具有很高的可靠性。
    一个文件写入HDFS的基本过程可以描述如下:
    写入操作首先由Namenode为该文件创建一个新的记录,该记录为文件分配存储节点包括文件的分块存储信息,在写入时系统会对文件进行分块,文件写入的客户端获得存储位置的信息后直接与指定的Datanode进行数据通信,将文件块按Namenode分配的位置写入指定的Datanode,数据块在写入时不再通过Namenode,因此Namenode不会成为数据通信的瓶颈。
6.3 MapReduce编程框架

在云计算和大数据技术领域被广泛提到并被成功应用的一项技术就是MapReduce。MapReduce是Google系统和Hadoop系统中的一项核心技术。

6.3.1 MapReduce的发展历史
6.3.2 MapReduce的基本工作工程
  • MapReduce是一种处理大数据集的编程模式,它借鉴了最早出现在LISP语言和其他函数语言中的map和reduce操作,MapReduce的基本过程为:
    用户通过map函数处理key/value对,从而产生一系列不同的key/value对,reduce函数将key值相同的key/value对进行合并。现实中的很多处理任务都可以利用这一模型进行描述。通过MapReduce框架能实现基于数据切分的自动并行计算,大大简化了分布式编程的难度,并为在相对廉价的商品化服务器集群系统上实现大规模的数据处理提供了可能。
  • MapReduce的过程其实非常简单,我们用一个实际的例子来说明MapReduce的编程模型。假设我们需要对一个文件example.txt中出现的单词次数进行统计,这就是著名的wordcount例子,在这个例子中MapReduce的编程模型可以这样来描述:
    1.用户需要处理的文件example.txt已被分为多个数据片存储在集群系统中不同的节点上了,用户先使用一个Map函数—Map(example.txt, 文件内容),在这个Map函数中key值为example.txt,key通常是指一个具有唯一值的标识,value值就是example.txt文件中的内容。
    2.Map操作程序通常会被分布到存有文件example.txt数据片段的节点上发起,这个Map操作将产生一组中间key/value对(word, count),
    3.这里的word代表出现在文件example.txt片段中的任一个单词,每个Map操作所产生的key/value对只代表example.txt一部分内容的统计值。
    4.Reduce函数将接收集群中不同节点Map函数生成的中间key/value对,并将Key相同的key/value对进行合并,在这个例子中Reduce函数将对所有key值相同的value值进行求和合并,最后输出的key/value对就是(word, count),其中count就是这个单词在文件example.txt中出现的总的次数。
6.3.3 MapReduce的特点

MapReduce主要具有以下几个特点:
(1)需要在集群条件下使用。
MapReduce的主要作用是实现对大数据的分布式处理,其设计时的基本要求就是在大规模集群条件下的(虽然一些系统可以在单机下运行,但这种条件下只具有仿真运行的意义),Google作为分布式MapReduce提出者,它本身就是世界上最大的集群系统,所以MapReduce天然需要在集群系统下运行才能有效。
(2)需要有相应的分布式文件系统的支持。
这里要注意的是单独的MapReduce模式并不具有自动的并行性能,就像它在LISP语言中的表现一样,它只有与相应的分布式文件系统相结合才能完美地体现MapReduce这种编程框架的优势。
如Google系统对应的分布式文件系统为GFS,Hadoop系统对应的分布式文件系统为HDFS。
MapReduce能实现计算的自动并行化很大程度上是由于分布式文件系统在对文件存储时就实现了对大数据文件的切分,这种并行方法也叫数据并行方法。数据并行方法避免了对计算任务本身的人工切分,降低了编程的难度,而像MPI往往需要人工对计算任务进行切分,因此分布式编程难度较大。
(3)可以在商品化集群条件下运行,不需要特别的硬件支持.
和高性能计算不同,基于MapReduce的系统往往不需要特别的硬件支持,按Google的报道,他们的实验系统中的节点就是基于典型的双核X86的系统,配置2~4GB的内存,网络为百兆网和千兆网构成,存储设备的便宜的IDE硬盘。
(4)假设节点的失效为正常情况。
传统的服务器通常被认为是稳定的,但在服务器数量巨大或采用廉价服务的条件下,服务器的实效将变得常见,所以通常基于MapReduce的分布式计算系统采用了存储备份、计算备份和计算迁移等策略来应对,从而实现在单节点不稳定的情况下保持系统整个的稳定性。
(5)适合对大数据进行处理。
由于基于MapReduce的系统并行化是通过数据切分实现的数据并行,同时计算程序启动时需要向各节点拷贝计算程序,过小的文件在这种模式下工作反而会效率低下。Google的实验也表明一个由150秒时间完成的计算任务,程序启动阶段的时间就花了60秒,可以想象,如果计算任务数据过小,这样的花费是不值得的,同时对过小的数据进行切分也无必要。所以MapReduce更适合进行大数据的处理。
(6)计算向存储迁移。
传统的高性能计算数据集中存储,计算时数据向计算节点拷贝,而基于MapReduce的分布式系统在数据存储时就实现了分布式存储,一个较大的文件会被切分成大量较小的文件存储于不同的节点,系统调度机制在启动计算时会将计算程序尽可能分发给需要处理的数据所在的节点。计算程序的大小通常会比数据文件小的多,所以迁移计算的网络代价要比迁移数据小的多。
(7)MapReduce的计算效率会受最慢的Map任务影响。
由于Reduce操作的完成需要等待所有Map任务的完成,所以如果Map任务中有一个任务出现了延迟,则整个MapReduce操作将受最慢的Map任务的影响。

第七章 HPCC——面向数据的高性能计算集群系统

大数据时代的应用需要对采集、存储的超大规模数据进行分析处理,传统并行数据库系统无法提供实时的高性能计算。高性能计算(HPC,High Performance Computing)一般采用超级计算和集群计算两种方式。
超级计算(Super Computing)是将复杂的计算任务分配给不同的处理器进行处理
集群计算(Cluster Computing)是指利用普通服务器甚至PC构建集群用于处理海量数据集,可以通过高速网络将成千上万台服务器或PC组建计算集群
Google的Map/Reduce、Hadoop、Scope、Sector/Sphere、HPCC等都是采用这种集群计算方案,以很低的成本组建具有强大计算力的集群
结构化数据、非结构化数据都是大数据时代处理的对象,非结构化数据的数量相对于结构化数据而言非常巨大,传统数据分析平台很难对其进行处理,是大数据时代处理的重点对象。非结构化数据一般采用文件系统进行存储,Google的GFS文件系统和Apache开源的HDFS文件系统是主流的分布式文件系统,用于数据分析领域。结构化数据主要存储于数据库和分布式表结构中,在业务数据分析领域,MySQL等传统数据库无法满足用户对存储系统的可扩展需求,Google公司的BigTable和Apache的Hbase开源等NoSQL系统使用越来越广泛
当前主要的数据密集型集群计算系统有Hadoop、HPCC、Storm等。
(1)Hadoop:由Apache软件基金会发起的基于块数据切分的分布式计算平台,采用Map/Reduce编程模式,具有高吞吐量、批处理的特点。
(2)HPCC:面向数据的高性能计算平台,平台基于键/值进行分析索引,用于来解决海量数据的处理与分析。
(3)Storm:基于流处理模式的分布式实时计算平台。
***计算密集型平台需要尽量减少计算的移动,***大多数的超级计算将数据存储在数据仓库或者服务器,在计算的时候将数据传输到计算节点,这样的方式数据传输压力大。数据密集型计算系统通常使用分布式文件系统,将数据存储在集群节点中,在运算的时候将计算任务发送到需要处理的数据所在的节点,数据传输压力远低于超级计算模式。

7.1 HPCC简介
  • HPCC系统相对于现今的各种大数据解决方案有以下优点:
    (1)强大灵活的ECL语言,显著提升了程序员编程的效率;
    (2)HPCC系统提供的Roxie集群提供了高效的在线查询和分析服务;
    (3)ECL程序首先编译为优化的C++,高速性能得到保证;
    (4)高效的错误恢复和冗余备份机制;
    (5)稳定和可靠的系统;
    (6)相对其他平台,在较低的系统消耗上实现了更高的性能。
  • 高性能计算目前可以分为两类:一类的面向计算的高性能计算;一类是面向数据的高性能计算。
    HPCC等大数据系统就是面向数据的高性能计算。HPCC集群和高性能计算中的Beowulf集群看上去非常的相似,但历史上Beowulf集群的应用目标主要是针对计算,而HPCC集群的设计目的的面向海量数据处理。
    运行上Beowulf集群上的软件主要是MPI等,这类软件需要用户自己操作集群中的每一个节点,HPCC由于采用了数据并行的方式,在分布式文件系统的支持下可以将并行处理进程向用户隐藏,从而大大降低了分布式程序设计的复杂性。
7.2 HPCC的系统架构
  • HPCC系统从总体物理上可以看作在同一个集群上部署了Thor(数据加工处理平台)和***Roxie(数据查询、分析和数据仓库)***的集群计算系统,并包含ECL中间件、外部通信层、客户端接口和辅助组件,系统架构如图所示。
    Thor集群和Roxie集群是HPCC系统的核心部件,这两个部件可以根据并行处理任务进行独立优化。
    在这里插入图片描述
  • Thor集群的任务可以独立执行任务,不需要部署Roxie集群;但要运行Roxie集群上的任务必须首先部署Thor集群,为其构建分布式索引文件。其中ESP服务器(Enterprise Service Platform)提供与用户交互的网络连接,后面用到的ECL Watch和WS ECL Service都属于ESP服务。
  • HPCC的系统服务器包含ECL服务器、Dali服务器、Sasha服务器、DFU服务器和ESP服务器,这些服务器为Thor、Roxie集群和外部建立接口,并为HPCC环境提供服务支持。
    – ECL服务器包含ECL编译器和执行代码生成器,是Thor集群的任务服务器。
    – Dali服务器的功能是数据仓库,主要用于管理工作单元数据,维护DFU的逻辑文件目录信息,配置HPCC环境,维护系统消息队列等。
    – Sasha服务器的主要功能是尽量减轻Dali服务器的压力和资源利用率。
    – DFU服务器用于向Thor集群的分布式文件系统DFS发送数据和回收数据。
    – ESP服务器是外部客户端链接到集群的接口。
  • HPCC简化的总体系统结构如图所示,图中表明HPCC集群在ECL语言的基础上利用Thor集群对大数据进行分析处理,而后利用Roxie集群实现数据的高效发布。
  1. Thor集群
    – Thor集群是HPCC系统的基础部件,用于对待处理的原始数据进行加工、精炼,例如:对原始数据进行数据清洗,进行数据集的ETL操作(提取、转换、加载),为高性能结构化查询和数据仓库应用创建核心数据和索引等。
    – Thor集群在功能、运行环境、文件系统等方面与Hadoop相似。
    – 在系统结构上Thor集群与Hadoop相同采用主从模式,每个集群由一个Master节点和多个Slave节点组成,其他的组件用于构成HPCC集群环境,为ECL程序执行提供并行环境。
    Master节点的主要作用是分发由ECL Server和ECL仓库编译的程序到各个Slave节点,并监控、协调程序在各个Slave节点上的执行(类似于Hadoop中的Job Tracker)。
    – 在一个HPCC系统中,可以建立多个Thor集群。
    – Thor集群每一个Slave节点也作为集群分布式文件系统的数据节点存在,与Map/Reduce集群所用的块格式不同,Thor中的数据是面向记录的,数据记录既可以是长度固定的内容也可以是其他的固定格式数据。
    – Thor在本地节点和集群内其他节点都提供了备份副本,每当有新数据添加,都会自动进行备份。Thor集群上执行的任务也可以通过分布式文件系统从其他集群导入文件。
    – Thor集群中的分布式文件系统是HPCC实现大数据处理的关键,通过数据在系统中预先切分并别存储于各个子节点为后面对数据的并行化处理提供方便。
  2. Roxie集群
    – 作为数据快速交付引擎的Roxie(Rapid Online XML Inquiry Engine)是一个高性能的结构化查询和分析平台,支持高并发数据请求,快速响应请求。
    – Roxie提供了高性能的在线结构化数据查询和分析的功能和数据仓库的功能。其作用类似 Hadoop中的Hive和HBase,但Roxie的效率更高。
    Roxie集群的每个节点都同时运行着Server进程和Worker进程。Server进程主要负责等待接收查询请求,并调度执行请求。Worker主要负责执行请求
    – Roxie集群有自己的分布式文件系统,以索引为基础,使用分布式B+树索引文件。Roxie集群提供了强大的错误恢复和冗余备份功能,在两个或更多的节点上进行数据冗余,能在节点失效的情况下继续运行。
    – Roxie集群中的辅助组件节点是一台ESP 服务器,外部终端通过ESP服务器与集群进行连接,其余组件与为Roxie集群创建分布式索引文件的Thor集群共享。
    – 在HPCC编程环境中,Thor和Roxie这两种并行数据处理平台需要各自优化并相互配合,HPCC平台需要根据系统性能要求和用户的需求来决定使用两种平台各自的节点数,以获取最优性能。
7.3 HPCC平台数据检索任务的执行过程

HPCC的平台上的数据检索任务在Thor集群和Roxie集群上运行,执行过程包含导入原始数据、数据切分与分发、ETL处理、Roxie集群发布,如图所示。
在这里插入图片描述

  1. 加载原始数据
    – 将存储在HPCC平台以外的待处理数据加载到Thor集群,存放位置为Landing Zone,可在HPCC配置中进行查询。常用的数据加载方式有两种,一种是登录ECL Watch,通过Web方式将数据导入Thor集群;另一种方式是直接使用WinSCP等文件传输工具将输入传入相应节点的文件夹。
  2. 切分、分发待处理的数据
    – 这个操作对应于图中的Spray,Spray操作将Landing Zone中的数据进行均匀切分,发送到Thor集群的存储节点。切分的时候根据文件的逻辑记录结构进行切分,保证逻辑记录的完整性,不被切分到多个节点上。
    – 这个操作由DFU服务器控制,将数据切分并分发到各个存储节点,切分后的文件形成一个逻辑文件,供ECL编程时使用。
    – 在数据的处理过程中,使用ECL编程语言可以将DFS中的文件进行重新分配。例如,可以将匹配某一个键值的数据分配到一个节点上,这样对这些数据的操作处理就在一个节点上进行,避免节点间的数据移动,达到数据并行操作、性能最优。
    – 由于HPCC中分布式文件系统是与系统紧密结合的,所以系统能有效地识别分布在不同节点上被切分后的文件,这样系统在进行数据处理时就能同时在多个节点发起,从而实现对大数据的分布式处理。同时系统所生成的索引文件在系统中也是以分布式的形式存放在系统中的不同节点。
  3. 分发后原始数据的ETL处理
    – 对分发后的原始数据ETL是Thor集群的典型应用,包含Extract操作、Transform操作和Load操作。Extract操作包含源数据映射、数据清洗、数据分析统计等操作;Transform操作是对数据集的常规操作,如数据记录的合并或拆分,数据集内容的更新,格式的变化等;Load操作的主要作用是为数据仓库或一些独立的查询平台建立索引,索引建立后会被加载到Roxie平台以支持在线查询。
  4. 向Roxie集群发布
    – 当一个查询被部署到Roxie集群,相关的支撑数据、索引文件也被加载到Roxie分布式索引文件系统。在HPCC系统中,这个文件系统与Thor的DFS分布式文件系统是相互独立的。
    – 在HPCC环境配置中,Roxie集群的数据会在多个节点上进行备份,集群中的某个节点出现故障不会影响系统的运行。Roxie集群查询请求的负载均衡一般由外部负载均衡通信设备负责。Roxie集群的规模由查询需求及其响应时间要求,规模一般小于Thor集群。Roxie查询可以通过Web应用发起,每个Roxie查询需要部署一个ECL查询程序。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/392493
推荐阅读
相关标签
  

闽ICP备14008679号