HDFS体系架构

    HDFS是一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。

    HDFS是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。它所具有的高容错性、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储。

HDFS优点/为什么选择HDFS存储数据?

1、高容错性

    1)数据自动保存多个副本。它通过增加副本的形式,提高容错性;

    2)某一个副本丢失以后,可以自动恢复,这是由HDFS内部机制实现的

2、适合批处理

    1)它是通过移动计算而不是移动数据

    2)它把数据位置暴露给计算框架

3、适合大数据处理

    1)处理数据达到GB、TB、甚至PB级别的数据

    2)处理百万规模以上的文件数量

    3)处理10K节点的规模

4、流式数据访问

    1)一次写入,多次读取,文件一旦写入不能修改,只能追加

    2)保证数据的一致性

5、可构建在廉价机器上

    1)通过多副本机制,提高可靠性

    2)提供了容错和恢复机制


HDFS缺点/HDFS并不适合所有的场所:

1、低延时数据访问

    比如毫秒级的来存储数据、低延迟的高吞吐率

2、小文件存储

    1)存储大量小文件的话,它会占用NameNode大量的内存来存储文件、目录和块信息,而NameNode的内存是有限的

    2)小文件存储的寻道时间会超过读取时间

3、并发写入、文件随机修改

    1)一个文件只能有一个写,不允许多个线程同时写

    2)仅支持数据append(追加),不支持文件的随机修改


HDFS如何存储数据?

    HDFS采用Master/Slave架构来存储数据,这种架构主要由HDFS Client、NameNode、DataNode、SecondaryNameNode

Client客户端:

1、文件切分(物理切分)。文件上传HDFS的时候,Client将文件切分成一个个的block,然后进行存储

2、与NameNode交互,获取文件的位置信息

3、与DataNode交互,读取或者写入数据

4、Client提供一些命令来管理HDFS,比如启动/关闭HDFS

5、Client可以通过一些命令来访问HDFS

NameNode:就是Master

1、管理HDFS命名空间

    维护着文件系统树及整颗树内所有的文件和目录,这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件fsimage和编辑日志fsedits

    fsimage:元数据镜像文件(文件系统的目录树,比如说有哪些目录,每个目录有哪些文件,这些信息都保存在fsimage文件中)

    fsedits:元数据操作日志(针对目录树的修改操作,比如删除了某个文件或者增加了某个文件,它都会把这些操作保存在edits中)

2、管理数据块block映射信息

3、配置副本策略

4、处理客户端读写请求

    1)HDFS默认的最基本的存储单位是128M的数据块

    2)和普通文件系统相同的是,HDFS中的文件是被分成每块为128M的数据块进行存储的

    3)不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间


副本策略:

    HDFS中的数据块block会有多个副本,默认为3个(可配置),副本存放策略如下:

    第一块:在本地机器的HDFS目录下存储一个block

    第二块:与第一个不同且随机另外选择的机架上的节点上

    第三块:与第二个副本放在同一个机架上,且随机选择另一个节点        

DataNode:就是Slave,NameNode下达命令,DataNode执行实际的操作

    1)存储实际的数据块

    2)执行数据块的读写操作

SecondaryNameNode:

    并非NameNode的热备(热备从广义上讲,就是服务器高可用应用的另一种说法,从狭义上讲,双机热备特指基于高可用系统中的两台服务器的热备)。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务

    1、辅助NameNode,分担其工作量

    2、定期合并fsimage和fsedits,并推送给NameNode

    3、在紧急情况下,可辅助恢复NameNode


基本概念:

    机架:HDFS集群,由分布在多个机架上的大量DataNode组成,不同机架之间节点通过交换机通信,HDFS通过机架感知策略,使NameNode能够确定每个DataNode所属的机架ID,使用副本存放策略,来改进数据的可靠性、可用性和网络带宽的利用率。

    数据块(block):HDFS最基本的存储单元,默认为128M,用户可以自行设置大小。

    元数据:指HDFS文件系统中,文件和目录的属性信息。HDFS实现时,采用了 镜像文件(Fsimage) + 日志文件(EditLog)的备份机制。文件的镜像文件中内容包括:修改时间、访问时间、数据块大小、组成文件的数据块的存储位置信息。目录的镜像文件内容包括:修改时间、访问控制权限等信息。日志文件记录的是:HDFS的更新操作。

    NameNode启动的时候,会将镜像文件和日志文件的内容在内存中合并。把内存中的元数据更新到最新状态。

     在HDFS中,NameNode 和 DataNode之间使用TCP协议进行通信。DataNode每3s向NameNode发送一个心跳。每10次心跳后,向NameNode发送一个数据块报告自己的信息,通过这些信息,NameNode能够重建元数据,并确保每个数据块有足够的副本。










猜你喜欢

转载自blog.csdn.net/HYN205/article/details/80713650