HDFS是大数据的文件存储系统,它由3个组件组成,分别是client,namenode和datanode,以下是对这三个组件的介绍;
HDFS Client
HDFS Client的主要只能由如下几个,分别是:
(1)与namenode进行交互,获取文件位置信息和文件块信息;
(2)与datanode进行交互,读写数据文件;
(3)访问并管理HDFS集群
hdfs client的访问方式有三种,分别是:
(1)命令行交互界面,它是HDFS自带的;
(2)使用HttpFs服务访问HDFS,它提供restful api;
(3)namenode提供了web的接口,端口号是50070;
NameNode
namenode维护了整个HDFS的文件系统的目录树,以及目录树中所有文件和目录,它的作用如下:
(1)管理HDFS的namespace,如打开,关闭重命名文件和目录;
(2)管理数据块和datanode的映射关系;
(3)处理客户端的读写请求;
(4)管理副本的配置策略;
注:namenode的文件目录树主要存储会存储在两个位置,分别是NameSpace镜像(FSImage)和命名空间镜像的编辑日志(EditLog);其中,FsImage主要是维护了HDFS元数据的完整快照,当namenode启动时,会从FSImage中读取,而EditLog主要时存放文件系统的操作日志;也是用户对目录文件的写操作,包括创建,删除,写入等操作都会被记录到EditLog文件中;与此同时,为了防止EditLog丢失及整个日志文件过大,在出现故障时,恢复成本大,需要定期将编辑日志继续宁归档,即将EditLog合并到FSImage中;
DataNode
真个文件块的存储都在DataNode中,它主要的作用如下:
(1)处理客户端读写请求;
(2)存储实际数据;
(3)接收NameNode的指令创建数据块;
HDFS的读流程
(1)client与NameNode先进行交互,获取数据所在DataNode的地址和文件信息;
(2)client根据NameNode提供的信息,找到DataNode及其对应的文件块,建立socker流;
(3)DataNode读取磁盘上的数据并传递给客户端;
HDFS的写流程
(1)client先与NameNode通信,表示要写入数据,NameNode会在NameSpace中添加一个新的空文件,并告知client已经做好写操作的准备;
(2)client在接到通知之后,会向NameNode申请DataNode数据块,NameNode会返回一个数据块,包含数据块所在DataNode的位置信息;
(3)client得到目标数据块的位置,建立socket流,并向目标数据块写入数据;