注:本文主要摘录于尚硅谷大数据的学习资料,仅作学习记录,请勿用于商业用途。
HDFS
HDFS 写数据流程:
1
)客户端通过
Distributed FileSystem
模块向
namenode
请求上传文件,
namenode
检查目标
文件是否已存在,父目录是否存在。
2
)
namenode
返回是否可以上传。
3
)客户端请求第一个
block
上传到哪几个
datanode
服务器上。
4
)
namenode
返回
3
个
datanode
节点,分别为
dn1
、
dn2
、
dn3
。
5
)客户端通过
FSDataOutputStream
模块请求
dn1
上传数据,
dn1
收到请求会继续调用
dn2
,
然后
dn2
调用
dn3
,将这个通信管道建立完成。
6
)
dn1
、
dn2
、
dn3
逐级应答客户端。
7
)客户端开始往
dn1
上传第一个
block
(先从磁盘读取数据放到一个本地内存缓存),以
packet
为单位,
dn1
收到一个
packet
就会传给
dn2
,
dn2
传给
dn3
;
dn1
每传一个
packet
会放
入一个应答队列等待应答。
8
)当一个
block
传输完成之后,客户端再次请求
namenode
上传第二个
block
的服务器。(重
复执行
3-7
步)。
HDFS 读数据流程:
1
)客户端通过
Distributed FileSystem
向
namenode
请求下载文件,
namenode
通过查询元数
据,找到文件块所在的
datanode
地址。
2
)挑选一台
datanode
(就近原则,然后随机)服务器,请求读取数据。
3
)
datanode
开始传输数据给客户端(从磁盘里面读取数据输入流,以
packet
为单位来做校
验)。
4
)客户端以
packet
为单位接收,先在本地缓存,然后写入目标文件。
NameNode&Secondary NameNode 工作机制
1
)第一阶段:
namenode
启动
(
1
)第一次启动
namenode
格式化后,创建
fsimage
和
edits
文件。如果不是第一次启
动,直接加载编辑日志和镜像文件到内存。
(
2
)客户端对元数据进行增删改的请求。
(
3
)
namenode
记录操作日志,更新滚动日志。
(
4
)
namenode
在内存中对数据进行增删改查。
2
)第二阶段:
Secondary NameNode
工作
(
1
)
Secondary NameNode
询问
namenode
是否需要
checkpoint
。直接带回
namenode
是
否检查结果。
(
2
)
Secondary NameNode
请求执行
checkpoint
。
(
3
)
namenode
滚动正在写的
edits
日志。
(
4
)将滚动前的编辑日志和镜像文件拷贝到
Secondary NameNode
。
(
5
)
Secondary NameNode
加载编辑日志和镜像文件到内存,并合并。
(
6
)生成新的镜像文件
fsimage.chkpoint
。
(
7
)拷贝
fsimage.chkpoint
到
namenode
。
(
8
)
namenode
将
fsimage.chkpoint
重新命名成
fsimage
。
DataNode 工作机制
1
)一个数据块在
datanode
上以文件形式存储在磁盘上,包括两个文件,一个是数据本
身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
2
)
DataNode
启动后向
namenode
注册,通过后,周期性(
1
小时)的向
namenode
上报
所有的块信息。
3
)心跳是每
3
秒一次,心跳返回结果带有
namenode
给该
datanode
的命令如复制块数据
到另一台机器,或删除某个数据块。如果超过
10
分钟没有收到某个
datanode
的心跳,则认
为该节点不可用。
4
)集群运行中可以安全加入和退出一些机器