大数据技术导论
上QQ阅读APP看书,第一时间看更新

2.2 HDFS

2.2.1 HDFS体系结构

1.HDFS设计理念

1)低成本:兼容廉价的硬件设备。

2)处理大规模数据:典型文件大小GB-TB级别;关注横向扩展。

3)批量数据访问:批量读而非随机读;关注吞吐量而非响应时间。

4)高容错:副本冗余机制。

5)适应场景:大文件访问;静态数据访问。

6)不适合的场景:存储大量小文件;随机读取,低延迟读取。

2.HDFS体系结构

图2.2给出了HDFS体系结构图。

图2.2 HDFS体系结构

从图2.2中可以看出,HDFS由一个Namenode、一个Secondary NameNode、若干Datanodes和Client组成,采用主从结构,存储的基本单位是块。

如果把HDFS比作一本书,Namenode存储的则是书的目录,Datanode存储的就是书的正文内容,一章是一个文件,一节是一个块,目录称为元数据,目录指明的各章节页码称为映射,用户访问数据,首先要访问Namenode。

(1)块(基本操作单位)

1)HDFS把一个文件被分成多个块,以块作为存储单位,默认一个块为64~128MB。

2)HDFS采用抽象的块概念可以带来以下几个明显的好处:支持大规模文件存储;简化系统设计;适合数据备份。

(2)NameNode(主节点,其结构见图2.3)

1)存储元数据:文件、块与DataNode之间的映射。

2)元数据保存在内存。

3)NameNode由FsImage、EditLog两个文件组成。FsImage保存文件、块的目录结构;EditLog保存对文件、块的操作,如创建、删除等。

4)在NameNode统一调度下进行数据块的创建、删除和复制等操作。

(3)DataNode(从节点)

1)存储文件内容。

2)文件内容保存在磁盘上。

图2.3 NameNode结构

3)维护Block ID到DataNode本地文件的映射关系。

4)向名称节点定期发送自己所存储的块的列表(心跳)。

(4)Secondary NameNode(冷备份)

冷备份过程如图2.4所示。

图2.4 Secondary NameNode冷备份过程

Step1:Secondary NameNode会定期和NameNode通信,请求其停止使用EditLog文件,暂时将新的写操作写到一个新的文件edit.new上,这个操作是瞬间完成的,上层写日志的函数完全感觉不到差别。

Step2:Secondary NameNode通过HTTP GET方法从NameNode上获取到FsImage和EditLog文件,并下载到本地的相应目录下。

Step3:Secondary NameNode将下载下来的FsImage载入内存,然后一条一条地执行EditLog文件中的各项更新操作,使得内存中的FsImage保持最新;这个过程就是EditLog和FsImage文件合并。

Step4:Secondary NameNode执行完Step3操作之后,会通过post方法将新的FsImage文件发送到NameNode节点上。

Step5:NameNode将从Secondary NameNode接收到的新的FsImage替换旧的FsImage文件,同时将edit.new替换EditLog文件,通过这个过程EditLog就变小了。