1、HDFS介绍
HDFS(Hadoop Distrabuted File System)是Apache顶级项目Hadoop的重要组件,是一种分布式文件系统,基于数据流模式访问和为处理大文件而产生,具有高可用性、高安全性、高扩展性、高容错率等特点,因为使用在普通的商用PC中和节点扩展性,所以HDFS文件系统可以通过购置廉价的上午电脑而实现现行扩展存储和规模的强大优势。
2、基础概念
2.1 MetaData(元数据):HDFS中的所有文件都是有两部分组成,文件信息数据与文件内容数据,文件信息数据以元数据的保存,元数据中包括了文件的名称、权限、Block数量等信息。
2.2 Block(数据块):HDFS文件的文件内容数据以数据块的方式分布在整个HDFS集群中。即一个文件数据被分为多个Block数据块,这些数据块分散在急群众的多个节点中。Block的默认大小是64M。Block的大小设置很重要,因为Block设置的越小,一个文件所产生的Block就越多,则NameNode所需要维护的Blcok的信息就越多,会增加NameNode的压力。如果Block太大,则会文件国语集中在部分节点中,导致无法负载均衡。
2.3 NameNode(元数据节点):在HDFS中。所有文件的元数据都存放在NameNode中,Namenode主要提供一下服务
(1)维护HDFS的namespace,并且以文件树的方式保存在内存中,同时产生fsimage(命名空间镜像)和edits(文件树操作记录文件)两个文件。fsimage个edits文件则是在NameNode出现宕机或启动时恢复文件树所用。
(2)维护Block位置,NameNode中保存着每一个Block文件所在集群中节点的位置。以提供数据的读取服务。
2.4 SecondaryNameNode节点(从元数据节点):从元数据节点并不是元数据节点出现问题时候的备用节点,它和元数据节点负责不同的事情。
(1)其主要功能就是周期性将元数据节点的命名空间镜像文件和修改日志合并,以防日志文件过大。这点在面会相信叙述。合并过后的命名空间镜像文件也在从元数据节点保存了一份,以防元数据节点失败的时候,可以恢复。
2.5 NameNode节点结构:
在NameNode节点中,在current目录下有四个文件:
(1)edits:上次更新fsimage文件后所有对namespace(命名空间,以文件树形式保存)的操作
(2)fsimage:namesapace的备份镜像
(3)VERSION:HDFS的版本
(4)fstime:HDFS的时间
2.6 DataNode节点结构
从DataNode数据节点中主要存放的是文件的Block文件
(1)Block文件:blk_<id1_n>为文件名称,是文件中的数据
(2)Block元数据文件:blk_<id1_n>。meta,存放的是这些数据的元数据。
(3)VERSION:HDFS的版本信息
2.6 SecondaryDataNode节点
其文件结构跟NameNode节点一模一样,但是SecondaryDataNode节点提供的是fsimage文件更新服务
改图解释了SecondaryDataNode节点更新NameNode节点的过程。
(1)将NameNode数据节点中的edits文件和fsimage文件复制的SNN(SecondaryNameNode)节点中,替换SSN节点中的edits和fsimages文件
(2)在SNN节点中将根据edtis文件和fsimage生成新的fsimage文件:fsimage.ckpt
(3)NameNode中的edits文件清空,形成新的edits文件
(4)SNN节点中的fsimage。ckpt文件替代NameNode中的fsimage文件形成fsimages文件
3 HDFS体系构架
HDFS是一个主/从(Mater/Slave)体系结构,从最终用户的角度来看,它就像传统的文件系统一样,可以通过目录路径对文件执行CRUD(Create、Read、Update和Delete)操作。但由于分布式存储的性质,HDFS集群拥有一个NameNode和一些DataNode。
(1)client:向NameNode放出请求,去读数据或者写入数据。
NameNode:负责向客户端提供文件树以及Block的位置信息
DataNode:负责管理Block文件
(2)文件去读
client行NameNode发出请求,NameNode节点查询文件的信息以及文件Block的所在的节点位置信息,并肩这些信息返回给client,client去DataNode节点上读取数据
(3)文件写入
client发出文件写入的请求,NameNode根据文件大小和文件块配置信息,将管理的DataNode信息返回给client,client将文件分块并写入到DataNode中。
4 HDFS的有点与缺点
4.1 优点
(1)HDFS文件通过Master/Slave节点管理整个集群,并且可以安装在廉价的商用机上,因此实现存储量与价格之间的线性增长。
(2)HDFS通过冗余备份从而降低文件损坏风险,并且M/S体系保证了一个节点的损坏不会影响到其他节点的运行,冗余备份机制也保证了 节点损坏后数据不会受到破坏。
(3)采用数据流的方式读取数据和分布式文件系统,适宜大文件的读取的写入。
4.2 缺点
(1)不适宜毫秒级的即时相应,因为HDFS具有分布式,导致文件读取时读取速度取决于DataNode节点的宿舍,因此HDFS具有高延迟
(2)不适宜存储海量小文件,HDFS会为每个文件生成一个元数据和Block文件,当文件过小过多时,会导致NameNode节点的元数据量过大,增加NameNode的负担
(3)在HDFS的一个文件中只有一个写入者,而且写操作只能在文件末尾完成,即只能执行追加操作。目前HDFS还不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改