赞
踩
大数据的处理流程可以定义为在适合工具的辅助下,对广泛异构的数据源进行抽取和集成,结果按照一定的标准统一存储,利用合适的数据分析技术对存储的数据进行分析,从中提取有益的知识并利用恰当的方式将结果展示给终端用户。
—云计算与大数据相比云计算更像是对一种新的技术模式的描述而不是对某一项技术的描述,而大数据则较为确切地与一些具体的技术相关联。
—云计算整合的资源主要是计算和存储资源,云计算技术的发展也清晰地呈现出两大主题—计算和数据。伴随这两大主题,出现了云计算和大数据这两个热门概念。
—在分布式系统中实现计算和数据有效融合从而提高数据处理能力,简化分布式程序设计难度,降低系统网络通信压力从而使系统能有效地面对大数据处理的机制称为计算和数据的协作机制。
—面向数据也可以更准确地称为“面向数据的计算”,面向数据要求系统的设计和架构是围绕数据为核心展开的,面向数据也是云计算系统的一个基本特征,而计算与数据的有效协作是面向数据的核心要求。
物联网:通过射频识别装置,红外感应装置,全球定位系统,激光扫描器等信息传感设备,按约定的协议把任何物品与互联网连接,进行信息交换和通信,以实现智能化识别,定位,跟踪,监控和管理的一种网络
云计算技术将给物联网带来以下深刻变革:
(1)解决服务器节点的不可靠性问题,最大限度降低服务器的出错率。(2)低成本的投入可以换来高收益,让限制访问服务器次数的瓶颈成为历史。(3)让物联网从局域网走向城域网甚至是广域网,在更广的范围内进行信息资源共享。(4)将云计算与数据挖掘技术相结合,增强物联网的数据处理能力,快速做出商业抉择。
数据存储位置是唯一的,把存储位置映射到哈希环上,在处理文件的程序上指定数据存储位置,计算出文件所处的节点位置,将计算程序分配到这个位置,则计算找到了数据
应用举例:
云计算技术对数据库高并发读/写的需求,对海量数据的高效率存储和访问的需求,对数据库的高可扩展性和高可用性的需求都让传统关系型数据库系统显得力不从心。同时关系型数据库技术中的一些核心技术要求如:数据库事务一致性需求,数据库的写实时性和读实时性需求,对复杂的SQL查询,特别是多表关联查询的需求等在Web 2.0技术中却并不是必要的,而且系统为此付出了较大的代价。非关系型数据库技术的出现是云计算、大数据技术的必然需求。
- 集群结构是云计算系统的基本结构之一,在集群结构中节点之间的协调和数据传送一般都通过消息传递机制进行,在传统的高性能计算系统集群内部的网络通信能力成为了影响集群计算能力的一个重要因素,由于受到网络通信速度的制约甚至提出以计算换通信的编程理念。
云计算系统中集群的规模变得空前巨大,为了很好地实现集群内部的调度和协调高速的网络通信是必不可少的。InfiniBand就是目前较为常见的一种高速集群通信协议,它在高性能计算领域已得到广泛的应用。- InfiniBand是唯一既提供机箱内底板互联解决方案,又可以使高速带宽延伸出机箱外部的互联标准,是一种把I/O和系统域网络统一起来的标准。
- 与其他商品化系统域网络不同,InfiniBand网络首先由行业协会制定标准,然后生产商根据标准制造出InfiniBand设备,不同生产商的产品要求具有互操作性,这样可以使InfiniBand产品具有更好的性能价格比。
- InfinBand 既可作为系统内部互联技术又可作为网络互联技术
既可用于构造高性能刀片服务器(Blade Server);
又可用于构建具有高可用性和高可伸缩性的大规模集群系统;
还可用于构建性能卓越的存储区域网络SAN。
- 自组织理论主要研究混沌系统在随机识别时系统内部自发地由无序变为有序、形成耗散结构的过程
自组织算法按照自下而上的机制进行控制,与一般采用中心控制算法不同,在进化计算、任务分配、网络自组织演化等中得到广泛的研究- 典型的进化算法(如蚁群算法)由个体依据简单规则,通过正反馈、分布式协作依靠群体的力量自动寻找最优路径;任务分配通过多智能体并行实现在离散、有限的数据结构上,寻找一个满足给定约束条件并使目标函数值达到最大或者最小的解;人工生命进化由人工分子的非线性相互作用引起,是远离热平衡的相变,是自组织的研究方向之一;网络自组织演化研究在内在机制驱动下,网络自行从简单向复杂、从粗糙向细致方向发展,不断地以局部优化达到全局优化的过程。
- 研究自组织必然要提到耗散结构理论,一个开放系统当某个参数变化到一定的临界值时,系统发生突变,其状态可能从原来的混乱无序的状态转变到一种在时间、空间上或功能上有序的新状态,这种新的有序结构(耗散结构)需要系统不断地与外界交换物质和能量才能得以维持并保持一定的稳定性
- 自组织现象:系统从无序自动走向有序结构,出现自组织现象的系统必须是耗散结构的
虚拟化技术从计算体系结构的层次上可分为:
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更适合预算有限的小环境。
一款功能强大的商业虚拟化软件,和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的缺点在于其体积庞大,安装时间耗时较久,并且在运行使用时占用物理机的资源较大。
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系统。
1.系统虚拟化: 指在一台物理计算机系统上虚拟出一台或多台虚拟计算机系统
虚拟计算机系统(简称虚拟机):是指使用虚拟化技术运行在一个隔离环境中的具有完整硬件功能的逻辑计算机系统,包括操作系统和应用程序。一台虚拟机中可以安装多个不同的操作系统,并且这些操作系统之间相互独立
2.系统虚拟化的典型特征
虚拟机有同一性、高效性、受控性的3个典型特征
同一性是指虚拟机的运行环境和物理机的运行环境在本质上应该是相同,表现形式上可以有所差别
高效性是指软件在虚拟机上运行时,大部分是在硬件上运行的,只有少数是在虚拟机中运行的,从而在虚拟机中运行的软件的性能接近在物理机上运行的性能
资源受控是指VMM完全控制和管理系统资源
3.系统虚拟化的优点
(1)硬件无关性
虚拟机与底层硬件之间是虚拟化层,其与底层硬件之间并没有直接的联系。所以只要另一台计算机提供相同的虚拟硬件抽象层,一个虚拟机就可以无缝地进行迁移
(2)隔离性
使用虚拟机,应用软件可以独立地在虚拟机上运行,不受其他虚拟机的影响。即使其他的虚拟机崩溃,也可以正常运行。这种隔离性的好处是:可以在一台物理机虚拟出的多台虚拟机上进行不同的操作,相互之间没有影响
(3)多实例
在一台物理机上可以运行多台虚拟机,而一台虚拟机上又可以安装多个操作系统。不同的虚拟机的繁忙、空闲时间又不同,这样虚拟机交错使用物理计算机的硬件资源,资源利用率比较高
(4)特权功能
系统虚拟化的虚拟化层是在本地硬件与虚拟机之间,其将下层的资源抽象成另一种形式的资源,提供给上层的虚拟机使用
虚拟化层拥有更高的特权体现在:虚拟化层中添加的功能不需要了解客户机的具体语义,实现起来更加容易,并且添加的功能具有较高的特权级,不能被客户机绕过
系统虚拟化的最大价值在于服务器虚拟化。服务器虚拟化是将系统虚拟化技术应用于服务器上,将一台或多台服务器虚拟化为若干台服务器使用。现在,数据中心大部分使用的是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设备一样作为虚拟机的共享设备外,还要解决虚拟机与外部网络或者虚拟机相互之间的通信问题。
网卡虚拟化技术主要分为两类:虚拟网卡技术和虚拟网桥技术。
虚拟网卡是指虚拟机中的网卡,是通过软件的方法模拟网络环境
虚拟网桥是指利用软件方法实现的网桥其作用是在一台服务器中,使多块共享一块物理网卡的虚拟网卡对外表现为多块独立的网卡
桌面虚拟化依赖于服务器虚拟化,直观上来说就是将计算机的桌面进行虚拟化,是将计算机的桌面与其使用的终端设备相分离
桌面虚拟化为用户提供部署在云端的远程计算机桌面环境,用户可以使用不同的终端设备通过网络来访问该桌面环境,即在虚拟桌面环境服务器上运行用户所需要的操作系统和应用软件
桌面虚拟化的应用软件安装在云端服务器上,即使本地服务器上没有应用软件,用户依然可以通过虚拟桌面来访问相关的应用
1.桌面虚拟化的优势
(1)更灵活的访问和使用
传统的计算机桌面,需要在特定的设备上使用,例如,某用户的计算机桌面上安装了PhotoShop软件,若要使用,只能用自己的那台计算机。
虚拟桌面不是本人直接安装在设备上,而是部署在远程服务器上的。任何一台满足接入要求的终端设备在任何时间、任何地点都可以进行访问。例如,拥有虚拟桌面的用户,在上班的时候可以使用单位提供的瘦客户端设备来访问虚拟桌面,在出行的路上可以使用智能手机、平板计算机上安装的客户端软件来访问虚拟桌面,更加方便、快捷。
(2)更低的用户终端配置
虚拟桌面部署在远程服务器上,所有的计算都在远程服务器上进行,而终端设备主要是用来显示远程桌面内容。
所以,终端设备没有必要拥有与远程服务器相似的配置,对其配置要求更低、维护相对而言也更加容易。
(3)更便于集中管控终端桌面
虚拟桌面并不是没有自己的个人桌面,其完全可以与本地的个人桌面同时存在,两者可以互不干扰。
使用虚拟桌面,运行商将所有的桌面管理放在后端的数据中心中,数据中心可以对桌面镜像和相关的应用进行管理、维护。而终端用户不用知道具体的管理和维护,就可以使用经过维护后的桌面。
(4)更高的数据安全性
用户在虚拟桌面上所做的应用是在后台的数据中心中执行的,所产生的数据也存储在数据中心,并没有存储在用户的终端设备上。从而,用户终端设备的损坏对数据没有影响。
此外,由于传统的物理桌面会接入内部网,一旦一个终端感染病毒,就可能殃及整个内部网络。而虚拟桌面的镜像文件受到感染,受影响的只是虚拟机,能很快地得到清除和恢复。
(5)更低的成本
虚拟桌面简化了用户终端,用户可以选择配置相对较低的终端设备,从而节省购买成本。
传统的每台计算机上都要有一个桌面环境。而且这些计算机分布在世界各地。管理起来比较困难,管理成本也比较高。
而虚拟桌面及其相关应用的管理和维护都是在远程服务器端运行的,成千上万的用户可以使用同一个虚拟桌面,从而降低了管理和维护的成本。
2.虚拟桌面的解决方案
用户开始使用桌面已经很多年了,最先是在自己的计算机上使用,现在已经形成了***基于虚拟桌面基础架构(VDI)和基于服务器计算技术(SBC)***两种技术解决方案,这两种技术方案都是一种端到端的桌面管理解决方案
(1)基于VDI的虚拟桌面解决方案
基于VDI的虚拟桌面解决方案是基于服务器虚拟化的,拥有服务器虚拟化的所有优点
其原理是在远程数据中心的服务器上安装虚拟机并在其中部署用户所需要的操作系统及操作系统上的各种应用,此时虚拟桌面就是虚拟机上的操作系统及其上的各种应用。然后通过桌面显示协议将完整的虚拟桌面交付给终端用户使用。终端用户通过一对一的方式连接和控制运行在远端服务器上的实例
桌面显示协议是指在远程桌面与终端之间所使用的通信协议,用于键盘等输入设备、显示设备等与桌面信息之间的数据传输。
桌面显示协议是桌面虚拟化软件的核心部件。当前主流的显示协议包括RDP(Remote Desktop Protocol)、PCoIP、SPICE、ICA等。
(2)基于SBC的虚拟桌面解决方案
基于SBC的虚拟桌面解决方案的原理是在数据中心内的物理机上直接安装、运行操作系统和应用软件,此时的桌面就是服务器上的物理桌面。用户通过和服务器建立的会话对服务器桌面及相关应用进行访问和操作
这类解决方案在服务器上部署的操作系统是必须支持多用户多会话的,并且允许多个用户共享操作系统桌面。同时,用户会话产生的输入/输出数据被封装为桌面交付协议格式在服务器和客户端之间传输
当前云计算技术领域存在两个主要技术路线,一个是基于集群技术的云计算资源整合技术,另一个是基于虚拟机技术的云计算资源切分技术。
基于集群技术的云计算资源整合技术路线将分散的计算和存储资源整合输出,主要依托的技术为分布式计算技术。集群技术从传统的高性能计算逐步走向云计算和大数据领域,集群架构是当前高性能计算的主流架构,然而无独有偶,集群架构也是大数据领域技术的主流架构,大数据可以认为是面向计算的高性能计算技术,集群技术是大数据系统的重要技术。
传统的集群系统可以分为4类:
(1)高可用性集群系统。
高可用性集群系统通常通过备份节点的使用来实现整个集群系统的高可用性,活动节点失效后备份节点自动接替失效节点的工作。高可用性集群系统就是通过节点冗余来实现的,一般这类集群系统主要用于支撑关键性业务的需要,从而保证相关业务的不间断服务。
(2)负载均衡集群系统。
负载均衡集群系统中所有节点都参与工作,系统通过管理节点(利用轮询算法、最小负载优先算法等调度算法)或利用类似一致性哈希等负载均衡算法实现整个集群系统系统内负载的均衡分配。
(3)高性能集群系统。
高性能集群系统主要是追求整个集群系统系统计算能力的强大,其目的是完成复杂的计算任务,在科学计算中常用的集群系统就是高性能集群系统系统,目前物理、生物、化学等领域有大量的高性能集群系统提供服务。
(4)虚拟化集群系统。
在虚拟化技术得到广泛使用后,人们为了实现服务器资源的充分利用和切分,将一台服务器利用虚拟化技术分割为多台独立的虚拟机使用,并通过管理软件实现虚拟资源的分配和管理。这类集群系统称为虚拟集群系统,其计算资源和存储资源通常是在一台物理机上。利用虚拟化集群系统可以实现虚拟桌面技术等云计算的典型应用。
目前基于集群系统结构的云计算系统往往是几类集群系统系统的综合,集群系统式云计算系统既需要满足高可用性的要求又尽可能地在节点间实现负载均衡,同时也需要满足大量数据的处理任务。
所以像Hadoop、HPCC这类云计算大数据系统中前三类集群系统的机制都存在。
而在基于虚拟化技术的云计算系统中采用的往往是虚拟化集群系统。
云计算系统需要将计算资源和存储资源形成一个统一的资源池,目前基于集群系统技术的云计算系统如Hadoop等,从使用者来看并不需要了解集群系统的具体结构,也不需要分别对集群系统中的每一个节点进行操作,系统对外都有一个统一的接口,这就是单一系统映像技术。
Beowulf集群是一种用作并行计算的集群架构,通常是由一台主节点和一台以上的子节点通过以太网或其他网络连接的系统,它采用市面上可以购买的普通硬件(例如装有Linux的PC)、标准以太网卡和交换机,它不包含任何特殊的硬件设备,可以重新组建。
集群文件系统存储数据时并不是将数据放置于某一个节点存储设备上,而是将数据按一定的策略分布式地放置于不同物理节点的存储设备上。
集群文件系统将系统中每个节点上的存储空间进行虚拟的整合,形成一个虚拟的全局逻辑目录,集群文件系统在进行文件存取时依据逻辑目录按文件系统内在的存储策略与物理存储位置对应,从而实现文件的定位。
集群文件系统相比传统的文件系统要复杂,它需要解决在不同节点上的数据一致性问题及分布式锁机制等问题,所以集群文件系统一直是云计算技术研究的核心内容之一。
Lustre存储系统是高性能分布式存储领域中最为著名的系统之一,在全球,有过半的超级计算中心使用Lustre存储系统,随着Lustre存储系统的发展,越来越多的中大型计算中心和集成平台都在采用Lustre存储系统。
元数据:管理数据的数据
基于消息传递机制的并行计算技术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十分相似,数据是由计算程序主动发起请求获得,从而实现计算和数据的一致性。总的来看网格系统既具有面向数据系统中切分数据来实现分布式计算的思想,又具有面向计算的系统中计算向数据迁移的特征,所以典型的网格系统是一种既有面向数据又有面向计算特征的混合系统,完成的任务主要还是计算密集的需要高性能计算的任务,应用领域主要是在科学计算等专业的领域。
基于数据切分实现分布式计算的方法在面向计算时代也被经常使用,被称为数据并行(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将计算进行批量化,按任务进行循环迭代控制。
其中混合型分布式系统是发展过程中的一个中间阶段,它同时具有面向计算和面向数据的特征,如混合型系统中也存在数据拆分这类面向数据系统的典型特征,但却是以集中式的存储和数据向计算迁移的方式实现计算和数据的位置一致性。
对于面向数据的分布式系统往往有对应的分布式文件系统的支持,从文件存储开始就实现数据块的划分,为数据分析时实现自动分布式计算提供了可能,计算和数据的协作机制在面向数据的系统中成为了核心问题,其重要性凸现出来。
MPI (Message Passing Interface,消息传递接口)
MPI标准描述是是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准,MPI本身并不是一个具体的实现,而只是一种标准描述,MPI库可以被FORTRAN77/C/Fortran90/C++调用。
消息传递机制使服务器之间能有机的结合在一起形成一个更大的计算资源池,通过消息通信机制服务器之间能进行数据交换从而实现对计算任务的相互协作。
云计算的定义中计算资源池的形成是十分重要的一项技术,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的编程原则中甚至有“用计算换通信”的说法,即宁愿多算也要尽可能地减少消息通信。
所以在并行计算集群中往往会采用高速通信技术实现节点间的数据通信。
以上结果是在有两个节点的并行集群上运行的结果。本实例第一眼看上去和普通的C语言程序几乎一样,学过C语言的读者会感觉到相当的亲切和熟悉。不同的只是多了一个mpi.h的头文件,以及MPI_Init()和MPI_Finalize()这两个函数。程序虽然简单但它确实是一个真正的并行程序。
程序的运行结果证明了这一点:我们程序中只有一个打印语句,按照串行程序的结果将只有一行打印结果,然而现在却出现了两行“hello parallel world!”,这是我们的两个计算节点在向你表明,我们已经进入了并行计算世界了,主程序中的打印语句被每个节点都执行了一次,我们有两个节点所以打印了两行文字,它们分别来自于不同的节点。
- 本实例程序启动后会在各个节点同时执行,各节点通过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个节点。
蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法,属于计算数学的一个分支,它是在20世纪40年代中期为了适应当时原子能事业的发展而发展起来的。主要思想是通过随机试验的方法,得到所要求解的问题(某种事件)出现的频率,用它们作为问题的解。
简而言之,就是用频率来代替概率,当实验样本足够大的时候,就可以得到比较精确的解结果。蒙特卡罗是一种充满了魅力的算法,我们往往可以以一种简单的方法实现许多复杂的算法,大量的智能算法中也都有蒙特卡罗算法的身影,由于采用了随机数,所以蒙特卡罗方法的并行化能力特别强,而且特别简单。
本节基于蒙特卡罗思想用MPI程序实现对值的并行求解,以展示蒙特卡罗算法的神奇魅力。
Hadoop是由Apache软件基金会研发的一种开源、高可靠、伸缩性强的分布式计算系统,主要用于对大于1TB的海量数据的处理。
Hadoop采用Java语言开发,是对Google的MapReduce核心技术的开源实现。
目前Hadoop的核心模块包括系统HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)和分布式计算框架MapReduce,这一结构实现了计算和存储的高度耦合,十分有利于面向数据的系统架构,因此已成为大数据技术领域的事实标准
Hadoop与MPI在数据处理上的差异主要体现在数据存储与数据处理在系统中位置不同,MPI是计算与存储分离,Hadoop是计算向存储迁移
在MPI中数据存储的节点和数据处理的节点往往是不同的,一般在每次计算开始时MPI需要从数据存储节点读取需要处理的数据分配给各个计算节点对数据进行处理,因此MPI中数据存储和数据处理是分离的。
对于计算密集型的应用MPI能表现出良好的性能,但对于处理TB级数据的数据密集型应用由于网络数据传输速度很慢,MPI的性能会大大降低,甚至会到不可忍受的地步,所以对于构建在MPI上的并行计算系统网络通讯速度一直是一个重要的性能指标,用“计算换通信”也是MPI并行程序设计中的基本原则。
在Hadoop中由于有HDFS文件系统的支持,数据是分布式存储在各个节点的,计算时各节点读取存储在自己节点的数据进行处理,从而避免了大量数据在网络上的传递,实现“计算向存储的迁移”。
Hadoop系统实现对大数据的自动并行处理,是一种数据并行方法,这种方法实现自动并行处理时需要对数据进行划分,而对数据的划分在Hadoop系统中从数据的存储就开始了,因此文件系统是Hadoop系统的重要组成部分,也是Hadoop实现自动并行框架的基础。Hadoop的文件系统称为HDFS(Hadoop Distributed File System)。
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系统中得到了采用且稳定的运行。
HDFS是一种典型的主从式的分布式文件系统,该文件系统完全是仿照Google的GFS文件系统而设计的
HDFS在对一个文件进行存储时有两个重要的策略:一个是副本策略,一个是分块策略。
副本策略保证了文件存储的高可靠性;
分块策略保证数据并发读写的效率并且是MapReduce实现并行数据处理的基础。
在云计算和大数据技术领域被广泛提到并被成功应用的一项技术就是MapReduce。MapReduce是Google系统和Hadoop系统中的一项核心技术。
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任务的影响。
大数据时代的应用需要对采集、存储的超大规模数据进行分析处理,传统并行数据库系统无法提供实时的高性能计算。高性能计算(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:基于流处理模式的分布式实时计算平台。
***计算密集型平台需要尽量减少计算的移动,***大多数的超级计算将数据存储在数据仓库或者服务器,在计算的时候将数据传输到计算节点,这样的方式数据传输压力大。数据密集型计算系统通常使用分布式文件系统,将数据存储在集群节点中,在运算的时候将计算任务发送到需要处理的数据所在的节点,数据传输压力远低于超级计算模式。
HPCC的平台上的数据检索任务在Thor集群和Roxie集群上运行,执行过程包含导入原始数据、数据切分与分发、ETL处理、Roxie集群发布,如图所示。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。