所有权来分
服务类型来分
IaaS
PaaS
SaaS
DaaS
Amazon 云计算
IBM 云计算
Google 云计算
微软云计算
阿里巴巴云服务
阿里云基于电商的技术特长包括并发事务的处理、都事务状态的控制、对交易安全的控制等。
飞天开放平台(Apsara)
云计算基础服务
域名与网站服务
安全服务
大数据服务
百度开放云
腾讯云平台
计算和网络服务
存储于 CDN 服务
监控与安全服务
大数据服务
从技术上
大数据根植于云计算,云计算关键技术中的海量数据存储和管理技术以及 MapReduce 并行编程模型都是大数据技术的基础。
云计算技术
从整体上
云计算和大数据技术的异同
大数据 | 云计算 | |
---|---|---|
总体关系 | 为云计算提供了有价值的用武之地 | 为大数据提供了有力的工具和途径 |
相同点 | 为数据存储和处理服务; | 需要大量的存储和计算资源(共同技术) |
背景 | 现有数据处理不能胜任社交网络和物联网产生的大量异构数据,但它们存在很大价值 | 基于互联网的相关服务日益丰富和频繁 |
目的 | 充分挖掘海量数据中的信息 | 通过互联网更好地调用、扩展和管理计算及存储方面地资源和能力 |
对象 | 数据 | IT 资源、能力和应用 |
推动力量 | 从事数据存储与处理地软件厂商、拥有大量数据的企业 | 生产计算及存储设备的厂商、拥有计算及存储资源的企业 |
价值 | 发现数据中的价值 | 节省 IT 部署成本 |
大数据利用云计算的强大计算能力,可以更加迅速地处理海量数据的丰富信息,为用户提供更加方便的服务;
通过大数据的业务需求,也为云计算的落地找到更多、更好的实际应用。
云计算和大数据技术的联合改变了计算机的运行方式,也正在改变着各行各业的商业模式。
虚拟化技术的定义
计算机虚拟化是一个广义的术语,简单来说,是指计算机相关模块在虚拟的基础上而不是真实独立的物理硬件基础上运行,这种把有限的固定资源根据不同的需求进行重新规划以达到最大利用率,从而实现简化管理、优化资源等目的的思路,就叫做虚拟化技术。
虚拟化包含了以下三层含义
虚拟化技术的优势
虚拟化的技术实现
基础设施虚拟化
硬件虚拟化
网络虚拟化
局域网虚拟化
广域网虚拟化
存储虚拟化
基于存储设备
基于网络
文件虚拟化
系统虚拟化
软件虚拟化
虚拟化的应用领域
应用程序虚拟化
服务器虚拟化
服务器虚拟化是 IaaS 的基础
服务器虚拟化架构
Guest OS、VMM(Hypervisor)
寄生架构(Hosted)
裸金属架构(Bare-metal)
服务器虚拟化实现原理
桌面虚拟化
网络虚拟化
存储虚拟化
分布式系统是建立在网络之上的支持分布式处理的软件系统,同样具有软件的内聚性和透明性。
分布式文件系统
Lustre、GFS、HDFS、FastDFS、MogileFS
分布式数据库系统
BigTable、HBase、CouchDB、MongoDB
分布式计算
体系结构
网络系统
硬件系统
软件系统
单机操作系统
Google 云计算底层软件系统
Google 应用
核心技术
存储架构 Dynamo
弹性计算云 EC2
简单存储服务 S3
简单队列服务 SQS
其他 AWS
计算服务
数据存储服务
其他服务
计算服务
数据存储服务
数据分析服务
其他服务
计算服务
数据存储服务
数据分析服务
其他服务
计算服务
数据存储服务
数据分析
其他服务
大数据应用系统架构原则
大数据给传统应用架构带来了巨大的挑战
进行大数据应用架构的总体设计时,需要遵循以下原则
Apache 大数据应用系统架构模型
物理服务器 -servers
OS 和 Hypervisor
数据存储层 -Storage Framework
数据处理层 -Processing Framework
Network
访问层 -Access Framework
完成数据高层次处理 -Orchestration Framework
企业数据仓库和商业智能 -EDW 和 BI
企业大数据应用系统架构模型
数据源
存储层
计算层
分析层
应用层
服务管理和系统安全
数据收集技术
设备数据收集
Web 数据爬取
数据预处理技术
数据清洗技术
数据集成技术
数据规约技术
数据转换技术
数据存储技术
分布式存储技术与数据存储介质的类型以及数据的组织管理形式直接相关
数据存储介质类型
数据组织管理形式
数据组织管理层次
分布式文件系统
文档存储
列式存储
键值存储
图形数据库
RDB
内存存储
数据处理技术
MapReduce 分布式计算框架
分布式内存计算系统
分布式流计算系统
数据挖掘技术
数据挖掘(Data Mining)是从大量的、不完全的、有噪声的、模糊的、随机的数据中提取潜在有用的信息的过程。
数据挖掘的方法
分类法
把数据分成训练集和测试集,对历史训练集训练,生成分类器,应用到测试集中,对分类器的性能和准确性作出评判。
K 最近邻算法(KNN)
决策树分类法
贝叶斯分类法
神经网络(Neural Net)
支持向量机(SVM)
分类算法的评估
关联分析法
支持度和置性度
先找出频繁 k 项集,再由频繁项集产生强规则。
Apriori 算法
关联模式的评估
聚类
与分类的不同在于:聚类所要求划分的类别是未知的,是将数据分到不同的类或簇的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的差异性。
聚类是数据挖掘的主要任务之一,也可以作为其他算法(如分类)的预处理步骤。
常用的聚类算法被分为五类:划分方法、层次方法、基于密度的方法、基于网络的方法和基于模型的方法。
K-Means 算法
层次聚类技术
聚类的评价方式
数据分析和数据可视化技术
数据可视化是指将大型数据集里的数据以图形图像形式表示,并利用数据分析和开发工具发现其中未知信息的处理过程。
数据可视化技术的基本思想是:将数据库中的每一个数据项作为单个图元素表示,使大量的数据集构成数据图像,同时将数据的各个属性值以多为数据的形式表示,使用户可以从不同的维度观察数据,对数据进行更深入的观察和分析。
数据可视化的基本概念
数据可视化的标准
数据可视化的作用
常用的数据分析和可视化工具
大数据安全
大数据带来的安全挑战
大数据安全与隐私保护关键技术
Google 的技术与产品研发
微软的 HDInsight
IBM 的 InfoSphere
Hadoop 系统架构
Storm 流计算系统
Spark 迭代计算框架
其他产品
HDFS 分布式存储方式,提高了读写速度、扩大了存储容量。具有高容错性,使得 Hadoop 可以部署在低廉的计算机集群中,同时不限于某个操作系统。
MapReduce 整合分布式文件系统上的数据,保证分析和处理数据的高效。
采用存储冗余数据的方法保证数据的安全性。
为什么不用传统数据库加上更多的磁盘来进行大规模批量分析?
在许多情况下,MapReduce 能够被视为一种 RDBMS 的补充。它们有何区别?
HDFS(Hadoop 分布式文件系统)
HDFS 是 Hadoop 项目的核心子项目,是分布式计算中数据存储管理的基础。
它基于流数据模式访问和处理超大文件的需求而开发,可以运行在廉价的商用服务器上。
HDFS 具有的高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集(Large Data Set)的应用处理带来了很多便利。
HDFS 的设计目标
检测和快速恢复硬件故障
流式的数据访问
简化一致性模型
通信协议
HDFS 的体系结构
HDFS 的构成组件
数据块
NameNode 和 DataNode
NameNode 管理 FS 的命名空间
将元数据保存在一个文件系统树中
DataNode 是 FS 中真正存储数据的地方
Client 或者 NameNode 可以向 DataNode 请求写入或读出数据,DataNode 周期性地向 NameNode 汇报其存储地数据块信息。
Client 获得地址后直接连接 DataNode 读取数据
读出数据块的处理过程
Client 调用 FileSystem 对象的 open()。FileSystem 是 HDFS 中 DistributedFileSystem 的一个实例。
DistributedFileSystem 通过 RPC 协议,调用 NameNode 请求文件块位置。
DFSInputStream 对象包含文件开始数据块的 DataNode 地址,会连接最近的一个,随后在数据流中重复调用 read(),直到这个块完全读完。
第一个块读取完毕时,DFSInputStream 关闭连接,查找下一个距客户端最近的存储数据块的 DataNode。
以上步骤对于 Client 是透明的。
Client 按照 DFSInputStream 打开连接和 DataNode 返回数据流的顺序读取该块,它也会调用 NameNode 来检索下一组块所在的 DataNode 的位置信息。完成读取时,Client 在 DFSInputStream 调用 close()。
如果读取数据时节点出现故障,Client 会尝试连接存储该块的下一个最近的 DataNode,同时记录故障,以免再次连接该节点。
Client 还会验证从 DataNode 传送过来的数据的校验和,如果发现一个损坏块,将再次尝试从别的 DataNode 读取数据块,并向 NameNode 报告信息,NameNode 会更新保存的文件信息。
请求写入数据的处理过程
Client 调用 DistributedFileSystem 对象的 create(),创建一个文件。
DistributedFileSystem 通过 RPC 协议,在 NameNode 的 FS ns 中创建一个新文件,此时没有 DataNode 与之相关。
NameNode 进行多种验证以保证新建文件不再 FS 中,并确保请求 Client 拥有创建文件的权限。
NameNode 创建一个新文件的记录,如果创建失败,抛出 IOException;如果成功,则 DistributedFileSystem 返回一个 FSDataOutputStream。FSDataOutputStream 也包含 DFSOutputStream 对象,处理 DataNode 与 NameNode 的通信。
Client 写入数据,DFSOutputStream 将文件分割成包,放入一个内部队列 DataStreamer,由它将文件包放入数据流。
在传送文件时,DFSOutputStream 也会保存一个包的内部队列,用来等待管道中的 DataNode 返回确认信息,称为确认队列。
数据写入节点失败时,关闭管道,任何在确认队列中的文件包都会被添加到数据队列的前端,这样管道中写入失败的 DataNode 都不会丢失数据,而当前存放于正常工作 DataNode 上的文件块被利用,并和 NameNode 关联。
如果写入失败的 DataNode 恢复,其中的部分数据块会被删除,管道把失败的 DataNode 删除,文件会继续写入管道中另外两个 DataNode 中。最后,NameNode 会注意到文件块副本数没有达到配置要求,就会重新副本。随后文件就会正常执行写入操作。
Client 写入完成后调用 close()。Client 在连接 NameNode 确认之前,将剩下的文件包放入 DataNode 管道,等待通知确认信息。NameNode 会知道那些块组成一个文件(通过 DataStreamer 获得块的位置信息),NameNode 只要在返回成功标志前等待块被最小量(dfs.replication.min)复制即可。
从元数据节点(SecondaryNameNode)
CheckpointNode
BackupNode
JournalNode
解决单点瓶颈。
允许同时启动两个 NameNode,分别处于工作状态和待命状态。这些 NameNode 通过共享数据,保证数据的状态一致性。
DataNode 必须配置两个 NameNode 地址,发送数据块位置信息和心跳信息。
JournalNode 要确保同一时刻只有一个 NameNode 可以向自己写数据。
为了部署该类型集群,应进行以下准备
HDFS 本地存储目录结构
HDFS 的安全措施
冗余备份
副本存放
心跳检测
安全模式
MapReduce(分布式计算框架)
YARN(集群资源管理器)
为上层应用提供统一的资源管理和调度,给集群的利用率、资源统一管理和数据共享等方面带来了巨大的好处。
经典的 MapReduce 有以下局限性
ZooKeeper(分布式协作服务)
一个分布式的服务框架,主要解决分布式集群中应用系统的一致性问题,能提供与目录节点树 FS 类似方式的数据存储。
ZooKeeper 不是专门用来存储数据的,它的作用主要是监控所存储数据的状态变化,并通过监控这些变化,实现基于数据的集群管理。
ZooKeeper 是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关心的数据,并接受观察者注册,在数据状态变化时通知观察者,从而实现类似于 Master/Slave 的架构。
统一命名服务
配置管理
集群管理
共享锁
队列管理
HBase(分布式 NoSQL 数据库)
Hive(数据库管理工具)
Pig(高层次抽象脚本语言)
一种用来检索非常大的数据流语言和运行环境,大大简化了 Hadoop 常见的工作任务。Pig 可以加载数据、表达转换数据并存储最终结果,其内置的操作使得半结构化数据变得有意义。
Pig 和 Hive 都为 HBase 提供了高层语言支持,使得在 HBase 上进行数据统计处理变得非常简单。二者有何区别?
Avro
Sqoop
分布式并行环境的最大优点
Google 就使用 MapReduce 的并行编程模型,进行分布式并行编程。它运行在名为 GFS 的分布式 FS 上,为全球亿万用户提供搜索服务。
Hadoop 也实现了 MapReduce 编程模型,提供了简单、易用的编程接口以及自己的 DFS HDFS。
适用于 MapReduce 处理的数据集(或者任务)需要满足一个基本要求:
待处理的数据集可以分解成许多小的数据集,且每一个小数据集都可以完全并行地处理。
一个 MapReduce 作业(Job)通常会把输入的数据集切分为若干独立的数据块,由 Map 任务(Task)完全并行地处理;
MapReduce 框架会对 Map 的输出进行排序,把结果输入给 Reduce 任务。通常作业的输入和输出存储在 FS 中,而由整个框架负责任务的调度和监控,并重新执行已经失败的任务。
通常 MapReduce 框架和 DFS 运行在一组相同节点
MapReduce 框架由一个单独的 Master JobTracker 和每个集群节点各一个 Slave TaskTracker 共同完成
应用程序应指明输入 / 输出的位置(路径),并通过实现合适的接口或抽象类提供 Map 和 Reduce 函数,再加上其他作业的参数,构成作业配置(Job configuration);
然后,Hadoop 的 Job Client 会将作业(Jar 包 / 可执行程序等)和配置信息提交给 JobTracker,后者负责将这些程序和配置信息发给 Slave,调度任务并监控它们的执行,同时将状态和诊断信息提供给 Job Client。
MapReduce 程序不一定使用 Java 编写
MapReduce 计算模型的核心使 Map 和 Reduce 函数。以一个统计文本单词的程序为例,可以是:
< 行在文件中的偏移, 文件中的一行 >
↓map()
List< 单词, 出现次数 >
↓
< 单词, List< 出现次数 >>
↓reduce()
< 单词, 出现次数 >
基于 MapReduce 计算模型编写分布式并行程序非常简单
Client
ResourceManager
NameNode
ApplicationMaster
NodeManager
DataNode
Container
MapReduce 采用了分治算法
工作流程概述
MapReduce 任务的执行流程
JobTracker
在分布式环境中实现 Client 任务的创建和提交
InputFormat
进行 Map 前的预处理
将 RR 处理后的结果作为 Map 的输入数据,Map 执行 Map 逻辑,将键值对结果输入到临时中间文件。
Shuffle&Partitioner
Reduce 执行具体的业务逻辑,将处理结果输入给 OutputFormat。
MapReduce 过程包含的部分
输入文件
输入格式
定义了如何分割和读取输入文件。
选择输入的文件或对象;
定义把文件划分到任务的 IS;
为 RR 读取文件提供一个工厂方法。
FileInputFormat
Hadoop 启动时,FIF 得到一个路径参数,包含了需要处理的文件,FIF 将这些文件拆分成一个或多个 IS。
输入块
记录读取器
Mapper
Partition&Shuffle
Reducer
输出格式
控制提供给 OutputCollector 的键值对写入文件的方式。
每一个 Reducer 把结果输出写在公共文件夹中一个单独的文件“part-nnnnn”,”nnnnn“是关联到 Reduce 任务的 Partition 的 ID。
FileOutputFormat
RecordWriter
shuffle 过程详解
数据分布存储
分布式并行计算
Hadoop 由中 JobTracker 调度和管理其他的 TaskTracker。负责执行任务的 TaskTracker 必须运行在 DataNode 上。
在进行 MapReduce 任务调度时,要保证 Master 节点的 NameNode、SecondaryNameNode、JobTracker 和 Slave 节点的 DataNode、TaskTracker 都已启动。
MapReduce 任务调度包括以下两步
JobClient 提交作业
runJob(job)实例化 JobClient
submitJob(job)像 JobTracker 提交作业
返回 RunningJob 对象,跟踪作业状态
submitJobInternal(job)向 HDFS 依次上传三个文件
job.jar
job.split
job.xml
JobTracker 调度作业
本地计算
任务粒度
Partition
Combine
Reduce 任务
大数据——吉姆·格雷(Jim Gray)
虚拟化出的目标对象 | 所处位置 | 实例 | |
---|---|---|---|
指令集架构级虚拟化 | 指令集 | 指令集架构级 | Bochs、VLIW |
硬件级虚拟化 | 计算机的各种硬件 | 应用层 | VMWare、Virtual PC、Xen、KVM |
操作系统级虚拟化 | 操作系统 | 本地操作系统内核 | Virtual Server、Zone、Virtuozzo |
编程语言级虚拟化 | 应用层的部分功能 | 应用层 | JVM、CLR |
库函数级虚拟化 | 应用级库函数的接口 | 应用层 | 应用层 |
集群系统是一组独立的计算机(节点)的集合体,节点间通过高性能的互联网络连接,各节点除了作为一个单一的计算资源供交互式用户使用外,还可以协同工作,并表示为一个单一的、集中的计算资源,供并行计算任务使用。
集群系统是一种造价低廉、易于构建并且具有较好可扩放性的体系结构。
高可用性集群系统
负载均衡集群系统
高性能集群系统
虚拟化集群系统
数据类型
数据操作
存储模式
数据维护
数据伸缩性
高级数据处理语言 Pig Latin
依据可供抽样的评价机制编译与运行 Pig Latin 脚本的编译器
Local 模式
MapRedduce 模式