一、什么是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
- 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来处理了