1.删除hdfs文件是如何实现的?
HDFS中进行数据的删除,与传统思想区别很大。传统硬件文件的删除操作是用户首先找到要删除文件所在的位置,然后把文件清除掉。而在 HDFS 中,由于一个大文件是被切割成若干个小的Block,然后这些Block是以多副本的形式存储在不同的DataNode中。文件与对应Block存储位置的映射关系存储在NameNode中,如果一起找到该文件所有映射位置,启动多线程进行删除时,会给NameNode带来很大压力,客户的等待时间也长。HDFS在这方面有充分的考虑,把删除任务分解成不同的工作线程,减轻NameNode_工作负载压力,使客户体验度提高。HDFS删除数据的流程示意如图所示。
后台会按照第一个块+副本,第二个块+副本…的顺序进行删除。
图中HDFS 删除数据具体过程描述如下:
1.第一步:Client向 NameNode发出一个删除的文件的请求,NameNode从请求中获知Client要删除的文件是什么,会将删除文件的信息记录到Edit Log上形成一条删除的日志。
2.修改记录完成后,给Client发回消息表示删除完成。此时Client认为文件已经删除掉了。此时,只有Client端与NameNode发生了信息的交互,真实的数据还存在于DataNode中没有删除掉, EditLog上形成的删除的日志的记录信息与Fslmage中信息没有合并完成。
留在DataNode中的实际数据什么时候清除?
在回答这个问题前,先强调一-件事,经过读写的学习我们了解到Client都是先到NameNode获得文件切成块的信息与块数据存储在DataNode的位置后才进行下一.步的操作。所以常规想法删除也应该是Client得到块存储信息后到指定DataNode把数据删除就完事啦。其实不然然,为了减轻NameNode节点工作压力,为了提高客户体验难度,前面讲过用户体验到删除时,实际数据不一定真的已经被删除。这里要讲的HDFS实际的删除机制受NameNode与DataNode访问关系影响,NameNode.不会定期的向各个DataNode去“索取”块Block的信息,而是各个DataNode定期向NameNode汇报块Block的信息。为此,还留存在DataNode里的实际数据删除时间及过程如下所述:
(a) DataNode 会定时地向NameNode发送心跳,汇报存储于当地磁盘中数据块Block的信息列表:
(b) NameNode 收到列表信息后,会在自己的内存中查这些数据块BIock属于什么文件,虽然FsImage中存储的是文件名到数据块Block的映射,实际上NameNode在启动时会有一个Block到文件名的反向索引结构:。
© NameNode确认DataNode此次汇报的列表信息中不存在的Block为无效的( Invalid)的数据块Block并列成列表的形式回复给DataNod
hdfs之读,写,删除流程
最新推荐文章于 2023-01-28 14:11:20 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)