Hadoop深入学习:HDFS主要流程——NameNode节点上的文件和目录操作

        上节中我们已经学习了HDFS的体系结构及其优缺点,本节我们将着重学习HDFS的几个主要流程。
   
        客户端在NameNode上的文件与目录操作
        创建文件目录
        客户端命令:
              hadoop fs -mkdir test
        

        示意图如下:

        当客户点通过命令行穿件文件目录时,实际上是调用HDFS的FileSystem实例,也就是DistributedFileSystem的mkdir方法时,DistributedFileSystem对象通过RPC调用NameNode节点上的远程方法mkdir(),让名字节点执行具体的创建子目录的操作:在NameNode的目录上数据结构的对应位置创建新的目录节点,同时将这个操作并持久化到编辑日志中,方法执行成功后返回true,结束这一操作过程。
        在创建目录的整个过程中,客户端不需要和DataNode节点进行交互。但是一些复杂的操作,比如复制副本和删除HDFS上的文件时,都需要数据节点的配合执行这样的操作——但是不是理解和DataNode节点交互,这要通过主从节点之间的“心跳”来交互这些操作信息,然后由DataNode数据节点来具体执行这些操作。

         接下来我们再看客户端是如何删除HDFS上的文件的,命令行删除命令:
      hadoop fs -rm example.txt

整个删除流程如下:

         1)、客户端调用HDFS的FileSystem实例,也就是DistributedFileSystem的delete()方法向NameNode发送数据的“删除”操作;
         2)、DistributedFileSystem对象通过RPC调用DateNode节点上的delete(),它值标记操作要涉及的需要被删除的数据块,并将delete操作信息持久化到编辑日Edit log;
         3)、当保存着这些数据块的DateNode节点向NameNode节点发送“心跳”,向DateNode节点报告自己当前的相关信息;
         4)、在NameNode给DataNode的心跳回答中,NameNode节点会通过DatanodeCommand命令NameNode节点删除相应的数据。
         在整个删除过程中,DateNode不会主动联系保存这些要被删除的数据块所在的DataNode节点,立即删除这些数据,而是在删除操作完成一段时间之后,才会被真的删除。
         NameNode节点和DateNode节点之间永远为此着简单的主从关系,NameNode名字节点不会向DateNode数据发送任何RPC调用请求,DateNode节点需要配合NameNode节点执行的所有操作,都是通过DateNode节点心跳应答中携带的DatanodeCommand命令返回。
       

猜你喜欢

转载自flyingdutchman.iteye.com/blog/1874616