HDFS - HDFS的四个角色

在上一篇已经知道了HDFS是把文件切成块后,再存储在多个服务器中,而且为了数据的安全性,都作了多个副本进行冗余存储。那在HDFS中,是谁对文件进行切块?是谁决定了块存储在哪里?是谁管理存储的文件?
在HDFS中,有这几种角色:node

  • NameNode: 负责处理Client的请求、元数据管理等其余功能。
  • DataNode:主要就是存储文件块的。
  • Client:客户端,与NameNode、DataNode交互。
  • SecondaryNamenode:分担NameNode的压力,主要是元数据的合并。

image.png

Client

上传文件的时候,Client会把一个大文件切成一个个块,在早先的版本中,每一个块是64M的,后面的版本是128M每一个块,这个能够根据系统的使用进行调整。
切成块后,再询问NameNode他每一个块要存放哪里,等拿到NameNode的回复后,就开始把块的数据上传到DataNode中。
若是是读文件的话,就会询问NameNode每一个块在哪里,而后根据NameNode的回复,从相应的DataNode读取文件,最后把块拼接合并成文件。
除了读写文件外,Client也会经过其余的命令来和NameNode以及DataNode交互。安全

NameNode

NameNode有一个50070端口的HttpServer,提供各类功能,好比咱们用50070访问网页的时候,就是这个服务提供的功能。这个HttpServer服务还有一个提供了imagetransfer功能,用于元数据合并。
除了Http服务,NameNode也提供了两个RPCServer,一个是ClientRpcServer一个是ServiceRpcServer。
ClientRpcServer是用来响应Client的读写请求以及其余请求。
ServiceRpcServer是用来响应DataNode的请求,好比注册、心跳。
image.png
NameNode负责处理Client的请求,由于他知道块的每一个副本要怎么存储,每一个副本已经存储在哪里,那他怎么知道的呢?
好比上图的文件,被分红4块,读取的时候,咱们怎么知道把哪些块读取出来合并成,还原到原来的文件?咱们又怎么知道要读取的块存放在哪一个DataNode?
这些信息都是元数据来记录的,NameNode会在硬盘和内存中存储一个叫元数据的东西,一个文件被分红多个块,那这个文件和每一个块的对应关系是记录在元数据里的。每一个块又存储在多个DataNode,这些信息也是记录在元数据里的。服务器

DataNode

DataNode是实际上读写文件的地方,他存储着全部的文件,每一个DataNode都不能保证不出故障,因此咱们文件是以多副本的形式存储在DataNode中。
和NameNode同样,DataNode也提供了HttpServer和RPCServer。
HttpServer用于处理NameNode和其余DataNode的请求。
RPCServer用于处理Client和其余DataNode的请求。
当Client要上传文件的时候,NameNode须要告知Client上传到哪一个DataNode,这些DataNode必须是正常的,为了让NameNode知道本身是正常的,NameNode会按期的发送心跳信息给NameNode。spa

相关文章
相关标签/搜索