大数据技术原理与应用
1 大数据概述
1.1 大数据概念
VOLUME 数据量大
VARIETY 数据类型繁多
VELOCITY 处理速度快
VALUE 价值密度低
1.2 大数据影响
思维方式方面:
全样而非抽样:过去数据存储和处理能力的限制,科学分析采用抽样方法;现在大数据核心就是海量数据存储和处理,使得科学分析完全可以针对全集数据。(方法)
效率而非精确:过去抽样分析的微小误差被放大到全集会变成很大的误差,传统数据分析注重精确性;现在大数据采用全样分析,不存在误差放大问题,而是关注实时分析结果,注重效率。(问题)
相关而非因果:过去数据分析目的是解释事物背后发展机理(如某超市利润下降,相关部门对销售数据分析找出原因);现在数据分析追求相关性(如在网站购买物品1,网站会提示你购买了物品1的客户还购买了物品2)。(目的)
1.3 计算模式
| 大数据计算模式 | 解决问题 | 代表产品 |
|---|---|---|
| 批处理计算 | 大规模数据批量处理 | MapReduce、Spark |
| 流计算 | 流数据实时计算 | Storm |
| 图计算 | 大规模图数据处理 | GraphX |
| 查询分析计算 | 大规模数据存储管理和查询分析 | Hive、Impala |
1.4 流数据与流计算
流数据的概念:在时间分布和数量上无限的一系列动态数据集合体,数据的价值随着时间流逝而降低,必须采用实时计算方式给出秒级响应。
流计算的框架与平台:
商业级平台: IBM StreamBase
开源框架:S4、Spark Streaming
公司为支持自身业务开发的框架:Facebook使用Puma和HBase结合,百度开发DStream处理实时数据。
1.5 大数据与云计算、物联网
概念:
云计算:通过网络提供可伸缩、廉价的分布式计算能力,用户只需在具备网络接入条件的地方就能获得所需各种IT资源。
物联网:物物相连的网络,利用局部网络或互联网等通讯技术将传感器、控制器、机器、人员和物连在一起,实现信息化和远程管理控制。
区别与联系:
区别:
大数据:侧重海量数据存储、处理和分析
云计算:整合优化IT资源提供给用户
物联网:实现物物相连
联系:
大数据:云计算提供技术基础,物联网提供数据来源
云计算:大数据提供用武之地,物联网提供应用空间
物联网:大数据提供分析支撑,云计算提供存储能力
2 大数据处理架构Hadoop
2.1 核心
HDFS
MapReduce
2.2 特性
高可靠性:冗余数据存储方式,副本故障,其余正常
高效性:高效处理海量数据(PB级)
高可扩展性:扩展至多个计算机节点上
高容错性:冗余数据存储方式,自动保持多个副本,自动重分配失败的任务
成本低:廉价计算机集群
运行在Linux平台
支持多种编程语言(基于JAVA开发)
3 分布式文件系统HDFS
3.1 分布式文件系统设计需求(透并复硬伸容安)
| 设计需求 | 含义 | HDFS实现情况 |
|---|---|---|
| 透明性 | 具备访问透明性、位置透明性、性能和伸缩透明性 | 提供一定的访问透明性,完全支持位置透明性、性能和伸缩透明性 |
| 并发控制 | 客户端对文件的读写不影响其他客户端对同一文件的读写 | 任何时刻只允许一个程序写入文件 |
| 文件复制 | 一个文件不同位置有多个副本 | 多副本机制 |
| 硬件和操作系统的异构性 | 不同操作系统的计算机上实现同样的客户端和服务端程序 | 基于Java开发,跨平台能力强 |
| 可伸缩性 | 节点加入或退出 | 大规模廉价计算机集群,伸缩性好 |
| 容错 | 出现问题时正常使用 | 多副本机制、故障自动检测和恢复机制 |
| 安全 | 系统安全 | 安全性弱 |
3.2 HDFS实现目标和局限性
实现目标(廉流大模跨):
兼容廉价的硬件设备
流数据读写
大数据集
简单文件模型
强大的跨平台兼容性
局限性(低小多):
不适合低延迟数据访问
无法高效存储大量小文件
不支持多用户写入和任意修改文件
3.3 相关概念
块:一个文件分为多个块,一个块默认大小为64MB,以块为存储单位。
为什么使用抽象块(优点/好处):(大简备)
支持大规模文件存储:一个文件分成多个块分发到不同节点,文件大小不受单个节点存储容量限制
简化系统设计:简化存储管理和元数据管理
适合数据备份:冗余存储,提高容错性和可用性
名称节点、数据节点、第二名称节点:
名称节点:
存储元数据(保存在内存中);保存文件、block、数据节点之间的映射关系。
管理分布式文件系统的命名空间,保存两个核心数据结构:FsImage和EditLog。
提示
FsImage 维护文件系统树和其中的文件和文件夹的元数据
EditLog 记录针对文件的创建、删除、重命名等操作
数据节点:
存储文件内容(保存在磁盘中);维护block到数据节点本地文件的映射关系。
第二名称节点:
原因:名称节点运行期间,所有更新操作写到EditLog,久而久之将变得很大,导致名称节点重启非常慢。
存储:存储名称节点中对HDFS元数据信息的备份。
工作:
定期与名称节点通信,请求停止写入EditLog,而是写入edit.new。
从名称节点获取FsImage和EditLog,下载到本地目录。
执行EditLog与FsImage的合并。
发送新的FsImage到名称节点。
名称节点接收后替换原来的FsImage和EditLog。
简记
停取合发替
HDFS体系结构的局限性(唯一名称节点的局限性):
命名空间限制:存储在内存中,受到内存空间限制
性能瓶颈:系统吞吐量取决于单个节点吞吐量
隔离问题:不同程序无法隔离
集群可用性:故障后不可用
3.4 多副本冗余存储的优点
加快数据传输速度:多客户端访问同一文件,可从不同副本获取
容易检查数据错误:通过网络传输
保证数据可靠性:某个数据节点失效,不造成数据丢失
3.5 流水线复制策略
当客户端要往 HDFS 中写入一个文件时,这个文件会首先被写入本地,并被切分成若干个块。每个块都向 HDFS 集群中的名称节点发起写请求,名称节点会根据系统中各个数据节点的使用情况,选择一个数据节点列表返回给客户端,然后客户端就把数据首先写入列表中的第一个数据节点,同时把列表传给第一个数据节点,当第一个数据节点接收到 4KB 数据的时候,写入本地,并且向列表中的第二个数据节点发起连接请求,把自己已经接收到的 4 KB 数据和列表传给第二个数据节点,当第二个数据节点接收到 4 KB 数据的时候,写人本地,并且向列表中的第三个数据节点发起连接请求,依次类推,列表中的多个数据节点形成一条数据复制的流水线。
3.6 错误的三种类型
名称节点出错:两个核心文件出错,有第二名称节点修复。
数据节点出错:数据节点向名称节点定期发送心跳信息,无心跳时被标记为不可读;名称节点定期检查副本数量是否小于冗余因子,小于时启动数据冗余复制。
数据出错。
4 HBase
4.1 HBase与BigTable的底层技术对应关系
HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库
| BigTable | HBase | |
|---|---|---|
| 文件存储系统 | GFS | HDFS |
| 海量数据处理 | MapReduce | Hadoop MapReduce |
| 协同服务管理 | Chubby | Zookeeper |
4.2 存储模式
基于列的存储
优点:
降低I/O开销
支持大量并发用户查询
数据处理速度快
4.3 数据模型
四维坐标:行键、列族、列限定符、时间戳。
4.4 三层结构中各层次的名称和作用
| 层次 | 名称 | 作用 |
|---|---|---|
| 第一层 | Zookeeper文件 | 记录-ROOT-表的位置信息 |
| 第二层 | -ROOT-表 | 记录了.META.表的Region位置信息 |
| 第三层 | .META.表 | 记录了用户数据表的Region位置信息 |
4.5 HLog
工作原理: HBase为每个Region服务器分配一个HLog文件,用户更新数据需首先写入日志文件再写入缓存,且直到缓存内容对应的日志写入磁盘后,缓存内容才写入磁盘。
每个Region服务器维护一个HLog的优缺点
优点:多个Region对象的更新操作只需要将日志追加到单个日志文件,减少磁盘寻址次数
缺点:若一个Region服务器故障,为恢复其上的Region对象,需要将Region服务器上的HLog按照其所属的Region对象进行拆分,然后分发到其他Region服务器进行恢复。
提示
一个Region服务器对应一个HLog
一个Region服务器管理多个Region对象
5 NoSQL
5.1 特点
灵活的可扩展性
灵活的数据模型
与云计算紧密融合
5.2 兴起原因
关系数据库无法满足Web2.0需求
无法满足海量数据的管理需求、数据高并发需求、高可扩展性和高可用性需求。
“One size fits all”模式难以适用不同业务场景
关系模型既用于数据分析,又被用于在线业务,一个强调高吞吐,一个强调低延时。用同一模型来抽象不合适。
关系数据库两个关键特性(事务机制和高效查询)在Web2.0成了鸡肋
Web2.0不要求严格的数据库事务和读写实时性,不包含大量复杂查询。
5.3 与关系数据库比较
| 优势 | 劣势 | |
|---|---|---|
| 关系数据库 | 完善的关系代数理论基础、支持事务、高效查询、技术成熟 | 无法支持海量数据、数据模型死板、可扩展性差 |
| NoSQL | 超大规模数据存储、灵活数据模型、强大的横向扩展能力 | 缺乏理论基础、不支持事务、复杂查询性能不高、技术不成熟 |
两者各有优劣,无法取代彼此。
提示
关系数据库:理论、事务、查询、技术
NoSQL:存储、模型、扩展
5.4 四大类型
键值数据库:Redis
列族数据库:HBase
文档数据库:MongoDB
图数据库:Neo4j
5.5 三大基石
CAP
C-Consistency:一致性。所有节点同一时间具有相同的数据。
A-Availablity:可用性。确定时间内返回操作结果。
P-Tolerance of Network Partition:分区容忍性。系统中部分节点无法与其他节点通讯时,系统正常运行。
提示
CAP定理:CAP三者最多同时满足两个。
CA:RDBMS
CP:MongoDB/HBase/Redis
AP:DynamoDB
BASE
ACID BASE 原子性Atomicity 基本可用Basically Available 一致性Consistency 软状态Soft state 隔离性Isolation 最终一致性Eventual consistency 持久性Durable 提示
基本可用:分布式系统部分发生问题时,其余部分仍然可用。
软状态:有一段时间不同步,具有一定滞后性。
最终一致性:弱一致性。后续访问操作展示读不到更新后的数据,一段时间后可以读到。
最终一致性
弱一致性。后续访问操作展示读不到更新后的数据,一段时间后可以读到。
6 云数据库
6.1 概念
云数据库是部署和虚拟化在云计算环境中的数据库。
6.2 特性
动态可扩展:根据业务需求动态扩展存储容量和计算资源
高可用性:数据的冗余和故障转移机制
较低的使用代价:通常采用按需付费模式
易用性:提供了简化和自动化的管理界面和工具
高性能:基于分布式架构和优化的存储引擎,提供高性能的数据处理和查询能力
免维护:提供了一系列自动化的管理和维护功能
安全:提供了多层次的安全措施来保护数据的完整性和可用性
6.3 与关系数据库、NoSQL之间的关系
云数据库是以服务的方式提供数据库功能
云数据库没有专属的数据模型,可以采用关系数据库的关系模型,也可以采用NoSQL数据库的非关系模型
7 MapReduce
7.1 shuffle
Map端:输入数据;写入缓存;溢写(分区、排序、合并);文件归并
Reduce端:领取数据;归并数据;输入数据给reduce任务
8 Hadoop再探讨
8.1 局限与不足
抽象层次低,需人工编码
表达能力有限
开发者自己管理作业
难以看到程序整体逻辑
执行迭代操作效率低
资源浪费
实时性差
8.2 改进
HDFS的单点失效问题:HDFS HA
HDFS无法实现资源隔离:HDFS Federation
MapReduce资源管理效率低:YARN
8.3 HDFS HA
第二名称节点无法解决单点失效问题。
两个名称节点状态同步,借助共享存储系统实现。数据节点向两个名称节点汇报信息。
活跃名称节点故障后,立即切换到待命名称节点。
Zookeeper确保一个名称节点对外服务。
8.4 HDFS Federation
多个相互独立的名称节点,分别进行命名空间和块的管理。
优点:
集群可扩展性:多个名称节点各自管理一部分目录;
性能更高效:同时对外提供服务,提供更高读写吞吐率;
良好的隔离性:不同数据由不同名称节点管理。
8.5 YARN
MapReduce1.0的缺陷:
存在单点故障
任务多则内存开销大
容易内存溢出
资源划分不合理
体系架构:
ResourceManager:处理客户端请求,全局资源管理
ApplicationManager:为应用程序申请资源;任务调度、监控
NodeManager:单个节点上的资源管理,处理其余两个组件的命令
9 Spark
9.1 生态系统
各组件功能:
Spark Core:内存计算、任务调度等基本功能
Spark SQL:直接处理RDD,使用SQL命令查询分析
Spark Streaming:执行高吞吐、可容错的实时流数据处理
MLlib:提供机器学习算法实现
GraphX:用于图计算的API
9.2 RDD
定义: RDD:弹性分布式数据集,提供高度受限的共享内存模型。
宽依赖与窄依赖:
窄依赖:为一个父RDD的分区对应于一个子RDD的分区或多个父RDD的分区对应于一个子RDD的分区(父与子:一对一或多对一)。
宽依赖:存在一个父RDD的一个分区对应一个子RDD的多个分区(父与子:一对多)。
提示
Spark运行架构如何反映RDD之间的依赖关系:
Spark 通过分析各个 RDD 的依赖关系生成了 DAG。