您现在的位置是:主页 > 数据库技术 > 数据库技术

NameNode有什么用

IDCBT2021-12-30服务器技术人已围观

简介小编给大家分享一下NameNode有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 一 Nam

小编给大家分享一下NameNode有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一 NameNode的作用

     NameNode是文件系统的大脑,管理文件的命名空间以及对集群中文件的访问,存储着元数据。保存的最重要的两个映射:文件名&数据块(保存在磁盘上,持久化的)  ,数据块&DateNode列表(NameNode不保存,是通过DataNode传递的)。

    NameNode 与客户端,DataNode,NameNode之间都可以通信,分别通过实现ClientProtocol,DataNodeProtocol和NameNodeProtocol接口。

二 文件读写过程分析

   1 文件读取过程

       首先客户端使用FileSystem.open()函数打开文件,DistributedFileSystem使用RPC与NameNode通信,得到文件的数据块信息,对于每一个数据块,元数据返回的是保存该数据块的数据节点的地址。

        然后DistributedFileSystem 返回FSDataInputStream 给客户端用来读取数据,客户端调用Stream的read()方法开始读取数据。

        DFSInputSteam连接保存此文件第一个数据块的最近的数据节点,data从数据节点读到客户端,当数据块读取完毕,DFSInputStream关闭与此数据节点的连接,连接下一个数据块的最近的数据节点。当所有节点读取完毕,调用FSDataInputSteam的close函数关闭。

      在读取过程中,如果客户端在与数据节点的通信中,出现错误,则直接读取下个节点,并将此节点记录下来。

   2 文件写入过程

      首先客户端调用create()方法创建文件,DistributedFileSystem调用RPC与NameNode通信,传达客户端要新建一个文件,元数据节点检查命名空间,确定文件原来不存在,并且客户端有创建文件的权限,然后在创建文件。返回DFSOutputStream,使得客户端写入数据。

      DFSOutputStream 将数据分成块,写入data queue,因为数据的写入是流式的,data queue 由Data Stream 读取,并通知其他的数据块(假设默认复制3块),分配的数据节点放在一个pipeline里。

     Data Streamer将数据块写入pipeline中的第一个数据节点,第一个数据节点又将数据块写入第二个数据节点,第二个数据节点将数据写入第三个数据节点。DFSOutput Stream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据写入成功。如果数据节点在写入过程中失败,关闭pipeline,将ack queue 中的数据块放入data queue 的开始。失败的数据节点从pipeline中移除,另外的数据块则写入pipeline中另外的两个数据节点。元数据则被通知,复制块数目不足,将会创建第三份备份。

标签:

很赞哦! ()

本栏推荐