3. 大数据存储与管理

一、分布式文件系统

1. 分布式文件系统

  1. 定义:分布式文件系统(Distributed File System, DFS)是指文件系统管理的物理存储资源不仅存储在本地节点上,还可以通过网络连接存储在非本地节点上。

  2. 分布式文件系统相较于本地存储的优势:

  • 低成本
  • 易扩展:横向扩展
  • 强可靠
  • 高可用

用户无需关心数据是存储在哪个节点上,可以如同使用本地文件系统一样存储和管理分布式文件系统里的数据。

  1. 评价一个分布式文件系统,通常基于以下三个因素:
  • 数据的存储方式,即文件在各个节点之间的分布策略,以保证数据的存储安全和方便获取。
  • 数据的读取速率,包括响应用户读取数据文件的请求、定位数据文件所在的节点、读取实际硬盘中数据文件的时间、不同节点间的数据传输时间以及一部分处理器的处理时间等。
  • 数据的安全机制,由于数据分散在各个节点上,必须要采用冗余、备份、镜像等方式保证节点出现故障的情况下,能够进行数据的恢复,确保数据安全。

2. 主流的分布式文件系统

GFS( Google File System ):Google公司为了满足本公司需求而开发的基于 Linux 的专有分布式文件系统。
HDFS ( Hadoop Distributed File System ):Hadoop 分布式文件系统是GFS的简化版。

3. HDFS 特点

  • 兼容廉价的硬件设备:HDFS 把硬件故障看做常态进行设计,通过增加数据副本、冗余存储等机制保证数据的可靠性、安全性、高可用性
  • 流式数据访问:而非随机读写,满足大批量数据读写要求,提高吞吐量
  • 存储和管理超大文件
  • 简单的文件模型:一次写入、多次读出
  • 强大的跨平台兼容性

4. HDFS 的体系结构

  • 一个HDFS集群通常由一个 NameNode 和多个 DataNode 组成
  • HDFS 将文件数据分割成若干个数据块(Block),每个 DataNode 存储一部分数据块
  • 应用程序客户端(Client)可以并行地对数据块进行访问,极大提高了访问速度
  • NameNode 负责整个分布式文件系统的元数据(MetaData)管理,也就是文件路径名、数据块ID以及存储位置等信息
  • DataNode 负责文件数据的存储与读写操作,在 NameNode 的统一调度下进行数据块的创建、删除和复制等操作;并周期性的向 NameNode 报告自己的状态,没有按时报告的数据结点会被标记为"宕机",不再给它分配I/O请求

5. 冗余数据存储的好处

  • 加快数据传输速度
  • 容易检查数据错误
  • 保证数据可靠性

6. HDFS 数据读写过程

  • 读数据流程
    3. 大数据存储与管理_第1张图片
  • 写数据流程
    3. 大数据存储与管理_第2张图片

二、分布式数据库

1. 关系数据库优点、不足

优点:
① 完备的关系理论基础
② 事务管理机制的支持
③ 高效的查询优化机制
不足:
① 无法满足海量数据的管理需求
② 无法满足数据高并发的需求
③ 无法满足高可靠性和高可用性的需求

2. HBase 简介

  • HBase 的原型是 Google 的分布式存储系统 BigTable
  • 作为 BigTable 的开源实现,HBase 是一个高可靠、高性能、面向列、可伸缩的分布式数据库,主要用来存储非结构化和半结构化的数据
  • HBase 的目标是处理非常庞大的表,通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列属性组成的数据表

3. HBase 数据模型

:HBase 采用表来组织数据,表由行和列组成,列划分为若干个列族
:每个HBase表都由若干行组成,每个行由行键(row key) 来标识
列族:一个 HBase 表被分组成许多"列族"(Colume Family) 的集合,它是基本的访问控制单元
列限定符:列族里的数据通过列限定符(或列)来定位
单元格:在 HBase 表中,通过行、列族和列限定符确定一个"单元格"(Cell),单元格中存储的数据没有数据类型,总被视为字节数组 byte[]
时间戳: 每个单元格都保存着一份数据的多个版本,这些版本采用时间戳进行索引

3. 大数据存储与管理_第3张图片

  • HBase 本质上是一个稀疏、多维度、排序的映射表,该表的索引是 行键、列族、列限定符和时间戳
  • 表中的值是未经解释的字符串,没有数据类型
  • 表在水平方向由一个或者多个列族组成,一个列族中可以包含任意多个列,同一个列族里面的数据存储在一起
  • 列族可以动态扩展,所有列均以字符串形式存储,用户需要自行进行数据类型转换
  • HBase 中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧的版本仍然保留
  • 数据是按照时间戳顺序存储的,客户端可以选择获取距离某个时间最近的版本,或者获取所有版本;若不提供时间戳则默认返回最新版本

4. 逻辑视图 vs. 逻辑视图3. 大数据存储与管理_第4张图片

5. HBase 实现原理

  1. HBase 中的表根据 行键 (row key) 的值被水平划分成多个分区(Region),分区会被分发存储到不同的分区服务器上
    3. 大数据存储与管理_第5张图片
  2. HBase 的实现包括三个主要的功能组件
  • 链接到客户端的库函数:客户端通过访问库函数实现与 HBase 的交互
  • 一个 Master 主服务器
  • 多个 Region 服务器

主服务器Master 负责管理和维护 HBase 表的分区信息,维护 Region服务器列表、分配Region、负载均衡以及处理 Schema 的变化,如表和列族的创建。
Region 服务器负责存储和维护分配给自己的 Region,处理来自客户端的读写请求。

补:Master、Region 架构类似于 HDFS 中的 Namenode 与 Datanode。

6. 分区定位

  • 元数据表,又名 META表,存储了 Region 和 Region Server 的映射关系
  • 读数据流程:客户端访问数据之前,需要首先访问 Zookeeper 获取 MEAT表的信息(元数据),接着放访问 META表数据,找到所需分区的具体位置,最后到对应的分区服务器读取数据
  • 为加速寻址,客户端会把查询过的位置信息在本地缓存
    3. 大数据存储与管理_第6张图片

三、非关系型数据库

  1. NoSQL 是对非关系型数据库的统称,其特点:
  • 灵活的可扩展性
  • 灵活的数据模型
  • 与云计算紧密融合
  1. 典型的 NoSQL 数据库有:
  • 键值数据库
  • 列存储数据库
  • 文档数据库
  • 图数据库
  1. 键值数据库
  • 键值数据库(Key-Value) 将数据存储为 键值对集合,其中键作为唯一标识符,可以用来定位值
  • 值对数据库而言是不可见的,不能对值进行索引和查询
  • 键是一个字符串对象,值可以是任意类型的数据,比如整型、字符型、数组、列表和集合等
  • 键值数据库可以分为内存键值数据库持久化键值数据库
    • 内存键值数据库:数据保存在内存,如Memcached、Redis
    • 持久化键值数据库:数据保存在硬盘,如BerkeleyDB
  • 键值数据库是高度可分区的,具有高可扩展性
  1. 列存储数据库
  • 列存储数据库主要面向海量数据的分布式存储
  • 列存储数据库一般采用列族数据库模型,数据库由多行构成,每行数据包含多个列族,不同行可具有不同数量的列
  • 每行数据通过行键进行定位,行键对应多个列,列以列族为单位组织存储
  1. 文档数据库
  • 文档数据库用于存储、检索和管理面向文档的信息
  • “文档” 是处理信息的基本单位,相当于关系数据库中的一条记录
  • 目的:皆在将半结构化数据存储为文档,通常用 XML、JSON等文档格式来封装和编码数据
    3. 大数据存储与管理_第7张图片
  • 文档数据库通过 “键” 来定位一个文档,因此可以看成是键值数据库的衍生品
  • 关于索引:文档数据库可以根据来构建索引,也可以基于文档内容来构建索引
  • 文档能够对包含的数据类型和内容进行 “自我描述”
    3. 大数据存储与管理_第8张图片
  • 一个文档可以包含非常复杂的数据结构,如嵌套对象,且每个文档可以有完全不同的数据结构
    3. 大数据存储与管理_第9张图片
  1. 图数据库
  • 图数据库(Graph Database) 使用 作为数据模型,通过节点、边和属性来表示和存储数据
  • 图数据库专门用于管理具有高度相互关联关系的数据
    • 如社交网络、依赖分析、推荐系统以及路径寻找等问题

属性图模型
3. 大数据存储与管理_第10张图片

  1. NoSQL vs. 关系数据库
  • 关系数据库
    • 优:以完整的关系代数理论作为基础,有严格的标准,支持事务ACID,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持
    • 劣:可扩展性较差,无法较好支持海量数据存储,数据模型不灵活,无法较好支持 Web2.0 应用,事务机制影响了系统的整体性能等
  • NoSQL 数据库
    • 优:可以支持超大规模数据存储,灵活的数据模型可以很好地支持 Web2.0 应用,具有强大的横向扩展能力等
    • 劣:缺乏数学理论基础,复杂查询性能不高,大都不能实现事务强一致性,很难实现数据完整性(存储在数据库中的所有数据值均正确的状态),缺乏专业团队的技术支持,维护较困难等

你可能感兴趣的:(大数据技术导论,大数据)