hdfs介绍

333 阅读2分钟

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流,并向目标数据块写入数据;