HDFS工作机制
两大角色:
DataNode:负责管理用户的文件数据块
NameNode:负责管理整个文件系统的元数据
NameNode的工作机制
职责:
1)客户端请求的响应
2)元数据的管理(查询,修改)
元数据的存储:
内存中有一份完整的元数据;磁盘中还有一份元数据镜像。
NameNode主要维护两个文件:
1)fsimage(filesystem image)文件镜像
存于硬盘的最新的元数据检查点
2)editlog
自最新的检查点后,对文件的修改操作都先记录到editlog中,操作成功后再更新内存中的元数据。
checkpoint(检查点)
为了避免editlog无限扩大,Secondary NameNode会周期性的读取NameNode中的fsimage和editlog,并合并为新的fsimage,之后新的操作记录写入新的editlog中。
过程:
(1)NameNode将hdfs更新记录写入edits.new文件
(2)Secondary NameNode通过http get的方式获取NameNode的fsimage和edits文件
(3)Secondary NameNode合并fsimage和edits文件,生成新的fsimage.ckpt(过程比较耗时,所以放在secondary namenode中)
(4)Secondary NameNode通过http post的方式将fsimage.ckpt发送给NameNode
(5)NameNode将fsimage.ckpt,edits.new重命名为fsimage,edits
NameNode故障后
将Secondary NameNode的fsimag拷贝到NameNode的工作目录下,重建元数据信息。
(editlog存放在Namenode中,当Namenode挂掉,editlog也会丢失,导致利用secondary namenode恢复Namenode时,会有部分数据丢失。)
参考链接:
http://blog.****.net/xh16319/article/details/31375197
http://blog.****.net/chenkfkevin/article/details/61196409
DataNode的工作机制
职责:
管理用户的文件数据块
定期向NameNode汇报自己持有的文件块信息(心跳机制,namenode能很快感知到是够有datenode故障)
HDFS读写数据流程
读数据:
1)跟NameNode通信,找到文件块所在DataNode服务器
2)选择一台DataNode服务器,请求建立socket流。
3)DataNode从磁盘读取数据放入流,以packet问单位做校验
4)客户端以packet为单位接收,先在本地缓存,然后写入目标文件。
写数据:
1)跟NameNode通信,请求上传文件。
2)NameNode查找目标文件是否已经存在,父目录是否存在。返回是否可以上传。
3)客户端请求第一个block应该传输到哪些DataNode服务器。
4)NameNode返回3台DataNode服务器ABC
5)客户端请求其中一台A上传数据(RPC调用,建立pipeline),A收到请求后会调用B,B调用C。
6)客户端开始往A上传一个block,以packet为单位,A收到一个packet就会传给B,B传给C。
7)一个block传输完成,客户端再次请求第二个block上传的服务器。