hadoop中namenode职责和hdfs读写

时间:2023-01-08 12:05:47

1、namenode职责:

1.1、管理各个datanode节点

1.2、管理分布式文件系统的元数据信息

比如 一个文件多大,文件名,文件被切成几块,每个文件块存到哪台datanode服务上

1.3、通过RPC心跳机制来监控datanode的状态。对于网络通信,http主外,rpc主内

1.4、为了确保数据存储的可靠性,采用冗余机制来实现,注意:副本数量不宜过多,因为会降低整个集群的磁盘利用率,一般采用3副本策略,

2、hdfs读写过程

2.1从HDFS上下载文件过程

hadoop中namenode职责和hdfs读写

①、Client向namenode发起Open file请求。目的是获取指定文件的输入流。

namenode收入请求之后,会检查路径 的合法性,此外,还会检查客户端的操作权限。如果检测未通过,则直接报错返回,后续过程不会发生

②、Client也会向namenode发起GetBlockLocation请求,获取指定文件的元数据信息。如果第一步的检测通过,namenode会将元数据信息封装到输入流里,返回给客户端。

③、客户端根据元数据信息,直接去对应的datanode读取文件块,然后下载到本地(或创建 本地的输出流,然后做流的对接)

④、读完后,关流

 2.2 往HDFS上写文件过程

hadoop中namenode职责和hdfs读写

①、Client向namenode发起Create File请求,目的是获取HDFS文件的输出流,namenode收到请求后,会检测路径 的合法性和权限,如果检测未通过,直接报错返回。

如果通过检测,namenode会将文件的切块信息(比如文件被切成几块,每个文件块的副本存在哪台datanode上),然后把这些信息封装到输出流里,返回给客户端。

所以注意:文件块的输出(上传)是客户端直接和对应datanode交互的,namenode的作用是告诉Client文件块要发送给哪个datanode上。

②、Client通过输出流,发送文件块(底层会将一个文件块打散成一个一个的packet,每个packet的大小为64kb)。这个过程的机制,叫Pipeline(数据流管理机制), 这种机制的目的在于充分利用每台机器的带宽,避免网络瓶颈和高延时的连接,最小化推送所有数据的延时

③、通过数据流管道机制,实现数据的发送和副本的复制。每台datanode服务器收到数据之后,会向上流反馈ack确认机制,直到第五步的ack发送给Client之后,再发送下一个packet。依次循环,直到所有数据都复制完成。此外,在底层传输的过程中,会用到全双工通信

④、数据上传完成之后,关流

 2.3 从HDFS上删除文件的流程

①、客户端赂namenode发现删除文件指令,比如:hadoop fs -rm /park01/1.txt

②、namenode收到请求后,会检查路径 的合法性及权限

③、如果检测通过,会将对应的文件从元数据中删除。(注意:此时这个文件并没有真正从集群上被删除)

④、每台datanode会定期向namenode发送心跳,会领取删除的指令,批到对应的文件块,进行文件块的删除