HDFS知识点
HDFS最近学习总结
一. hdfs整体运行机制:
-
客户把一个文件存入HDFS中,其实HDFS会把文件切成块进行存储,会分散存储到N台Linux系统中(存储文件块的角色是:datanode)(重要的是切块的行为是由客户端决定的)
-
一旦文件被切块切块存储,HDFS一定要有个机制,需要记录每一个文件的切块信息和每个切块具体的存储机器。(记录块信息的是namenode)
-
需要保证数据的安全性,HDFS将每一个块都在集群中存放多个副本(副本数是由存储时的客户端决定的)。
-
总结 : 一个HDFS系统是由一台运行了namenode的服务器和N台运行了datanode的服务器组成。
5.概述
- HDFS集群分为两大角色:NameNode、DataNode (Secondary Namenode)
- NameNode负责管理整个文件系统的元数据
- DataNode 负责管理用户的文件数据块
- 文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上
- 每一个文件块可以有多个副本,并存放在不同的datanode上
- Datanode会定期向Namenode汇报自身所保存的文件block信息,而namenode则会负责保持文件的副本数量
- HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行
二. 知识点:
- namenode负责客户端请求的响应
- namenode 负责元数据的管理(查询,修改)
- 元数据:HDFS的目录结构及每一个文件的块信息(块的id,副本数量,存放位置等)
三. namenode元数据记录位置 :
-
namenode把实时的完整元数据存放到内存中
-
namenode还会在磁盘中存储内存元数据在某个时间上的镜像文件fsimage
-
namenode会把让元数据变化的客户端操作记录(类似添加)在edits日志文件中。
-
namenode对数据的管理采用了三种存储形式:
内存元数据(NameSystem)
磁盘元数据镜像文件
数据操作日志文件(可通过日志运算出元数据) -
元数据存储机制
A、内存中有一份完整的元数据(内存meta data)
B、磁盘有一个“准完整”的元数据镜像(fsimage)文件(在namenode的工作目录中)
C、用于衔接内存metadata和持久化元数据镜像fsimage之间的操作日志(edits文件)
注:当客户端对hdfs中的文件进行新增或者修改操作,操作记录首先被记入edits日志文件中,当客户端操作成功
后,相应的元数据会更新到内存meta.data中
四. secondarynamenode 责任 :
- secondarynamenode会定期从namenode上下载fsimage镜像和新生成的edits日志,然后加载fsimage镜像到内存中,然 后顺序解析edits文件,对内存中的元数据对象进行修改(整合)整合完成后,将内存元数据序列化成一个新的fsimage,并将这个fsimage镜像文件上传给namenode。这个过程叫checkpoint
总结:每隔一段时间,会由secondary namenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge(这个过程称为checkpoint)
-
secondary namenode每次做checkpoint操作时,第一次checkpoint需要下载fsimage,以后就不用下载了,因为自己的机器上就已经有了。
-
总结:secondarynamenode 会把fsimage 和 edits 下载过到自己的机器上,进行序列化成元数据在传给namenode,可以记性单点故障处理。所以 secondarynamenode最好也配置下。
五. HDFS写流程:
步骤:
-
根namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在
-
namenode返回是否可以上传
-
client请求第一个 block该传输到哪些datanode服务器上
-
namenode返回3个datanode服务器ABC
-
client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用
-
C,将真个pipeline建立完成,逐级返回客户端
-
client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会
-
传给B,B传给C;A每传一个packet会放入一个应答队列等待应答
-
当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。
六. HDFS读流程:步骤:
-
跟namenode通信查询元数据,找到文件块所在的datanode服务器
-
挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流
-
datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)
-
客户端以packet为单位接收,现在本地缓存,然后写入目标文件、
七.checkpoint的额外作用
- namenode和secondary namenode的工作目录存储结构完全相同,所以,当namenode故障退出需要重新恢复时,可以从
- secondary namenode的工作目录中将fsimage拷贝到namenode的工作目录,以恢复namenode的元数据