Hadoop起源一之GFS

x33g5p2x  于2021-03-14 发布在 Hadoop  
字(1.2k)|赞(0)|评价(0)|浏览(133)

一、什么是GFS

GFS(Google File System)是Google研发的可伸缩、高可用、高可靠的分布式文件系统,提供了类似POSIX的API,按层级目录来组织文件。在网络上,有很多对该轮文的翻译和解读,尤其是经典论文翻译导读之《Google File System》这篇文章,除了对论文的翻译,还有很多作者的思考、分析。由于受到谷歌GFS的启发,就诞生了HDFS。

GFS:没有硬盘,数据只存储在内存,为了避免断电数据丢失,采用冗余备份数据方式

二、大数据的本质

[info] 思考:大数据的本质是什么?是为了解决什么问题?

  • (1)数据的存储:分布式文件系统(分布式存储)
    • HDFS: Hadoop Distributed File System
  • (2)数据的计算:分布式计算

三、如何解决大数据的存储

  • 分布式文件系统(HDFS,来源于GFS)
  • 举例子-网盘

:-:

四、核心概念

  • NameNode职责
    • 接收客户端的请求
    • 维护文件的元信息和操作
      • 日志、文件元信息:fsimage(二进制)
      • 操作日志:edits
    • 管理HDFS(硬盘:DataNode)
  • Secondary NameNode
    • 对edits和fsimage合并
  • HDFS放置副本原理
    • 采用机架感知,策略如下
      • 第一个副本,在客户端相同的节点(如果客户端是集群外的一台机器,就随机算节点,但是系统会避免挑选太满或者太忙的节点)
      • 第二个副本,放在不同机架(随机选择)的节点
      • 第三个副本,放在与第二个副本同机架但是不同节点上
      • 其他更多副本(如果有的话),随机放置在集群节点,不过系统会尽可能避免在相同机架上放置太多副本。具体可看图:

:-:

  • HDFS读取副本原理
    • 客户端向namenode节点询问这个数据块存储在哪些datanode节点上,告诉namenode需要的文件路径、读取文件的起始位置、读取文件的长度
    • namenode向该客户端返回它所要读取文件内容所在的位置:LocatedBlock对象,该对象包含对应的数据块所有副本所在的DataNode节点的位置信息
    • 客户端接着就会依次从这些DataNode节点上读取该数据块,直到成功读取为止
  • HDFS读取性能考虑
    • 从性能角度出发,客户端应该选择从距离它最近的可用DataNode节点上读取需要的数据块,那么,如何来计算客户端与DataNode节点之间的最小距离?
    • NameNode按照客户端与DataNode节点之间的距离进行排序,距客户端越近的DataNode节点越被放在LocatedBlock的前面,该算法的基本思路如下:
      • 客户端优先从本地读取数据块(如果有的话)
      • 如果1没有或者读取1失败,则客户端优先读取与客户端同机架上其他节点的副本(如果有的话)
      • 如果1,2都没有,则随机选择一个DataNode节点作为优先节点
      • 这个计算距离的问题涉及到NetworkTopology,这种数据结构被NameNode节点用来形象的表示HDFS集群中所有DataNode节点的物理位置,自然这个优化工作就交由NameNode来处理了

相关文章

热门文章

更多