云计算与大数据概论
时间:2023-04-21 19:37:01
云计算和大数据概述
云计算的概念
- 云计算(Cloud Computing)分布式计算(Distributed Computing)、并行处理(Parallel Computing)和网格计算(Grid Computing)发展而来。
- 狭义
制造商通过分布式计算和虚拟化技术建立数据中心或超级计算机,为技术开发者或企业客户提供数据存储、分析和科学计算服务。 - 广义
通过建立网络服务器集群,制造商为不同类型的客户提供在线软件使用、硬件租赁、数据存储、计算分析等服务。
云计算的特点
- 超大规模
- 虚拟化
- 高可靠性
- 通用性
- 高可扩展性
- 按需服务
- 极其廉价
大数据的特点
- 数据量大
- 多样性
- 价值密度低
- 时效性要求高
- 真实性
云计算分类
-
所有权来分
- 私有云
- 共有云
- 混合云
-
分为服务类型
-
IaaS
- EC2、Azure
-
PaaS
- Google App Engine、Hadoop
-
SaaS
- Google Doc、Google Apps、Zoho Office
-
DaaS
-
主流云计算和大数据供应商
-
Amazon 云计算
- 弹性计算云、简单存储服务、弹性块存储服务RDB 服务、NoSQL DB 还提供与网络、数据分析、机器学习、物联网、移动服务开发、云管理、云安全等相关的服务
-
IBM 云计算
-
Google 云计算
- GAE
-
微软云计算
- Azure、SkyDrive、Office 365
-
阿里巴巴云服务
-
阿里云基于电子商务的技术专长包括处理并发事务、控制所有事务状态、控制交易安全等。
-
飞行开放平台(Apsara)
- 负责管理 Linux 集群的物理资源控制分布式程序的运行,隐藏下层故障恢复和数据冗余的细节,从而将成千上万的服务器连接到超级计算机中。
-
云计算基础服务
- ECS、CDN、RDS、OSS、SLB
-
域名和网站服务
-
安全服务
- 云盾
-
大数据服务
- 大数据可视化和计算服务
-
-
百度开放云
- 云服务器 BCC、BLB、BOS、云磁盘 CDS、CDN、RDS、缓存服务简单 SCS
-
腾讯云平台
-
计算和网络服务
- 云服务器,弹性 Web 引擎 CEE、均衡负荷服务
-
存储于 CDN 服务
- CDB、NoSQL 高速存储,对象存储服务 COS、CDN
-
监控和安全服务
- 云监控,云安全
-
大数据服务
- 大数据处理 TOD、腾讯云分析
-
云计算与大数据的关系
-
从技术上
-
大数据根植于云计算,云计算关键技术中的海量数据存储和管理技术以及 MapReduce 并行编程模型是大数据技术的基础。
-
云计算技术
- 虚拟化技术
- 云计算平台管理技术
- MapReduce 编程模型
- 大量数据存储技术
- 海量数据管理技术
-
-
从整体上
- 大数据注重数据,注重实际业务,包括数据采集、分析和挖掘技术,注重信息沉淀,即数据存储能力;
- 云计算侧重于计算 IT 解决方案,提供 IT 计算能力重视计算能力,即数据处理能力。
- 大数据技术可以处理微博、图片、文章、电子邮件、文档、音频、视频等各种类型的海量数据;
它处理数据非常快,几乎实时;
它很受欢迎,因为它使用最常见的第成本硬件。 - 云计算技术将计算任务分布在由大量计算机组成的资源池上,用户可以根据需要获得计算处理能力、存储空间等服务,实现廉价的超级计算和存储能力。
这种低成本硬件 低成本软件 低成本运维”模式更加经济和实用,能够很好地支持大数据存储和处理需求,使得从大数据中获得有价值的信息成为可能。
-
云计算与大数据技术的异同
大数据 云计算 总体关系 为云计算提供了有价值的用武之地 它为大数据提供了有力的工具和方法 相同点 服务于数据存储和处理; (共同技术)需要大量的存储和计算资源 背景 现有的数据处理不能胜任社交网络和物联网产生的大量异构数据,但它们有很大的价值 基于互联网的相关服务越来越丰富和频繁 目的 在海量数据中充分挖掘信息 资源和能力通过互联网更好地调用、扩展和管理计算和存储 对象 数据 IT 资源、能力和应用 推动力量 软件制造商从事数据存储和处理,企业有大量数据的企业 生产计算和存储设备的制造商、具有计算和存储资源的企业 价值 在数据中找到价值 节省 IT 部署成本 -
利用云计算的强大计算能力,大数据可以更快地处理大量数据的丰富信息,为用户提供更方便的服务;
通过大数据的业务需求,也为云计算的落地找到更多、更好的实际应用。
云计算与大数据技术的结合改变了计算机的运行模式,也改变了各行各业的商业模式。
云计算技术
虚拟化技术
-
定义虚拟化技术
-
计算机虚拟化是一个广义术语,简单地说,是指计算机相关模块基于虚拟而不是真正独立的物理硬件,根据不同的需要重新规划有限的固定资源,以达到最大利用率,从而实现简化管理、优化资源的目的,称为虚拟化技术。
-
虚拟化包含以下三个含义
- 虚拟化对象是各种资源l>
- 经过虚拟化后的逻辑资源对用户隐藏了不必要的细节
- 用户可以在虚拟环境中实现其在真实环境中的部分或者全部功能
-
-
虚拟化技术的优势
- 可以大大提高资源的利用率
- 可以提供相互隔离的安全、高效的应用执行环境
- 虚拟化系统能够方便地管理和升级资源
-
虚拟化的技术实现
-
基础设施虚拟化
-
硬件虚拟化
- CPU、内存、硬盘、声卡、显卡、光驱
-
网络虚拟化
-
局域网虚拟化
- VLAN
-
广域网虚拟化
- VPN
-
-
存储虚拟化
-
基于存储设备
- RAID
-
基于网络
- 存储局域网(SAN)、网络存储(NAS)
-
-
文件虚拟化
-
-
系统虚拟化
- PC 上
- 服务器上
- 桌面虚拟化
-
软件虚拟化
- 应用虚拟化
- 高级语言虚拟化技术
-
-
虚拟化的应用领域
-
应用程序虚拟化
- 应用虚拟化是 SaaS 的基础
-
服务器虚拟化
-
服务器虚拟化是 IaaS 的基础
-
服务器虚拟化架构
Guest OS、VMM(Hypervisor)-
寄生架构(Hosted)
- Virtual Box
-
裸金属架构(Bare-metal)
- KVM、Xen、VMware ESX
-
-
服务器虚拟化实现原理
- CPU 虚拟化
- 内存虚拟化
- 设备与 I/O 虚拟化
-
-
桌面虚拟化
-
网络虚拟化
- 网络虚拟化也是 IaaS 的基础之一
-
存储虚拟化
-
分布式技术
-
分布式系统是建立在网络之上的支持分布式处理的软件系统,同样具有软件的内聚性和透明性。
-
分布式文件系统
Lustre、GFS、HDFS、FastDFS、MogileFS -
分布式数据库系统
BigTable、HBase、CouchDB、MongoDB -
分布式计算
- 实时性要求不高
- 允许存在计算错误
云计算平台
Google 云平台
-
体系结构
-
核心技术
- GFS
- MapReduce
- Chubby
- BigTable
- Megastore
- Dapper
Amazon 云平台
-
存储架构 Dynamo
-
弹性计算云 EC2
- SSH
- Amazon 机器镜像 AMI
- 弹性块存储 EBS
- EC2 通讯机制
- ELB
- 监控服务 CloudWatch
-
简单存储服务 S3
-
简单队列服务 SQS
-
其他 AWS
- RDS
- Amazon CloudFront
- 快速应用部署 Elastic Beanstalk 和服务模板 CloudFormation
微软 Windows Azure 平台
-
计算服务
- 虚拟机
- 云服务 Cloud Services
- 批处理
-
数据存储服务
- 文件存储服务
- RDB 存储服务
- DocumentDB
-
其他服务
- 通知中心服务
- Azure Redis 缓存服务
- 物联网相关服务
阿里云服务平台
-
计算服务
- ECS
- 批量计算 BatchCompute
- 专有网络 VPC
- 弹性伸缩 AS
-
数据存储服务
- 文件存储 NAS
- 云数据库 RDS
- 云数据库 Redis 版
-
数据分析服务
- 阿里云机器学习平台
- 推荐引擎
- DataV 数据可视化服务
-
其他服务
- CDN
- 域名、移动推送、语言、短信、云监控等
百度开发者云平台
-
计算服务
- 百度物理服务器 BBC
- 百度应用引擎 BAE
-
数据存储服务
- 百度对象存储 BOS
- RDS
- 简单缓存服务 SCS
-
数据分析服务
- BMR
- 百度深度学习平台 Paddle
-
其他服务
- 人脸识别 BFR
- 光符识别 OCR
- 文档服务 DS
- 物接入
腾讯云服务平台
-
计算服务
- 云服务器 CVM
- 物理服务器 CPM
- 弹性伸缩 AS
- 消息服务 CMQ
-
数据存储服务
- 对象存储服务 COS
- 云数据库 CDB
- 云存储 Redis(CRS)
- 分布式云数据库 DDB
-
数据分析
- 腾讯机智机器学习 TML
- 腾讯大数据处理套件 TBDS
- 用户洞察分析 CP
-
其他服务
- 点播 VOD
- 直播 LVB
大数据技术
大数据应用系统架构
-
大数据应用系统架构原则
-
大数据给传统应用架构带来了巨大的挑战
- 数据容量方面
- 数据分析方面
- 企业级应用标准方面
-
进行大数据应用架构的总体设计时,需要遵循以下原则
- 满足“5V”要求,具备大容量数据的加载、处理和分析的能力;具备各种类型数据的加载、处理和分析能力;满足大数据处理速度的要求。
- 满足企业级应用的要求,具备高可扩展性、高可用性、高安全性、高开放性和易用性。
- 满足分析原始格式数据的要求,具备整合分析复杂的原始格式数据的能力。
-
-
Apache 大数据应用系统架构模型
-
物理服务器 -servers
-
OS 和 Hypervisor
-
数据存储层 -Storage Framework
- HDFS
-
数据处理层 -Processing Framework
- MapReduce 处理模型
-
Network
-
访问层 -Access Framework
- Pig
基于 Hadoop 的大规模数据分析工具,提供类 SQL 的查询语言 Pig Latin。 - Hive
建立在 Hadoop 上的数据仓库基础架构。提供了简单的类 SQL 查询语言 HQL。用于静态批处理。 - Sqoop
将 Hadoop 和 RDB 中的数据相互转移的工具。
- Pig
-
完成数据高层次处理 -Orchestration Framework
- HBase
具有高可靠性、高性能、面向列、可伸缩、可在廉价 PC 服务器上搭建大规模结构化存储集群等特点。能将零散的、非结构化文件数据结构化,从而进行一些高层次操作。 - Avro
基于二进制数据高性能传输的中间件、数据序列化系统。 - Flume
Cloudera 公司提供的一个对海量日志进行采集、聚合和传输的分布式系统。 - ZooKeeper
Google 的 Chubby 的一个开源实现,是一个针对大型分布式系统的可靠协调系统,其功能包括配置维护、名字服务、分布式同步、组服务等。ZooKeeper 的目标是封装好复杂且易出错的关键服务,将简单易用的接口与性能高效、高能稳定的系统提供给用户。
- HBase
-
企业数据仓库和商业智能 -EDW 和 BI
- EDW 致力于研究和解决从数据库中获取信息的问题,是一个以 RDB 为依托,以数据仓库理论为指导,以 OWB(Oracle Warehouse Builder)、ODI(Oracle Data Integrator)、IPC(IndormaticPowerCenter)等抽取、转换、装载(Extract-Transform-Load,ETL)工具进行数据集成、整合、清洗与加载转换,以前端工具进行前端报表展现,一反复迭代验证为生命周期的综合处理过程。
- BI 同样是一套辅助决策的智能系统,其核心是帮助企业利用好数据,让决策管理者能够随时随地地获取关键信息,基于数字作出决策,最终提高决策水平。
-
-
企业大数据应用系统架构模型
-
数据源
- 结构化数据
- 非结构化数据
- 半结构化数据
- 流数据
-
存储层
- DBMS
- NoSQL
- HDFS
-
计算层
- 离线处理
- 流计算框架
- 内存计算
-
分析层
- 数据挖掘
- 分析和查询工具
- 可视化
-
应用层
- 应用软件
- 商业智能
-
服务管理和系统安全
-
大数据关键技术
-
数据收集技术
-
设备数据收集
- Splunk
- Sqoop
- Flume
-
Web 数据爬取
- Heriteix
- Nutch
-
-
数据预处理技术
-
数据清洗技术
- 数据不一致检测技术
- 脏数据识别技术
- 数据过滤技术
- 数据修正技术
- 数据噪声的识别与平滑技术
-
数据集成技术
- 把来自多个数据源的数据进行集成,缩短数据之间的物理距离,形成一个集中统一的(同构 / 异构)数据库、数据立方体、数据宽表或文件。
-
数据规约技术
- 可以在不损害挖掘结果准确性的前提下,降低数据集的规模,得到简化的数据集。
- 维规约技术
- 数值规约技术
- 数据抽样技术
-
数据转换技术
- 包括基于规则或元数据的转换技术、基于模型和学习的转换技术等。
- 经过数据转换处理的数据被变换或者统一,简化了处理一分析过程,提升了时效性,也使得数据分析与挖掘的模式更容易被理解。
-
-
数据存储技术
-
分布式存储技术与数据存储介质的类型以及数据的组织管理形式直接相关
-
数据存储介质类型
- 内存
- 磁盘
- 磁带等
-
数据组织管理形式
- 按行组织
- 按列组织
- 按键值对组织
- 按关系组织等
-
数据组织管理层次
- 块级组织
- 文件级组织
- 数据库级组织等
-
-
分布式文件系统
- HDFS、GFS、KFS、Tachyon(Spark 平台的分布式内存文件系统)
-
文档存储
- MongoDB、CouchDB、Terrastore、RavenDB
-
列式存储
- Sybase IQ、InfiniDB、Vertica、Hadoop HBase、Infobright
-
键值存储
- Redis、Apache Cassandra、Google BigTable
-
图形数据库
- Google Pregel、Neo4j、Infinite Graph、DEX、InfoGrid、AllegroGraph
-
RDB
-
内存存储
- Oracle TimesTen、Altibase、eXtremeDB、Redis、Memcached
-
-
数据处理技术
-
MapReduce 分布式计算框架
- 可动态增加或减少计算节点具有很高的计算弹性,并且具备优秀的任务调度能力和资源分配能力,具有很好的扩展性和容错性。
- 确保了数据存储的有效性,减少了数据在网络中的传输开销,还能重新运行失败的任务。
-
分布式内存计算系统
- SAP HANA、Oracle BigData Application
- Spark
使用有向无环图(DAG)、迭代计算和内存计算等方式,可以实现一到两个数量级的计算效率提升。
-
分布式流计算系统
- IBM StreamBase、InfoSphere Streams、Twitter Storm、Yahoo S4、Spark Streaming
-
-
数据挖掘技术
-
数据挖掘(Data Mining)是从大量的、不完全的、有噪声的、模糊的、随机的数据中提取潜在有用的信息的过程。
-
数据挖掘的方法
-
分类法
-
把数据分成训练集和测试集,对历史训练集训练,生成分类器,应用到测试集中,对分类器的性能和准确性作出评判。
-
K 最近邻算法(KNN)
- 依据最近邻的一个或几个样本的类别决定待分样本所属的类别。
- 依靠有限的邻近样本,而不是靠判别类域,适合类域交叉或重叠较多的待分样本。
-
决策树分类法
- 应用广泛的归纳推理算法,适合处理类别型变量或连续型变量的分类预测问题。
-
贝叶斯分类法
- 用先验概率和类条件概率来表示后验概率。
-
神经网络(Neural Net)
- 在环境的激励下,相继给网络输入一些样本模式,并按一定的规则(学习算法)调整网络各层次的权值矩阵,待网络各层权值都收敛到一定值,学习过程就结束。
-
支持向量机(SVM)
- 找到一个最优超平面,将两类正确分开,且分类间隔最大。
-
分类算法的评估
- 准确率 = 正确预测数 / 预测总数
-
-
关联分析法
-
支持度和置性度
-
先找出频繁 k 项集,再由频繁项集产生强规则。
-
Apriori 算法
- 逐层搜索
-
关联模式的评估
- 统计论据
如对支持度、置信度和相关性的度量 - 主观论据
如可视化、基于模板的方法、主观兴趣度度量
- 统计论据
-
-
聚类
-
与分类的不同在于:聚类所要求划分的类别是未知的,是将数据分到不同的类或簇的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的差异性。
-
聚类是数据挖掘的主要任务之一,也可以作为其他算法(如分类)的预处理步骤。
-
常用的聚类算法被分为五类:划分方法、层次方法、基于密度的方法、基于网络的方法和基于模型的方法。
-
K-Means 算法
- 将各个聚类子集内的所有数据样本的均值作为该聚类的代表点。不适合处理离散型数据。
-
层次聚类技术
- 不产生单一聚类,而是产生一个聚类层次,即一棵层次树。
-
聚类的评价方式
- 分析外部信息。直观信息,即聚类结束产生的类别。
- 分析内部信息。比较簇类相似性和簇间差异性等。
-
-
-
-
数据分析和数据可视化技术
-
数据可视化是指将大型数据集里的数据以图形图像形式表示,并利用数据分析和开发工具发现其中未知信息的处理过程。
-
数据可视化技术的基本思想是:将数据库中的每一个数据项作为单个图元素表示,使大量的数据集构成数据图像,同时将数据的各个属性值以多为数据的形式表示,使用户可以从不同的维度观察数据,对数据进行更深入的观察和分析。
-
数据可视化的基本概念
- 数据空间。有 n 维属性、m 个元素共同组成的数据集构成的多维信息空间。
- 数据开发。使用一定的工具及算法,对数据进行定量推演及计算。
- 数据分析。对多为数据进行切片、块、旋转等操作,剖析数据,以从多角度多侧面观察数据。
- 数据可视化。将大型数据集里的数据通过图形图像方式表示,并利用数据分析和开发工具发现其中的未知信息。
-
数据可视化的标准
- 直观化。将数据直观、形象地呈现出来。
- 关联化。突出呈现出数据之间地关联性。
- 艺术性。使数据的呈现更具有艺术性,更加符合审美规则。
- 交互性。实现用户与数据的交互,方便用户控制数据,
-
数据可视化的作用
- 跟大部分项目一样,也是根据需求,基于数据维度或属性进行筛选,并根据目的和用户群选用合适的可视化表现形式,同一份数据可以表现为多种看起来截然不同的形式。
- 如果目标是观测、跟踪数据,就要强调实时性、变化和运算能力,最终可能生成一份不停变化、可读性强的图表,如百度地图;
- 如果为了分析数据,就要强调数据的呈现度,最终可能生成一份可以检索的交互式图表;
- 如果为了发现数据之间的潜在关联,则可能生成一份多维的分布式图表;
- 如果为了帮助普通用户或商业用户快速理解数据的含义或变化,可以使用漂亮的颜色和动画,创建生动、明了、具有吸引力的图表,如微软“人立方”展现的人物关系图;
- 有些可视化图表可以用于教育、宣传或政治目的,往往制作成海报和课件,出现在街头、广告手持、杂志和集会上,多使用强烈对比、置换等手段,创造出极具冲击力的图像,具有强大的说服力,如媒体根据新闻主题或数据,雇佣设计师创建可视化图表,对新闻主题进行辅助报道。
-
常用的数据分析和可视化工具
-
-
大数据安全
-
大数据带来的安全挑战
- 大数据中的用户隐私保护问题
- 大数据的可信性
- 大数据的访问控制
-
大数据安全与隐私保护关键技术
- 基于大数据的威胁发现技术
- 基于大数据的认证技术
- 法律层面的隐私保护技术
-
主流大数据服务
-
Google 的技术与产品研发
- Percolator
- Pregel
- Dremel
-
微软的 HDInsight
-
IBM 的 InfoSphere
开源大数据平台
-
Hadoop 系统架构
- 分布式文件系统 HDFS
- 分布式大表存储 HBase
- 批处理计算框架 Hadoop MapReduce
- 资源管理 YARN
- 数据传输、数据分析处理、管理与协同服务等 Avro、Hive、Pig、OoZie、ZooKeeper、Mahout
- Cloudera ADH 版本、Hortonworks HDP 版本
-
Storm 流计算系统
- 一个分布式的、容错的实时流计算系统,由 Twitter 正式开源,能够逐条接收和处理数据记录,具有很好的实时响应特性。
- Storm 实时计算被用于“流处理”中,能实时处理消息并更新数据。Storm 借助实时的信息交互与通信组件(如 Kafka、ZeroMQ、Netty 等)对大数据中的记录进行逐条处理,响应实时性可以达到秒级别甚至更短。
- Storm 还能与 HDFS、YARN 有效集成,进一步扩展了其再大数据领域的使用范围。
-
Spark 迭代计算框架
- 一个以 MapReduce 计算模型为原型实现的高效迭代计算框架。通过把数据放入内存(RDD,弹性数据集)和有向无环图任务计划安排,大幅度缩减了迭代计算中的 I/O 耗时,提高了任务效率。
- 除了能与 HDFS、YARN 有效集成,伯克利大学还为 Spark 提供了支持流处理能力的 Spark Streaming 组件,使其具有了更快的分析、计算和响应速度。
-
其他产品
Hadoop 开发平台
Hadoop 的发展史
Hadoop 的功能与作用
-
HDFS 分布式存储方式,提高了读写速度、扩大了存储容量。具有高容错性,使得 Hadoop 可以部署在低廉的计算机集群中,同时不限于某个操作系统。
-
MapReduce 整合分布式文件系统上的数据,保证分析和处理数据的高效。
- MapReduce 是一种线性的可伸缩的编程模型,程序员编写两个函数——Map 和 Reduce——每一个都定义一个键值对集映射到另一个。这些函数无视数据的大小或者它们正使用的集群的特性,可以原封不动地应用到小规模数据集或者大的数据集上。
-
采用存储冗余数据的方法保证数据的安全性。
-
为什么不用传统数据库加上更多的磁盘来进行大规模批量分析?
- 寻址时间(磁头寻道)的提高速度远远慢于传输速率(磁盘带宽)的提高速度。如果数据的访问模式受限于磁盘的寻址,势必会导致耗费更长时间(相较于流)来读或写大部分数据。
- B 树需要使用排序 / 合并来重建数据库,在更新大部分数据库记录时,效率没有 MapReduce 高。
-
在许多情况下,MapReduce 能够被视为一种 RDBMS 的补充。它们有何区别?
- MapReduce 适合处理那些需要分析整个数据集的问题(批处理方式),而 RDBMS 适用于点查询和更新(数据集已经被索引以提供低延迟的检索和短时间的少量数据更新)。
MapReduce 适合处理一次写入多次读取的数据,RDBMS 适合持续更新的数据集。 - 操作的数据集里的结构化数据的数量不同。MapReduce 处理非结构化或半结构化的数据时非常有效,因为它被设计为在处理时间内解释数据,即 MapReduce 输入的键和值并不是数据固有的属性,而是由分析数据的人来选择的。
- RDBMS 往往是规范的以保持其数据的完整性和消除冗余;而 MapReduce 使用异地操作进行记录的读取,而且核心价值之一就是可以进行高速流式的读写操作。
- RDBMS 和 MapReduce 地差异很可能变得模糊。RDBMS 开始吸收 MapReduce 的一些思路(ASTER DATA 和 GreenPlum 的数据库);基于 MapReduce 的高级查询语言(如 Pig 和 Hive)使 MapReduce 的系统能够更接近传统的 RDBMS 编程方式。
- MapReduce 适合处理那些需要分析整个数据集的问题(批处理方式),而 RDBMS 适用于点查询和更新(数据集已经被索引以提供低延迟的检索和短时间的少量数据更新)。
Hadoop 的基本组成
-
HDFS(Hadoop 分布式文件系统)
-
HDFS 是 Hadoop 项目的核心子项目,是分布式计算中数据存储管理的基础。
它基于流数据模式访问和处理超大文件的需求而开发,可以运行在廉价的商用服务器上。 -
HDFS 具有的高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集(Large Data Set)的应用处理带来了很多便利。
-
HDFS 的设计目标
-
检测和快速恢复硬件故障
- 数量庞大的服务器意味着高故障率,因此,故障的检测和自动快速就恢复时 HDFS 的一个核心目标。
-
流式的数据访问
- 适合进行批量处理,而不是用户交互式的处理,所以重视数据吞吐量,而不是数据访问的速度。
-
简化一致性模型
- 一个文件一旦经过创建、写入、关闭后就不需要修改了,从而简化了数据一致性问题和高吞吐量的数据访问问题。
-
通信协议
- 建立在 TCP/IP 之上。一个客户端和明确配置了端口的目录节点(NameNode)建立连接之后,它和目录节点(NameNode)的协议便是客户端协议(CP)。数据节点(DataNode)和目录节点(NameNode)之间则用数据节点协议(DP)。
-
-
HDFS 的体系结构
- 主从式结构(Master/Slave)
- 像传统的 FS 一样,可以通过目录路径对文件置性 CRUD,但由于分布式存储的性质,HDFS 拥有一个 NameNode 和一些 DataNode。NameNode 管理 FS 的元数据,DataNode 存储实际的数据。
- 客户端从 NameNode 中获得组成文件数据块的位置列表,再直接从 DataNode 读取文件数据,NameNode 不参与文件的传输。
- 一个集群只有一个 NameNode 的设计大大简化了系统。
-
HDFS 的构成组件
-
数据块
- 默认 64M。
- 如果一个文件小于一个数据块的大小,该文件并不占用整个数据块的存储空间。
-
NameNode 和 DataNode
-
NameNode 管理 FS 的命名空间
将元数据保存在一个文件系统树中- fsimage
截止到自身被创建为止的 HDFS 的最新状态文件 - edits
自 fsimage 创建后的 FS 操作日志 - NameNode 每次启动时,都要合并这两个文件,按 edits 的记录更新 fsimage。
- fsimage
-
DataNode 是 FS 中真正存储数据的地方
-
Client 或者 NameNode 可以向 DataNode 请求写入或读出数据,DataNode 周期性地向 NameNode 汇报其存储地数据块信息。
-
Client 获得地址后直接连接 DataNode 读取数据
- 可以将 HDFS 的应用扩展到更大规模的 Client 并行处理,因为数据的流动是在所有 DataNode 之间分散进行的;
- NameNode 的压力也变小了,避免了 NameNode 随着 Client 数量的增长而成为系统的瓶颈。
-
-
读出数据块的处理过程
-
Client 调用 FileSystem 对象的 open()。FileSystem 是 HDFS 中 DistributedFileSystem 的一个实例。
-
DistributedFileSystem 通过 RPC 协议,调用 NameNode 请求文件块位置。
- NameNode 返回调用文件中开始的几个块而不是全部块。
- 每个返回的块都包含块所在的 DataNode 地址,按 Hadoop 定义的集群拓扑结构得出客户端的距离,进行排序。如果 Client 本身就是一个 DataNode,就从本地读取文件。
- DistributedFileSystem 发起一个读取文件的请求,DistributedFileSystem 返回一个支持文件定位的 FSDataInputStream 对象,可以管理 DataNode 和 NameNode 之间的 I/O。
- 客户端调用输入流的 read()。
-
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,由它将文件包放入数据流。
- DataStreamer 的作用是请求 NameNode 为新的文件包分配合适的 DataNode 存放副本,返回的 DataNode 列表形成一个“管道”,假设副本数是 3,管道就有 3 个 DataNode。
- DataStreamer 将文件包以流的方式传送给队列中的第一个 DataNode,第一个 DataNode 会存储这个包,然后推送到第二个 DataNode,依此类推。
-
在传送文件时,DFSOutputStream 也会保存一个包的内部队列,用来等待管道中的 DataNode 返回确认信息,称为确认队列。
-
数据写入节点失败时,关闭管道,任何在确认队列中的文件包都会被添加到数据队列的前端,这样管道中写入失败的 DataNode 都不会丢失数据,而当前存放于正常工作 DataNode 上的文件块被利用,并和 NameNode 关联。
-
如果写入失败的 DataNode 恢复,其中的部分数据块会被删除,管道把失败的 DataNode 删除,文件会继续写入管道中另外两个 DataNode 中。最后,NameNode 会注意到文件块副本数没有达到配置要求,就会重新副本。随后文件就会正常执行写入操作。
-
Client 写入完成后调用 close()。Client 在连接 NameNode 确认之前,将剩下的文件包放入 DataNode 管道,等待通知确认信息。NameNode 会知道那些块组成一个文件(通过 DataStreamer 获得块的位置信息),NameNode 只要在返回成功标志前等待块被最小量(dfs.replication.min)复制即可。
-
-
-
从元数据节点(SecondaryNameNode)
- 是 NameNode 的一个工具,帮助 NameNode 管理元数据。
- 一般情况下,当 NameNode 重启的时候,会合并 fsimage 文件和 edits 文件,但是,如果集群规模十分庞大,操作频繁,edits 文件会非常大,合并过程慢。
- SecondaryNameNode 定期从 NameNode 上获取元数据,把 edits 文件和 fsimage 文件在本机进行合并,把新的 fsimage 发送回 NameNode。
-
CheckpointNode
- Hadoop 1.0.4 之后使用 CheckPointNode 代替 SecondaryNameNode。配置相同,只是启动命令不同。
-
BackupNode
- 内存中维护从 NameNode 同步过来的 fsimage,还从 NameNode 接收 edits 文件的日志流,并存入磁盘。
- 会把收到的 edits 文件和内存中的 fsimage 文件合并,创建一份元数据备份。
- BackupNode 还未具备热备功能。
-
JournalNode
-
解决单点瓶颈。
-
允许同时启动两个 NameNode,分别处于工作状态和待命状态。这些 NameNode 通过共享数据,保证数据的状态一致性。
-
DataNode 必须配置两个 NameNode 地址,发送数据块位置信息和心跳信息。
-
JournalNode 要确保同一时刻只有一个 NameNode 可以向自己写数据。
-
为了部署该类型集群,应进行以下准备
- NameNode 服务器应该具有相同的硬件配置;
- JournalNode 进程非常轻量,可以部署在其他的服务器上。必须运行至少 3 个节点,必须是奇数个。
- standby 状态的 NameNode 可以完成 Checkpoint 操作,没有必要再配置 SecondaryNameNode、CheckpointNode 与 BackupNode。
-
-
-
HDFS 本地存储目录结构
- …
-
HDFS 的安全措施
-
冗余备份
- 当 DataNode 启动时,会遍历本地 FS,产生一份 HDFS 数据块和本地文件对应关系的列表,发送给 NameNode,即报告块(BlockReport)。
-
副本存放
- 不同机架上的机器的通信需要通过交换机。采用机架感知(Rack-Aware)策略来提高数据的可靠性、可用性和网络带宽的利用率。
- 存放策略是将一个副本存放在本地机架节点上,另一个村常在同一机架的另一个节点上,最后一个存放在不同机架的节点上。
- 减少了机架间的数据传输,提高了写操作的效率,而且因为机架的错误远远少于节点,所以这种策略不会影响到数据的可靠性和可用性。
-
心跳检测
-
安全模式
- Hadoop 启动时先进入安全模式,检查数据块的完整性。
-
-
-
MapReduce(分布式计算框架)
- Map 函数被输入键值对映射成一组新的键值对,经过一定的处理后交给 Reduce,对相同的键值对下的所有值进行处理,然后输出键值对作为最终结果。
-
YARN(集群资源管理器)
-
为上层应用提供统一的资源管理和调度,给集群的利用率、资源统一管理和数据共享等方面带来了巨大的好处。
-
经典的 MapReduce 有以下局限性
- 扩展性有限
- 利用率有限
- 难以支持 MapReduce 以外的运算
-
-
ZooKeeper(分布式协作服务)
-
一个分布式的服务框架,主要解决分布式集群中应用系统的一致性问题,能提供与目录节点树 FS 类似方式的数据存储。
-
ZooKeeper 不是专门用来存储数据的,它的作用主要是监控所存储数据的状态变化,并通过监控这些变化,实现基于数据的集群管理。
-
ZooKeeper 是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关心的数据,并接受观察者注册,在数据状态变化时通知观察者,从而实现类似于 Master/Slave 的架构。
-
统一命名服务
- 树形名称结构
-
配置管理
-
集群管理
- Leader Election
维护集群中机器的服务状态、动态选择 Master
- Leader Election
-
共享锁
-
队列管理
- 同步队列和 FIFO
-
-
HBase(分布式 NoSQL 数据库)
- 适合存储非结构化数据
- 使用基于列的模式
- 主要用于需要随机访问、实时读写的大数据
- HBase 表是疏松的,用户可以给行定义各种不同的列
-
Hive(数据库管理工具)
- 一个建立在 Hadoop 基础之上的数据库,提供了一套对存储在 Hadoop 文件中的数据集进行数据整理、特殊查询和分析的工具。
- 提供一种结构化数据的机制,支持 HiveQL。Hive 编译器会把 HiveQL 编译成一组 MapReduce 任务。
-
Pig(高层次抽象脚本语言)
-
一种用来检索非常大的数据流语言和运行环境,大大简化了 Hadoop 常见的工作任务。Pig 可以加载数据、表达转换数据并存储最终结果,其内置的操作使得半结构化数据变得有意义。
-
Pig 和 Hive 都为 HBase 提供了高层语言支持,使得在 HBase 上进行数据统计处理变得非常简单。二者有何区别?
- Hive 扮演数据库角色,用于静态的结构以及需要经常分析的工作,也可以称为 Hadoop 与其他 BI 工具结合的理想交集。
- Pig 赋予灵活性,允许开发用于转换数据流的简介脚本,以便嵌入到较大的应用程序。Pig 更轻量级,相比直接使用 Hadoop Java API,Pig 可以大幅度削减代码量。
-
-
Avro
- 用于数据库序列化的系统。提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程调用 RPC 的功能何简单的动态语言集成功能。
- Avro 集成动态语言后,读 / 写文件或使用 RPC 协议都不需要生成代码,代码生成既不需要读 / 写文件数据,也不需要使用或实现 RPC 协议,而仅仅是一个可选的对静态类型语言的实现。
- Avro 系统依赖于模式(schema),减少写入数据的开销,提高序列化的速度并缩减其大小,也便于动态脚本语言的使用,因为数据连同其模式都是自描述的。
- 在 RPC 中,Avro 系统的客户端和服务端通过握手协议进行模式交换,当客户端和服务端拥有彼此全部的模式时,不同模式下的相同命名字段、丢失字段和附加字段等信息的一致性问题就得到了很好的解决。
-
Sqoop
- Apache SQL-to-Hadoop 项目旨在协助 RDBMS 与 Hadoop 进行高效的大数据交流。
- 用户可以把 RDBMS 的数据导入 Hadoop 及其将官的系统(HBase 和 Hive),也可以把数据从 Hadoop 系统抽取并导入 RDBMS。
- Sqoop 也提供了一些实用小工具,如查看数据库等。
- 还能将 DB2 的数据导入 HDFS,并保存为多种文件类型如定界文本类型、Avro 二进制类型及 SequenceFiles 类型。
- Sqoop 架构非常简单,整合了 Hive、HBase 和 Oozie,可以通过 MapReduce 任务来传输数据,实现 并发特性和高容错。
MapReduce 应用
MapReduce 的主要思想从函数式编程语言借用而来,也包含了矢量编程的特性。极大地方便了编程人员。
分布式并行编程:编程方式地变革
-
分布式并行环境的最大优点
- 可以很容易地通过增加计算机来扩充新的计算节点,并由此获得不可思议地海量计算能力;
- 具有相当强地容错能力,即使有一批计算节点失效,也不会影响计算的整体正常进行以及结果的正确性。
-
Google 就使用 MapReduce 的并行编程模型,进行分布式并行编程。它运行在名为 GFS 的分布式 FS 上,为全球亿万用户提供搜索服务。
-
Hadoop 也实现了 MapReduce 编程模型,提供了简单、易用的编程接口以及自己的 DFS HDFS。
MapReduce 模型概述
-
适用于 MapReduce 处理的数据集(或者任务)需要满足一个基本要求:
待处理的数据集可以分解成许多小的数据集,且每一个小数据集都可以完全并行地处理。 -
一个 MapReduce 作业(Job)通常会把输入的数据集切分为若干独立的数据块,由 Map 任务(Task)完全并行地处理;
MapReduce 框架会对 Map 的输出进行排序,把结果输入给 Reduce 任务。通常作业的输入和输出存储在 FS 中,而由整个框架负责任务的调度和监控,并重新执行已经失败的任务。 -
通常 MapReduce 框架和 DFS 运行在一组相同节点
- 计算节点和存储节点通常在一起,使 MapReduce 框架在那些已经存储了数据的节点上高效地调度任务,使整个集群地网络带宽得到非常高效的利用。
-
MapReduce 框架由一个单独的 Master JobTracker 和每个集群节点各一个 Slave TaskTracker 共同完成
- 唯一的 Master 负责调度构成一个作业的所有任务,而这些任务分布在不同的 Slave 上,Master 监控它们的执行并重新执行已经失败的任务,而 Slave 仅负责执行由 Master 指派的任务。
-
应用程序应指明输入 / 输出的位置(路径),并通过实现合适的接口或抽象类提供 Map 和 Reduce 函数,再加上其他作业的参数,构成作业配置(Job configuration);
然后,Hadoop 的 Job Client 会将作业(Jar 包 / 可执行程序等)和配置信息提交给 JobTracker,后者负责将这些程序和配置信息发给 Slave,调度任务并监控它们的执行,同时将状态和诊断信息提供给 Job Client。 -
MapReduce 程序不一定使用 Java 编写
-
MapReduce 计算模型的核心使 Map 和 Reduce 函数。以一个统计文本单词的程序为例,可以是:
< 行在文件中的偏移, 文件中的一行 >
↓map()
List< 单词, 出现次数 >
↓
< 单词, List< 出现次数 >>
↓reduce()
< 单词, 出现次数 > -
基于 MapReduce 计算模型编写分布式并行程序非常简单
- 程序员不用操心分布式存储、工作调度、负载均衡、容错处理、网络通信等问题。
工作组件
-
Client
- 运行 MapReduce 程序和 JobClient。
- 主要提交 MapReduce 作业并为用户显示处理结果。
-
ResourceManager
- 主要进行 MapReduce 作业执行的调度工作。
- 功能包括指定 MapReduce 作业计划、将任务分配给 Map()和 Reduce()执行、执行节点监控任务、重新分配失败的任务等。
- 对集群中所有资源进行统一管理与分配,将各类资源(计算、内存、带宽等)精心安排给基础 NodeManager(YARN 的每节点代理)。
- 还与 ApplicationMaster 一起分配资源,并接收 NodeManager 的资源汇报信息,然后按一定策略分配给各个应用程序。
- ResourceManager 是 Hadoop 集群中十分重要的节点,每个集群只能有一个 ResourceManager。
-
NameNode
- 管理 FS 的 ns(元数据),维护整个 FS 的文件目录树以及这些文件的索引目录,并记录文件和目录的拥有者、权限、文件包含的块的个数、块的副本数以及决定数据块到具体 DataNode 节点的映射等,同时也负责管理 Client 对文件的访问。
-
ApplicationMaster
- 管理在 YARN 内运行的应用程序实例,协调来自 RedourceManager 的资源,并通过 NodeManager 监视程序的执行和资源使用情况(CPU、内存等的分配)。
-
NodeManager
- 机器框架代理,执行应用程序的容器,监控应用程序的资源使用情况(CPU、内存、硬盘、网络等),向调度器汇报。
-
DataNode
- 处理 FS 的读写请求,数据块创建、删除和复制。
- 启动时扫描磁盘,汇报数据块信息;发送心跳信息(3s),如果 10 分钟未收到心跳信息,认为已失效。
-
Container
- YARN 中资源的抽象,封装了一定量的资源(CPU 和内存)。
- 运行 ApplicationMaster 的 Container,由 ResourceManager 向内部的资源调度器申请并启动,用户提交应用程序时,可指定唯一的 ApplicationMaster 所需的资源;
- 运行各类任务的 Container,由 ApplicationMaster 向 ResourceManager 申请,并由 ApplicationMaster 与 NodeManager 通信以启动。
- 两类 Container 的位置一般是随机的,ApplicationMaster 可能与它管理的任务运行在同一节点。
MapReduce 工作流程
-
MapReduce 采用了分治算法
-
工作流程概述
- Mapping 任务是平等的,任意 Mapper 都可以处理任意的输入文件。Mapper 会加载本地运行节点的文件集来处理。
- Mapping 阶段完成后,把具有相同键的数值发送到同一个 Reducer。Map 或 Reduce 任务间不进行信息交换,以确保 Hadoop MapReduce 的可靠性。
-
MapReduce 任务的执行流程
-
JobTracker
在分布式环境中实现 Client 任务的创建和提交 -
InputFormat
进行 Map 前的预处理- 验证输入数据的格式是否符合 JobConfig 的输入数据定义,可以是专门定义的类或是 Writable 的子类;
- 将输入的文件切分为多个逻辑上的输入 InputSplit(IS),因为在 DFS 中,数据块大小是有限制的,所以大文件需要被划分为多个较小的数据块;
- 使用 RecordReader(RR)来处理切分为 IS 的一组记录并将结果输出给 Map,因为 IS 只是逻辑切分的第一步,根据文件中的信息进行具体切分还需要 RR 来完成。
-
将 RR 处理后的结果作为 Map 的输入数据,Map 执行 Map 逻辑,将键值对结果输入到临时中间文件。
-
Shuffle&Partitioner
- 为了让 Reduce 能并行处理 Map 结果,必须对 Map 的输出结果进行一定的排序和分割,再交给对应的 Reduce。这一整理过程,称为 Shuffle。
- Partitioner 是选择配置,主要在有多个 Reduce 情况下,指定 Map 的结果由某一个 Reduce 处理。每一个 Reduce 都会有单独的输出文件。
-
Reduce 执行具体的业务逻辑,将处理结果输入给 OutputFormat。
- OutputFormat 验证输出目录是否存在,并检查输出结果类型是否符合 Config 中的配置类型。如果通过,输出 Reduce 汇总结果。
-
-
MapReduce 过程包含的部分
-
输入文件
- 一般存储在 HDFS 里。
- 格式是任意的,基于行的日志文件、二进制格式、多行输入记录等。
- 数十 GB 或更大。
-