hdfs 文件读写的过程详解(大数据面试题系列~~~)

HDFS 集群以管理节点-工作节点的模式在运行,即一个namenode(管理节点)和多个datanode(工作节点)。namenode 管理文件系统的命名空间,它维护着文件系统树及整棵树内所有文件和目录。namenode 也记录着每个文件中各个块所在的数据节点信息。datanode 是文件系统的工作节点,它们根据需要存储并检索数据块。

文件读取过程剖析

首先HDFS 客户端向namenode 节点请求一个块的信息,namenode 返回存有该块副本的datanode 地址。然后根据返回的datanode 与 HDFS 客户端之间的距离来排序,选出一个距离最近的datanode 节点。最后该客户端会从选出的datanode 节点读取相应的数据块副本。

在读取数据的时候,如果客户端在与datanode 通信时遇到错误,客户端会尝试从另一个距离临近的datanode 读取数据。同时它会记住这个有故障的datanode ,并上报给namenode。

文件写入过程剖析

客户端首先需要向namenode 发起新建一个文件的请求, namenode 执行各种检查来确保这个文件不存在并且权限足够,如果检查通过,namenode 就会为创建新文件记录一条记录,否则抛出异常。

在客户端写入数据时,数据会被分为一个个的数据包,并写入一个内部队列。然后客户端根据一定规则挑选出适合存储数据块副本的一组datanode,并要求namenode 分配数据块。

这一组datanode 构成一个管线—假设副本数为3,则管线中有3个节点。客户端会先将数据包流式传输到第一个datanode,第一个datanode 存储数据包并将数据包发送到管线的第二个datanode。同样,第二个datanode 存储该数据包然后发送到管线中的第三个datanode。

客户端维护着一个内部数据包队列来接受datanode 的确认回执消息。当收到管线中所有datanode 确认消息后,该数据包才会从数据队列删除。

如果有任何datanode 在数据写入期间发生故障,从管线中删除故障datanode ,基于两个正常datanode 创建一条新管线,余下的数据块写入管线中正常的datanode。当namenode 注意到块副本数不足时,会在另一个节点创建一个新的副本,同样进行正常的数据传输备份。

客户端完成数据的写入之后,会告知namenode 数据写入完成,并等待namenode 的确认。(namenode 知道文件由哪些块组成,它会去确认这些块是否完成最小量的复制)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值