自己通过阅读了解论文和极客时间相关讲解,并通过自己已有的框架知识,总结该文章,阅读需要有一定的大数据基础知识。

文章目录

  • GFS的三个原则
  • GFS是一个简单的单Master架构。
  • 依据硬件进行设计
  • 一致性(重点)

GFS的三个原则

  • 简单:使用 Linux 服务上的普通文件作为基础存储层,并且选择了最简单的单Master 设计。一旦 Master 出现故障,整个集群就无法写入数据(算不上高可用),虽然有Backup Master的存在,但是从检测到,读取最新CheckPoint,重放日志,可能是分钟级别的,这期间仍旧是不可用的。

  • 对硬件特性进行设计取舍:

    采用流水线式的数据传输,而非树形;文件复制时,直接在本地拷贝。减少数据在网络上的传输,避免网络带宽成为瓶颈。

  • 数据一致性:

    GFS在并发的随机写入中是,一致但非确定的。而对于并发的追加写入,也只是做出了“至少一次”的保证。

现在我们依次看这三个原则所描述的。

GFS是一个简单的单Master架构。

Master有三种作用:相对于存储数据的 Chunkserver,Master 是一个目录服务;相对于为了灾难恢复的 Backup Master,它是一个同步复制的主从架构下的主节点;相对于为了保障读数据的可用性而设立的 Shadow Master,它是一个异步复制的主从架构下的主节点。

  • 目录服务:

    master 里面会存放三种主要的元数据:

    文件和 chunk 的命名空间信息,即是路径和文件名。

    这些文件被拆分成了哪几个 chunk(每一个chuck都有唯一对应的chunk handle编号),即是文件到多个chunk handle的映射。

    这些 chunk 实际被存储在了哪些 chunkserver 上,也就是 chunk handle 到chunkserver 的映射关系。

    通过这三种元数据,master可以找到客户端要读取的数据在哪里,返回给客户端。

HDFS中NameNode即是第一关系和第二关系。

  • master的快速恢复和可用性

    master接受所有客户端的查询请求,且只有一个节点,所以为保证master的性能,将master的数据都保存在内存中。

    为了解决挂掉后,数据丢失的风险,master 会通过记录操作日志和定期生成对应的 Checkpoints 进行持久化。(挂掉后,重启读取Checkpoints 和 日志即可)

  • Backup Master:

    如果master节点真的硬件出现故障,这时候需要快速恢复,即是Backup Master,它会进行同步复制。只有当数据在 master 上操作成功,对应的操作记录刷新到硬盘上,并且这几个 Backup Master 的数据也写入成功,并把操作记录刷新到硬盘上,整个操作才会被视为操作成功。当当前master挂掉后,会从Backup Master中选出一个即为新的master。

  • Shadow Master:

    在新的master选举成功,并读取Checkpoints 和 日志时,仍旧是一个空档期,因此为解决这个问题,并诞生了异步复制的Shadow Master,尽可能保持追上 master 的最新状态。

    客户端只有在该种情况下会读到过时的master信息。

    1.master 挂掉了;2.是挂掉的 master 或者 Backup Master 上的 Checkpoints 和操作日志,还没
    有被影子 Master 同步完;3.则是我们要读取的内容,恰恰是在没有同步完的那部分操作上。

HDFS中为了减少NameNode的压力,设计出Secondary NameNode来帮助其合并产生新的fsimage。(并非HA)。

依据硬件进行设计

  • 分离控制流和数据流

    实际的数据读写都不需要通过 master,客户端无论读写都只需要拿到master的元数据即可。(具体可看HDFS)。

  • 流水线式的网络数据传输。

    如果用树形,同时对三个副本进行网络发送,master的带宽可以占满,但是三个chuckserver的数据只占用了1/3。如果用流水线式数据传输,能充分的利用带宽。

    GFS中在传输时有主副本,GFS面对几百个并发的客户端,将传输过来的数据放在缓冲区,主副本进行排序,次副本以同样的顺序写入。

    HDFS写入时不允许并发,因此在写入时也不用考虑太多,也无主副本之说,但是在租约恢复时会选出一个主副本,保证一致性。(下面会详细讲到)。

    为什么优先选择最近的副本写入,而非主副本

    同一个机架Rack上的服务器都会接入一台接入层交换机(Access Switch);

    各个机架上的接入层交换机都会连接到一台汇聚层交换机(Aggregation Switch);

    汇聚层交换机会再连接到核心交换机(Core Switch);

    减少交换机的占用资源。

由图可以知道,如果由客户端到B再传输给A,将会比由客户端到A再到B经过的交换机更多。

  • Snapshot

    文件的复制会直接在本地拷贝,不会进行网络传输进行拷贝。

一致性(重点)

  • GFS中的“ 一致性”

    第一个,就指“一致的(Consistent)”:多个客户端无论是从主副本读取数据,还是从次副本读取数据,读到的数据都是一样的。

    第二个,指“确定的(Defined)”:就是客户端写入的数据能够完整地被读到。即:每个客户端写入指定offset的数据 和 再从offset读出来的数据是相同的。

    GFS中的一个表格

  • 随机写入

    多个客户端并发写入数据,即使写入成功了,GFS 里的数据也可能会进入一个一致但是非确定的状态

    如果客户端写入GFS中指定offset,客户端A写入数据范围[50, 80],客户端B写入数据范围[70, 100],就有可能出现B覆盖A,或者A覆盖B的情况(不确定的)(写入大小是不确定的)。但是三个副本按同样的顺序写入,是一致的。

出现的原因:

数据的写入顺序并不需要通过Master来协调,而是直接发送给ChunkServer,由ChunkServer来管理数据的写入顺序;

  • 记录追加Record Append的“至少一次”的保障。(并发)

    只是进行追加将不会产生不确定的情况A、B、C各自的结尾处写入对应的数据。A客户端可以读取A的完整数据,同理BC一样。

    如果副本写入失败,怎么办?

    如下:

    失败后,X会重新在后面进行记录追加(不止失败的副本)

    记录追加使得大部分数据都是一致的,并且是确定的,但是整个文件中,会夹杂着少数不一致也不确定的数据。(保证了至少一次,但不保证顺序。可能使得客户端拿到重复的数据和空数据)(Google的网页存储并不在乎网页是存储了两遍,还是两个网页的顺序)。

    但是我们可以在客户端处进行解决,比如在数据中加入校验和,加入唯一的包含时间戳的ID。这样我们可以进行进一步的去重或者排序的操作。

    注:,GFS 限制了一次记录追加的数据量是16MB,而 chunkserver 里的一个 chunk 的大小是 64MB。所以,在记录追加需要在chunk 里填空数据的时候,最多也就是填入 16MB,也就是 chunkserver 的存储空间最多会浪费 1/4。

    GFS的至少一次保证了高并发和高性能。

    在HDFS中,不允许并发且只能追加,也就没有了原来的复杂步骤(如主副本的排序),这样同时保证了一致和确定的。

    如果是客户端故障,为保证一致性,会进行租约恢复。

    如果是DataNode出现问题,分为三种情况:

    • 从 pipeline setup(准备阶段) 错误中恢复:

    新写文件:Client 重新请求 NameNode 分配 block 和 DataNodes,重新设置 pipeline。

    追加文件:Client 从 pipeline 中移除出错的 DataNode,然后继续。

    • 从 close 错误中恢复:

    到了 close 阶段才出错,实际数据已经全部写入了 DataNodes 中,所以影响很小了。Client 依然根据剩下正常的 DataNode 重建 pipeline,让剩下的 DataNode 继续完成 close 阶段需要做的工作。

    • 当 pipeline 中一个 DataNode 挂了,Client 重建 pipeline 时是可以移除挂了的 DataNode,也可以使用新的 DataNode 来替换。这里有策略是可配置的,称为 DataNode Replacement Policy upon Failure,包括下面几种情况:

    NEVER:从不替换,针对 Client 的行为

    DISABLE:禁止替换,DataNode 服务端抛出异常,表现行为类似 Client 的 NEVER 策略

    DEFAULT:默认根据副本数要求来决定,简单来说若配置的副本数为 3,如果坏了 2 个 DataNode,则会替换,否则不替换

    ALWAYS:总是替换。

    HDFS会每6小时进行检测,然后进行数据块的恢复。

一篇理解GFS与HDFS的重要理念相关推荐

  1. 深入理解Hadoop之HDFS架构

    Hadoop分布式文件系统(HDFS)是一种分布式文件系统.它与现有的分布式文件系统有许多相似之处.但是,与其他分布式文件系统的差异是值得我们注意的: ♦  HDFS具有高度容错能力,旨在部署在低成本 ...

  2. 分布式文件系统(GFS和HDFS)概述

    目录 背景意义 分布式存储相关概念 分布式存储系统的分类 复制副本 CAP理论 一致性 GFS架构 租约(lease)和变更顺序 容错机制 前言 因为我研一下学期有一门分布式的课,老师要求我们选择一个 ...

  3. gfs和hdfs文件系统的区别

    转载:http://blog.csdn.net/mindfloating/article/details/49103611 我们知道 HDFS 最早是根据 GFS(Google File System ...

  4. 彻底理解大数据 HDFS 分布式文件系统,这篇就够了

    来源:https://www.cnblogs.com/cainiao-chuanqi/p/11420490.html 文件系统的基本概述 文件系统定义:文件系统是一种存储和组织计算机数据的方法,它使得 ...

  5. 通过这一篇理解关于网络的一些问题

    1 网络协议是什么? 在计算机网络要做到有条不紊地交换数据,就必须遵守一些事先约定好的规则, 比如交换数据的格式.是否需要发送一个应答信息.这些规则被称为网络协议 2 网络协议分层 对网络协议分层可以 ...

  6. MySQL基础篇——理解RDBMS

    专业的东西,总要讲究个术语,才能显得学问高深.所以呢,在说MySQL之前,需要普及下这些数据库术语. 我们平常说的关系型数据库,如Oracle,MySQL等等,为啥叫关系型数据库?想过没有? 关系型数 ...

  7. 在统计学中参数的含义是指_第一篇 理解统计学中的基本概念

    统计学(stastics)是收集.分析和解释数据的科学. 描述统计(descriptive statistics)是研究数据还搜集.整理和描述的统计分支.描述统计的内容包括取得所需要的数据.用图表形式 ...

  8. 你真的理解以客户为中心的理念吗?

    现在几乎所有的公司,在公司理念里,必有一句话,以客户为中心: 但真的做到和理解的,又有几家呢.程序员因为他们只关心技术和问题,他们很少去关心公司业务和拓展自己的思维. 例如,你修改个需求,更改需求,这 ...

  9. 主流分布式文件系统对比:区块链分布式技术引发云存储革命?HDFS,GFS,GPFS,FusionStorage,IPFS

    https://blog.csdn.net/weixin_45494421/article/details/98760782 概要:常见的分布式文件系统有GFS.HDFS等,也有新兴的基于区块链IPF ...

最新文章

  1. 杭州java班学费多少_杭州学java费用多少
  2. 高性能SQLServer通用分页存储过程
  3. 万亿条数据查询如何做到毫秒级响应?
  4. 几种排序与最大K问题
  5. 浏览器接收响应数据过大_交互响应性能之优化FID
  6. make pycaffe 报错:“fatal error: numpy/arrayobject.h: No such file or directory” 解决方案
  7. 无法显示添加端口对话框 服务器,服务器添加开放端口
  8. mysql 函数 数字转字串_mysql中字符串和数字的互转函数
  9. 控件readonly之后的取值
  10. matlab 多项式提取,matlab提取多项式系数
  11. 2013,安全管理平台(SOC)业务的重新崛起
  12. Mesos资源调度与管理的深入分享与交流
  13. SECS/GEM 产品开发和介绍
  14. 葵花卫星数据介绍与下载教程
  15. 互联网电商大数据架构图
  16. 高等数学考研笔记(九)
  17. 关于STAR法则简历
  18. 元宇宙行业也有冬天!Meta将裁员数千人 小扎狠过马斯克
  19. python协程多任务爬取虎牙美女主播图片
  20. Centos7创建DNS服务器(超级简单,一看就会)

热门文章

  1. php extension kdb+,kdb+ 中机器学习
  2. [转]编译原理三大经典书籍(龙书 虎书 鲸书)
  3. 笔记整理nodeJS
  4. 在学术领域认为能展现出智能行为的计算机,2019人工智能与健康试题和答案.pdf...
  5. USB摄像头驱动之设置属性
  6. 从神经网络到BP算法(纯理论推导)
  7. power bi PQ入门页面操作
  8. 用FastAPI加爬虫制作一个涩图API,521就这样自己过。
  9. 如何使用 Eclipse + Kotlin + tomcat 开发 Dynamic Web Server
  10. Android支持的视频格式