storage R&D guy.
全部博文(1000)
分类: 服务器与存储
2015-01-13 13:39:42
HDFS的架构采用master/slave模式,一个HDFS集群是由一个Namenode和多个Datanode组成。
在HDFS集群中,只有一个Namenode结点。Namenode作为HDFS集群的中心服务器,主要负责:
1、管理HDFS集群中文件系统的名字空间(Namespace),例如打开文件系统、关闭文件系统、重命名文件或者目录等;另外,对任何请求对文件系统名字空间或者属性进行修改的操作,都被Namenode记录下来。
2、管理客户端对HDFS集群中的文件系统中的文件的访问,实际上文件以块的形式存储在Datanode上,文件系统客户端向Namenode请求所要执行操作的文件块(该块存储在指定的Dadanode数据结点上),然后通过与Datanode结点交互来完成文件读写的操作。那么,文件系统客户端与Namenode交互的过程中,只有从Namenode中获取到了所请求的文件块所对应的Datanode结点,才能执行文件的读写操作。也就是说,Namenode结点还负责确定指定的文件块到具体的Datanode结点的映射关系。
3、管理Datanode结点的状态报告,包括Datanode结点的健康状态报告和其所在结点上数据块状态报告,以便能够及时处理失效的数据结点。
在HDFS集群中,一个Datanode结点可以存在多个,一般是一个结点上对应一个Datanode实例。Datanode数据结点进程的任务是:
1、负责管理它所在结点上存储的数据的读写。一般是文件系统客户端需要请求对指定数据结点进行读写操作,Datanode作为数据结点的服务进程来与文件系统客户端打交道。同时,是否需要执行对文件块的创建、删除、复制等操作,Datanode数据结点进程还要在Namenode的统一指挥调度下完成,当与Namenode交互过程中收到了可以执行文件块的创建、删除或复制操作的命令后,才开始让文件系统客户端执行指定的操作。具体文件的操作并不是Datanode来实际完成的,而是经过Datanode许可后,文件系统客户端进程来执行实际操作。
2、向Namenode结点报告状态。每个Datanode结点会周期性地向Namenode发送心跳信号和文件块状态报告,以便Namenode获取到工作集群中Datanode结点状态的全局视图,从而掌握它们的状态。如果存在Datanode结点失效的情况时,Namenode会调度其它Datanode执行失效结点上文件块的复制处理,保证文件块的副本数达到规定数量。
3、执行数据的流水线复制。当文件系统客户端从Namenode服务器进程获取到要进行复制的数据块列表(列表中包含指定副本的存放位置,亦即某个Datanode结点)后,会首先将客户端缓存的文件块复制到第一个Datanode结点上,此时并非整个块都复制到第一个Datanode完成以后才复制到第二个Datanode结点上,而是由第一个Datanode向第二个Datanode结点复制,……,如此下去完成文件块及其块副本的流水线复制。
通过上面的叙述,可以看到,在HDFS集群中,存在三个主要的进程:Namenode进程、Datanode进程和文件系统客户端进程,这三个进程之间都是基于Hadoop实现的RPC机制进行通信的,该IPC模型基于Client/Server模式进行通信。因此上述三个进程之间存在如下端到端通信与交互:
1、(Client)Datanode / Namenode(Server)
2、(Client)DFS Client / Namenode(Server)
3、(Client)DFS Client / Datanode(Server)
4、(Client)Datanode A / Datanode B(Server)