【大数据处理技术】第二篇 大数据存储与管理(暂停更新)

第3章 分布式文件系统HDFS

3.1 分布式文件系统

  • 分布式文件系统:通过网络实现文件在多台主机上进行分布式存储的文件系统
  • 分布式文件系统设计一般采用 “客户机/服务器” 模式
  • 广泛应用的分布式文件系统:GFS 和 HDFS

3.1.1 计算机集群结构

  • 计算机节点、机架、交换机
    在这里插入图片描述

3.1.2 分布式文件系统的结构

  • 数据块是数据读写的基本单元

  • 分布式文件系统的物理结构:

    • 主节点/名称节点:负责文件和目录的创建、删除、重命名;管理数据节点和文件块的映射关系
    • 从节点/数据节点:负责数据的存储、读取
      在这里插入图片描述
  • 故障应对:多副本存储

  • 分布式文件系统针对大规模数据设计,用于处理大规模文件

3.1.3 分布式文件系统的设计需求

  • 透明性
  • 并发控制
  • 文件复制
  • 硬件和操作系统的异构性
  • 可伸缩性
  • 容错
  • 安全

3.2 HDFS

3.2.1 HDFS 简介及相关概念

  • HDFS 原是 Apache Nutch 搜索引擎的一部分,现是 Apache 子项目
  • HDFS + MapReduce ≈ Hadoop
  • HDFS 实现目标:
    • 兼容廉价的硬件设备
    • 流数据读写
    • 大数据集
    • 简单的文件模型
  • HDFS 应用局限:
    • 不适合低延迟数据访问
    • 无法高效存储大量小文件
    • 不支持多用户写入及任意修改文件

1. 块

  • 以块为单位读写数据 ,把磁盘寻道时间分摊到大量数据中
    • HDFS 寻址开销包括:磁盘寻道开销、数据块定位开销
    • HDFS 默认数据块大小64MB/128MB
  • HDFS 采用块概念的好处:
    • 支持大规模文件存储
    • 简化系统设计
    • 适合数据备份

2. 名称节点和数据节点

(1)名称节点

  • 名称节点(NameNode)负责管理分布式文件系统的命名空间 (Namespace),保存了两个核心的数据结构:FsImage 和 EditLog
    • FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
    • 操作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等操作
  • 名称节点记录了每个文件中各个块所在的数据节点的位置信息
    在这里插入图片描述
  • FsImage文件
  • 名称节点的启动
  • 名称节点运行期间EditLog不断变大的问题【第二名称节点】

(2)数据节点

  • 数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取
  • 根据客户端或者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表
  • 每个数据节点中的数据会被保存在各自节点的本地Linux文件系统中

3. 第二名称节点

  • 第二名称节点是HDFS架构中的一个组成部分,它是用来保存名称节点中对HDFS 元数据信息的备份,并减少名称节点重启的时间。SecondaryNameNode一般是 单独运行在一台机器上、
  • SecondaryNameNode的工作情况:
    • (1)SecondaryNameNode会定期和 NameNode通信,请求其停止使用EditLog 文件,暂时将新的写操作写到一个新的文件 edit.new上来,这个操作是瞬间完成,上层 写日志的函数完全感觉不到差别
    • (2)SecondaryNameNode通过HTTP GET方式从NameNode上获取到FsImage和 EditLog文件,并下载到本地的相应目录下
    • (3)散SecondaryNameNode将下载下 来的FsImage载入到内存,然后一条一条地 执行EditLog文件中的各项更新操作,使得 内存中的FsImage保持最新;这个过程就是 EditLog和FsImage文件合并
    • (4)SecondaryNameNode执行完③操作之后,会通过post方式将新的 FsImage文件发送到NameNode节点上
    • (5)NameNode将从 SecondaryNameNode接收到的新的 FsImage替换旧的FsImage文件,同时将 edit.new替换EditLog

3.2.2 HDFS 体系结构

  • HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点(NameNode)和若干个数据节点(DataNode)
  • 名称节点:作为中心服务器,负责管理文件系统的命名空间及客户端 对文件的访问。
  • 数据节点:
    • 集群中的数据节点,一个节点运行一个数据节点进程
    • 数据节点负责处理文件系统客户端的读/写请求,在名称节点的统一调度下进行数 据块的创建、删除和复制等操作
    • 每个数据节点的数据实际上是保存在本 地Linux文件系统中的
      在这里插入图片描述

1. HDFS 命名空间管理

  • HDFS 命名空间包括:目录、文件、块
  • 命名空间管理:命名空间支持对HDFS中的目录、文件、块,做类似文件系统的创建、修改、删除等基本操作
  • HDFS使用传统的分级文件体系,用户可以像使用普通文件系统一样,创建、删除目录和文件,在目录间转移文件,重命 名文件等

2. 通信协议

  • HDFS是一个部署在集群上的分布式文件系统,很多数据需要通过网络进行传输
  • 所有的HDFS通信协议都是构建在TCP/IP协议基础之上的
  • 客户端通过一个可配置的端口向名称节点主动发起TCP连接,并使用客户端协议与名称节点进行交互
  • 名称节点和数据节点之间使用数据节点协议进行交互
  • 客户端与数据节点的交互是通过RPC(Remote Procedure Call)来实现的
  • 在设计上,名称节点不会主动发起RPC,而是响应来自客户端和数据节点的RPC请求

3. 客户端

  • 客户端:用户操作HDFS常用方式,HDFS在部署时提供客户端
  • HDFS客户端是一个库,暴露了HDFS文件系统接口,这些接口隐藏了HDFS实现中的大部分复杂性
  • 严格来说,客户端并不算是HDFS的一部分
  • 客户端可以支持打开、读取、写入等常见的操作,并且提供了 类似Shell的命令行方式来访问HDFS中的数据
  • 此外,HDFS也提供了Java API,作为应用程序访问文件系统的 客户端编程接口

4. HDFS 体系结构的局限性

  • HDFS 只设置位移名称节点,简化了系统设计,同时有明显局限性:
    • 命名空间的限制
    • 性能的瓶颈
    • 隔离问题
    • 集群的可用性

3.2.3 HDFS 存储原理

1. 数据的冗余存储

  • HDFS 采用多副本方式,对数据进行冗余存储
  • 目的:保证系统的容错性和可用性
  • 多副本方式优点:
    • 加快数据传输速度
    • 容易检查数据错误
    • 保证数据的可靠性
      在这里插入图片描述

2. 数据存取策略

  • 数据存放

    • 第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台磁盘不太满、CPU不太忙的节点
    • 第二个副本:放置在与第一个副本不同的机架的节点上
    • 第三个副本:与第一个副本相同机架的其他节点上
    • 更多副本:随机节点
      在这里插入图片描述
  • 数据读取

    • HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID
    • 当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表, 列表中包含了副本所在的数据节点,可以调用API来确定客户端和这些 数据节点所属的机架ID,当发现某个数据块副本对应的机架ID和客户端 对应的机架ID相同时,就优先选择该副本读取数据,如果没有发现,就 随机选择一个副本读取数据
  • 数据复制

3. 数据错误与恢复

  • 名称节点出错
    • 名称节点保存了所有的元数据信息,其中,最核心的两大数据 结构是FsImage和Editlog,如果这两个文件发生损坏,那么整个 HDFS实例将失效。
    • 因此,HDFS设置了备份机制,把这些核心文件 同步复制到备份服务器SecondaryNameNode上。
    • 当名称节点出错时, 就可以根据备份服务器SecondaryNameNode中的FsImage和Editlog 数据进行恢复
  • 数据节点出错
    • 每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自 己的状态
    • 当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的心跳信息,这时,这些数据节点就会被标记为“宕机”, 节点上面的所有数据都会被标记为“不可读”,名称节点不会再给它们 发送任何I/O请求
    • 这时,有可能出现一种情形,即由于一些数据节点的不可用,会导致一 些数据块的副本数量小于冗余因子
    • 名称节点会定期检查这种情况,一旦发现某个数据块的副本数量小于冗 余因子,就会启动数据冗余复制,为它生成新的副本
    • HDFS和其它分布式文件系统的最大区别就是可以调整冗余数据的位置
  • 数据出错
    • 网络传输和磁盘错误等因素,都会造成数据错误
    • 客户端在读取到数据后,会采用md5和sha1对数据块进行校验,以确定读取到正确的数据
    • 在文件被创建时,客户端就会对每一个文件块进行信息摘录,并把这些信息 写入到同一个路径的隐藏文件里面
    • 当客户端读取文件的时候,会先读取该信息文件,然后,利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块

3.2.4 HDFS 数据读写过程

  1. 读数据过程
  2. 写数据过程

3.2.5 HDFS 编程实践

  1. HDFS 常用命令
  2. HDFS 的Web页面
  3. HDFS 常用Java API 及应用实例

第4章 分布式数据库HBase

4.1 HBase 概述

4.1.1 HBase 简介

  • HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌BigTable的 开源实现,主要用来存储非结构化和半结构化的松散数据。HBase的目标是处理非常 庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和 数百万列元素组成的数据表
    在这里插入图片描述
  • HBase与传统关系数据库的对比分析
    • 数据类型:关系数据库采用关系模型,具有丰富的数据类型和 存储方式,HBase则采用了更加简单的数据模型,它把数据存储为未 经解释的字符串
    • 数据操作:关系数据库中包含了丰富的操作,其中会涉及复杂 的多表连接。HBase操作则不存在复杂的表与表之间的关系,只有简 单的插入、查询、删除、清空等,因为HBase在设计上就避免了复杂 的表和表之间的关系
    • 存储模式:关系数据库是基于行模式存储的。HBase是基于列 存储的,每个列族都由几个文件保存,不同列族的文件是分离的
    • 数据索引:关系数据库通常可以针对不同列构建复杂的多个索 引,以提高数据访问性能。HBase只有一个索引——行键,通过巧妙 的设计,HBase中的所有访问方法,或者通过行键访问,或者通过行 键扫描,从而使得整个系统不会慢下来
    • 数据维护:在关系数据库中,更新操作会用最新的当前值去替 换记录中原来的旧值,旧值被覆盖后就不会存在。而在HBase中执行 更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧 有的版本仍然保留
    • 可伸缩性:关系数据库很难实现横向扩展,纵向扩展的空间也 比较有限。相反,HBase和BigTable这些分布式数据库就是为了实现 灵活的水平扩展而开发的,能够轻易地通过在集群中增加或者减少硬 件数量来实现性能的伸缩
  • HBase访问接口
    在这里插入图片描述

4.2 HBase 数据模型

4.2.1 数据模型概述

  • HBase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、 列族、列限定符和时间戳
  • 每个值是一个未经解释的字符串,没有数据类型 • 用户在表中存储数据,每一行都有一个可排序的行键和任意多的列
  • 表在水平方向由一个或者多个列族组成,一个列族中可以包含任意多 个列,同一个列族里面的数据存储在一起
  • 列族支持动态扩展,可以很轻松地添加一个列族或列,无需预先定义 列的数量以及类型,所有列均以字符串形式存储,用户需要自行进行 数据类型转换
  • HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个 新的版本,旧有的版本仍然保留(这是和HDFS只允许追加不允许修 改的特性相关的

4.2.2 数据模型的相关概念

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

4.2.3 数据坐标

  • HBase中需要根据行键、列族、列限定符和时间戳来确定一个单元格,因此 ,可以视为一个“四维坐标”,即[行键, 列族, 列限定符, 时间戳]
    在这里插入图片描述

4.2.4 概念视图

在这里插入图片描述

4.2.5 物理视图

在这里插入图片描述

4.2.6 面向列的存储

在这里插入图片描述

4.3 HBase 实现原理

4.3.1 HBase 功能组件

  • HBase的实现包括三个主要的功能组件:
    • 库函数:链接到每个客户端
    • 一个Master主服务器
    • 许多个Region服务器
  • 主服务器Master负责管理和维护HBase表的分区信息,维护Region服 务器列表,分配Region,负载均衡
  • Region服务器负责存储和维护分配给自己的Region,处理来自客户端 的读写请求
  • 客户端并不是直接从Master主服务器上读取数据,而是在获得Region 的存储位置信息后,直接从Region服务器上读取数据
  • 客户端并不依赖Master,而是通过Zookeeper来获得Region位置信息 ,大多数客户端甚至从来不和Master通信,这种设计方式使得Master 负载很小

4.3.2 表 和 Region

  • 开始只有一个Region,后来不断分裂
  • Region拆分操作非常快,接近瞬间,因为拆 分之后的Region读取的仍然是原存储文件, 直到“合并”过程把存储文件异步地写到独 立的文件之后,才会读取新文件
    在这里插入图片描述
  • 每个Region默认大小是100MB到200MB(2006年以前的硬件配置)
    • 每个Region的最佳大小取决于单台服务器的有效处理能力
    • 目前每个Region最佳大小建议1GB-2GB(2013年以后的硬件配置)
  • 同一个Region不会被分拆到多个Region服务器
  • 每个Region服务器存储10-1000个Region
    在这里插入图片描述

4.3.3 Region 的定位

  • 元数据表,又名.META.表,存储了Region和Region服务器的映射关系
  • 当HBase表很大时, .META.表也会被分裂成多个Region
  • 根数据表,又名-ROOT-表,记录所有元数据的具体位置
  • -ROOT-表只有唯一一个Region,名字是在程序中被写死的
  • Zookeeper文件记录了-ROOT-表的位置
    在这里插入图片描述
    在这里插入图片描述
  • 为了加快访问速度,.META.表的全部Region都会被保存在内存中
  • 假设.META.表的每行(一个映射条目)在内存中大约占用1KB,并且每 个Region限制为128MB,那么,上面的三层结构可以保存的用户数据表 的Region数目的计算方法是:
    • (-ROOT-表能够寻址的.META.表的Region个数)×(每个.META.表的 Region可以寻址的用户数据表的Region个数)
    • 一个-ROOT-表最多只能有一个Region,也就是最多只能有128MB,按照 每行(一个映射条目)占用1KB内存计算,128MB空间可以容纳 128MB/1KB=217行,也就是说,一个-ROOT-表可以寻址217个.META.表 的Region。
    • 同理,每个.META.表的 Region可以寻址的用户数据表的Region个数是 128MB/1KB=217
    • 最终,三层结构可以保存的Region数目是(128MB/1KB) × (128MB/1KB) = 234个Region
  • 客户端访问数据时的“三级寻址”
    • 为了加速寻址,客户端会缓存位置信息,同时,需要解决缓存失效问题
    • 寻址过程客户端只需要询问Zookeeper服务器,不需要连接Master服务器

4.4 HBase 运行机制

4.4.1 HBase 系统架构

在这里插入图片描述

4.4.2 Region 服务器的工作原理

4.4.3 Store 工作原理

4.4.4 Hlog 工作原理

4.5 HBase 编程实践


第5章 NoSQL数据库

5.1 NoSQL 简介

5.2 NoSQL 兴起的原因

5.3 NoSQL 与关系型数据库的比较

5.4 NoSQL 四大类型

5.4.1 键值数据库

5.4.2 列族数据库

5.4.3 文档数据库

5.4.4 图数据库

5.5 NoSQL 三大基石

5.5.1 CAP

5.5.2 BASE

5.5.3 最终一致性

5.6 NoSQL 到 NewSQL 数据库


第6章 云数据库

6.1 云数据库概述

6.1.1 云计算是云数据库兴起的基础

6.1.2 云数据库的概念

6.1.3 云数据库的特性

6.1.4 云数据库是个性化数据存储需求的理想选择

6.1.5 云数据库与其他数据库的关系

6.2 云数据库产品

6.3 云数据库系统架构

6.3.1 UMP 系统概述

6.3.2 UMP 系统架构

6.3.3 UMP 系统功能


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值