NameNode和DataNode之间的交互

简介

HDFS的设计核心是提高处理数据的吞吐量而不是低延迟,因此更适合数据的批处理,而非交互式处理,HDFS弱化了一些POSIX语义以获求吞吐量提升。HDFS对存储在其上的数据使用了一次写入多次读取的文件控制模型,一旦一个文件被写入并且存储到HDFS系统上,只可以追加写入该文件而不能修改,从而达到提高吞吐量的目标

NameNode可以执行以下HDFS功能

1、执行所有的HDFS操作,如打开/关闭文件或目录
2、映射数据块到DataNodes
3、维护元数据,如文件的块副本存储位置、文件当前的状态以及文件的访问控制信息等

DataNode提供所有来自客户端的读写请求,在接收到NameNode的命令后,其还执行文件块的创建、删除、复制等操作。客户端也可以直接和DataNode交互,进行文件块的创建、读、写以及副本传输操作。DataNode的守护进程保持一个开放端口以与客户端及其他DataNode节点进行通信,该端口使得NameNode知道服务器和端口信息,所以NameNode可以向DataNode和客户端发送消息,保持服务端socket的连接打开能够使客户端更有效率地读写

NameNode和DataNode之间的通信

DataNode没有直接和NameNode连接,而是在需要时才与NameNode通信,以下是DataNode与NameNode通信的方式

1、初始化注册:当DataNode启动时,将向NameNode进行注册,告知NameNode其可以处理HDFS的读写操作
2、周期性心跳:所有的DataNode周期性(默认是3秒)向NameNode发送包含有该节点使用统计的心跳信息,该心跳信息,使NameNode知道可以向DataNode发送命令,如复制、删除等
3、-getDataNodeInfo 命令显示DataNode是否存活
4、如果NameNode长时间没有收到心跳,会立即向DataNode发送一个快请求,如果NameNode无法识别DataNode或者NameNode重新启动或与DataNode的通信超时,其将要求DataNode重新注册。如果DataNode长时间(如30分钟)没有成功发送心跳信息,NameNode会把该DataNode标记为死亡状态,并且通知其他DataNode复制死亡节点上存储的数据,以使块的复制因子满足配置的副本数量
5、周期性块报告:默认情况下,每一个DataNode每1小时向NameNode发送一次块报告,通过块报告,可以将NameNode上存在的副本信息与DataNode上的副本信息进行同步。利用DataNode的周期性心跳块报告被发送给NameNode
6、完成副本写入:成功写入块副本后,DataNode会向NameNode发送消息

实例图

NameNode和DataNode之间的交互_第1张图片

你可能感兴趣的:(hadoop)