云计算是一种商业计算模型,它将计算任务分布在由大量计算机构成的资源池上,使用户能够按需获取计算能力、存储空间和信息服务。
能够充分地发挥现有处理器资源的作用,减少硬件机箱的数量,也随之减少占用空间、电力及发热。
Saas,它是一种通过Internet提供软件的模式,用户无需购买软件,而是向提供商租用基于Web的软件。
Paas是将服务器平台或者开发环境作为服务进行提供。开发简单、部署简单、维护简单。
Iaas,服务提供商将堕胎服务器组成的“云端”服务(包括内存、I/O设备、存储和计算能力等等)作为计量服务提供给用户。
主要功能如下:
构建大型地基础设施的云出租给公众。云端资源外部客户提供服务的云,它所有的服务是供别人使用,而不是自己用,基本上只要付费都可以用,因此公有云的规模往往也更大。
应用程序、资源、存储和其他服务,都由云服务提供商来提供给用户,这些服务多半都是免费的,也有部分按使用量来付费,这种模式只能使用互联网来访问和使用。
优点:对用户来说成本低,服务多
缺点:安全性不高
利用已有或租用基础设施资源自我构建云。云端资源只给一个单位组织内部的用户使用,这是私有云的核心特征。
私有云的部署比较适合于有众多分支机构的大型企业或政府部门。随着这些大型 企业数据中心的集中化,私有云将会成为他们部署IT系统的主流模式。
优点:可根据自己需求构建、安全性高。
缺点:需要IT团队维护,构建成本高。
混合云:由两种或两种以上部署形式组成的云。它们各自独立,用标准/专有的技术将它们组合起来,实现云之间数据和应用程序的可移植性。
优点:敏捷、灵活、降低成本。
缺点:兼容性问题。
云存储是一种新兴的网络存储技术,是指通过集群应用、网络技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统。
云服务主要以邮箱为账号,实现用户登陆账号后,内容在线同步的作用。
物联网就是物物相连的互联网,物联网有两种业务模式:
(1)MAI(M2M Application Integration)和内部MaaS;
(2)MaaS(M2M as a Service)、MMO和Multi-Tenants(多租户模型)。
云计算与大数据的关系是静与动的关系。前者强调的是计算能力,后者看中的是存储能力。如果数据是财富,那么大数据就是宝藏,而云计算就是挖掘和利用宝藏的利器。
云计算为大数据提供了可以弹性扩展、相对便宜的存储空间和计算资源;云计算IT资源庞大,分布较为广泛,是异构系统较多的企业及时准确处理数据的有利方式,甚至是唯一方式。
云计算的优势:
云计算面临的挑战:
云基础设施机制是云环境的基础构建块,它是形成云技术架构基础的主要构件。云基础设施机制主要针对计算、存储、网络。
虚拟防火墙可以支持多种虚拟机,比如Vmware、Xen、HyperV等,为主机提供从网络层到应用层的七层安全防护。虚拟防火墙工作于虚拟机之上,称为虚拟服务器于Internet之间的保护层。
每个虚拟防火墙能够实现防火墙的大部分特性,并且虚拟防火墙之间独立。
虚拟专用网络 (VPN) 是一种通过公用网络(如 Internet)连接专用网络(如办公室网络)的方法。
VPN系统主要技术特点:
基本特性:
虚拟服务器的优点:
云存储设备机制是指专门为基于云配置所设计的存储设备。这些设备的实例可以被虚拟化。其单位如下:
文件(file):数据集合分组存放于文件夹中的文件里;
块(block):存储的最低等级,最接近硬件,数据块是可以被独立访问的最小数据单位;
数据集(dataset):基于表格的以分隔符分隔的或以记录形式组织的数据集合;
对象(object):将数据及其相关的元数据组织为基于Web的资源,各种类型的数据都可以作为Web资源被引用和存储。
远程管理系统分为:资源管理系统、SLA管理系统和计费管理系统。
主要创建两种类型的入口:
1、使用与管理入口; 2、自助服务入口
云用户能执行的任务:配置与建立云服务;为按需云服务提供和释放 IT资源;监控云服务的状态、使用和性能;监控QoS和SLA的实行; 管理租赁成本和使用费用;管理用户账户、安全凭证、授权和访问控制;追踪对租赁服务内部与外部的访问;规划和评估 IT 资源供给;容量规划。
资源池化管理系统(resource pool management system)是云管理平台的关键所在,因为在一个企业内部,传统数据中心往往打散在不同地区,不同地区的数据中心也会有不同的等级以及业务属性。
资源池是以资源种类为基础来进行划分的,资源池建设考虑以下五个要素:资源种类、应用架构、应用等级保障、安全域和管理需求。
可以把所有这些机制堪称对云基础设施的扩展。
负载均衡实现方式有以下几类:
虚拟化层架构有:全虚拟化、半虚拟化、硬件辅助虚拟化。
CPU有4个特权级(ring0--ring3),RING0层拥有最高的权限, RING3层拥有最低的权限。
网络虚拟化将不同网络的硬件和软件资源结合成一个虚拟的整体,通常包括虚拟局域网和虚拟专用网。
网络虚拟化的最终目的是将逻辑IP地址与物理IP地址“松耦合”。
路由器、二层交换机、三层交换机、服务器网卡。
主要分为硬件和软件两种方式来实现。
云安全就是确保用户在稳定和私密的情况下在云计算中心上运行应用,并保证存储于云中的数据的完整性和机密性。
分布式文件系统是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。
分布式文件系统使得分布在多个节点上的文件如同位于网络上的一个位置一样便于动态扩展和维护。
实现分布式文件系统一般有两种方法:共享文件系统和共享磁盘。
分布式文件系统的典型架构,其中重要的服务器包括:主控服务器、数据服务器和客户服务器。
存储目录结构的主控服务器,在GFS中称为master,在 HDFS中称为name node。
每一个文件的具体数据,都切分成若干个数据块,冗余地存放在数据服务器。
数据服务器的主要工作模式就是定期向主控服务器汇报其状况,然后等待并处理命令,更快更安全的存放好数据。
具体的文件数据被切分成数据块,存放在数据服务器 上。每一个文件数据块,在数据服务器上都表示为一对文件(这是普通的Linux文件),一个是数据文件,另一 个是附加信息的元文件,简称为数据块文件。
主要功能有:1.数据本地存储;2.状态维护;3.副本管理。
客户端主要的两个功能如下:接口和缓存。
在Hadoop的实现中,部署了一套RPC(远程过程调用协议)机制,用来实现各服务间的通信协议。
GFS(Google File System)是由Google开发并设计的一个面向大规模数据处理的分布式文件系统。
集成了持续的监控、错误侦测、灾难冗余以及自动恢复的机制;一个文件块的大小是64M;绝大部分的大数据都采用在文件尾部追加数据的方式。
GFS采用主/从模式,GFS有三个节点:client、Master和Chunk服务器。
Master(主服务器)作为管理节点,保存系统的元数据,负责整个文件系统的管理。
Master节点使用心跳信息周期地和每个Chunk服务器通讯,发送指令到各个Chunk服务器并接收Chunk服务器的状态信息。
Client对数据的读写不是在Master上,而是通过Master获取block在chunk上的位置信息,直接和 Chunk服务器进行数据交互读写。
Chunk是真正用于存储数据的机器,用来存储的文件大小为64MB,每个block的副本都以普通Linux文件的形式保存在Chunk服务器上。
Master服务器并不是持久化地保存Chunk服务器保存的指定block的副本信息。Master服务器只是在启动的时候轮询Chunk服务器以获取这些信息。
GFS没有选择直接以文件为单位进行存储,而是把文件分为一个个chunk来存储。 GFS把每个chunk设为64MB。
为什么GFS会这么设计呢?
①使用GFS的系统需要存储的文件都偏大(几GB),所以较大的chunk可以有效减少系统内部的寻址和交互次数;
②大的chunk意味着client可能在一个chunk上执行多次操作, 这可以复用TCP连接,节省网络开销;
③更大的chunk可以减少chunk数量,从而节省元数据存储开销,相当于节省了系统内最珍贵的内存资源,这对GFS来讲是非常关键的
文件位置等信息→元数据
管理元数据节点设计为单master节点。
GFS设计了单个master节点,用来存储整个文件系统的三类元数据:
1. 所有文件和chunk的namespace【持久化】
2. 文件到chunk的映射【持久化】
3. 每个chunk的位置【不持久化】
文件名→获取文件对应的所有chunk名→获取所有chunk的位置→ 依次到对应的chunkserver中读取chunk。
GFS采用了一系列措施来确保master不会成为整个系统的瓶颈:
①GFS所有的数据流都不经过master,而是直接由client和 chunkserver交互;
GFS把控制流和数据流分离,只有控制流才会经过master。
②GFS的client会缓存master中的元数据,在大部分情况下,都无需访问master;
③为了避免master的内存成为系统的瓶颈,GFS采用了一些手段来节省master的内存,包括增大chunk的大小以节省chunk的数量、对元数据进行定制化的压缩等。
高可用问题现在比较通用的做法是共识算法,比如Paxos 和Raft。
但GFS诞生的时候,共识算法不像现在这么成熟,所以 GFS借鉴了主备的思想,为系统的元数据和文件数据都单独设计了高可用方案。
HDFS(Hadoop Distributed File System)是Hadoop的核心子项目, 是基于流数据模式进行访问和处理超大文件的需求而开发的,它可以运行于廉价的商用服务器上,为超大数据集(Large Data Set)的应用处理带来了很多便利。
数据块:大文件会被分割成多个block进行存储。每一个block会在多个 datanode上存储多份副本,默认是3份。HDFS默认的最基本的存储单位是64M的数据块,这个数据块可以理解和一般的文件里面的分块是一样的。不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。
元数据节点(namenode):用来管理文件系统的命名空间,它将所有的文件和文件夹的元数据保存在一个文件系统树中,并且它管理文件目录、文件和block的对应关系以及block和datanode的对应关系。
数据节点(datanode):就是用来存储数据文件的。大部分容错机制都是在datanode上实现的。
从元数据节点(secondary namenode):主要的功能就是周期性地将元数据节点的命名空间镜像文件和修改日志合并,以防日志文件过大。
HDFS是一个主/从体系结构,从最终用户的角度来看,它就像传统文件系统一样,可以通过目录路径对文件进行CRUD操作。
为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副本。如果在读取程序的同一个机架上有一 个副本,那么就读取该副本。
如果一个HDFS集群跨越多个数据中心,那么客户端也将首先读本地数据中心的副本。
优点:
缺点:
快照:轻量级的备份
GFS:快照功能非常强大,对数据的读写几乎不产生影响;
HDFS:目前不支持快照,使用复制。
记录追加操作:GFS比HDFS更加完善
GFS:提供一种更加宽松的一致性模型, 支持写、记录追加的操作;
写操作——随机写文件
追加操作——更加安全可靠
HDFS:只允许对文件的追加,不允许随机写操作。
垃圾回收:
GFS:采用惰性回收策略,即Master不会立即删除数据, 以一种特定的形式保存,定期删除(默认3天)。
HDFS:采取直接删除。记录追加操作(append) GFS 比HDFS更加完善。
ZooKeeper 是Hadoop 的正式子项目,它是一个针对大型分布式系统的提供一致性服务,其一致性是通过Paxos算法的zab协议完成。提供的功能包括:配置维护、 名字服务、分布式同步、组服务等。
ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户使用。
Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。
在ZAB中有如下三种数据:
Zab协议是专门为Zookeeper设计的崩溃恢复的原子广播协议。 有两种模式,它们分别是恢复模式(选主)和广播模式(同 步)。这两种模式并没有十分明显的界线,它们相互交织在一 起。
每个server在工作过程中有如下四种状态:
ZooKeeper提供的是对一个分布式系统进行协同,存储单元叫作ZNode。
ZNode分为两类,即永久性ZNode和临时性ZNode。
永久性ZNode是创建之后就会一直存在的ZNode,除非对其进行删除,否则不会消失;
临时性ZNode的存在与否是与创建这个ZNode的进程是否继续存在相关的。对于一个临时性的ZNode,当创建这个 ZNode的进程不再存在时,这个ZNode就会随之消失。 为了能够对分布式系统提供协同支持,ZooKeeper针对 每一个ZNode提供了添加watch的特性。
功能需求:
云存储系统面向多种类型的网络在线存储服务,传统存储系统则面向如高性能计算、事务处理等应用。
性能需求:
数据的安全性、可靠性、效率等技术挑战。
数据管理:
云存储系统不仅要提供传统文件访问,还要能够支持海量数据管理并提供公共服务支撑功能,以方便云存储系 统后台数据的维护。
数据块级云存储、文件级云存储和对象级云存储。
数据密集型计算(Data Intensive Computing)是指能推动前沿技术发展的对海量数据和高速变化的数据的获取,管理,分析和理解;是采用数据并行方法实现大数据量并行计算的应用,计算数据量级为TB或PB级,因此也被称为是大数据的核心支撑技术。
高性能计算偏向于计算密集型,而数据密集型计算面向的是海量的数据。
数据密集型计算系统中的计算和存储应该是一体化的,节点之间是对等的。
云计算是分布式计算、并行计算和网格计算的发展。
云计算为数据密集型计算提供了可观的运行环境和支持。
目前许多数据密集型应用都被部署在云上。
分布式计算的优点是可以快速访问、多用户使用。
MapReduce将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数:Map和Reduce;
MapReduce采用“分而治之”策略,一个存储在分布式文件系统中的大规模数据集,会被切分成许多独立的分片(split),这些分片可以被多个Map任务并行处理。
MapReduce框架采用了Master/Slave架构,包括一个Master和若干个Slave。Master上运行JobTracker,Slave上运行TaskTracker ;
JobTracker(作业跟踪器):负责整个作业的调度和处理以及失败和恢复。
TaskTracker (负责具体任务执行的组件):负责接收 JobTracker给它发的作业处理指令完成具体的任务处理。
Hadoop框架是用Java实现的,但是,MapReduce应用程序则不一 定要用Java来写 。
MapReduce体系结构主要由四个部分组成,分别是: Client、JobTracker、TaskTracker以及Task。
Map任务的数量
Hadoop为每个split创建一个Map任务,split的多少决定了Map 任务的数目。大多数情况下,理想的分片大小是一个HDFS块。
Reduce任务的数量
最优的Reduce任务个数取决于集群中可用的Reduce任务槽 (slot)的数目;
Spark生态系统由如下两部分组成:Shark和SharkR。
Spark最初由美国加州伯克利大学(UCBerkeley)的AMP实 验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。
Spark有如下特点:
在实际应用中,大数据处理主要包括以下三个类型:
Spark所提供的生态系统足以应对上述三种场景, 即同时支持批处理、交互式查询和流数据处理。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
优点有:高可靠性、高扩展性、高效性、高容错性、低成本。
Hadoop是一种分布式数据和计算的框架。
MapReduce是处理大量半结构化数据集合的编程模型。
MapReduce和Hadoop是相互独立的,实际上又能相互 配合工作得很好。
NoSQL的结构通常提供弱一致性的保证,如最终一致性。少数 NoSQL系统部署了分布式结构,通常使用分布式散列表(DHT)将数据以冗余方式保存在多台服务器上。依此,扩充系统时候添加服务器更容易,并且扩大了对服务器失效的承受程度。
NoSQL数据库的四大分类:键值、列存储数据库、文档型数据库、图形数据库。
BigTable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据, 通常是分布在数千台普通服务器上的PB级的数据。
BigTable是一个稀疏的、分布式的、持久化存储的多维度排序 Map。Map的索引是行关键字、列关键字以及时间戳,Map中的每个 value都是一个未经解析的byte数组。
BigTable包括了三个主要的组件,链接到客户程序中的库、一个 Master服务器和多个Tablet服务器。
HBase是一个分布式的、面向列的开源数据库,就像BigTable利用 了Google文件系统(File System)所提供的分布式数据存储一样, HBase在Hadoop之上提供了类似于BigTable的能力。
HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系 数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
Hbase的访问接口如下:Native Java API、HBase Shell和Thrift Gateway。
Hbase数据形式:行、列族、时间戳、单元格、区域。
HBase自动把表水平(按Row)划分成多个区域(region)