HDFS集群分为两大角色:

NameNode DataNode (Secondary NameNode)

NameNode负责管理集群的元数据

DataNode负责管理用户的文件数据块

文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上

每一个文件块可以有多个副本,并存放在不同的datanode上

HDFS写数据流程

  1. 客户端向NameNode通信 发送上传文件申请,NameNode查看文件是否已经存在

  2. 文件不存在,返回给客户端响应,可以上传文件

  3. 客户端向NameNode请求第一个block上传在哪个DataNode上

  4. NameNode响应可以上传在哪些DataNode上(就近,最远,本机架) -配置机架感知

    副本数量由客户端配置

  5. 客户端向一个DataNode建立连接,并告诉还要传到哪个DataNode中,第一个DataNode收到后负责向第二个DataNode建立连接,全部建立后 响应建立完成消息

  6. 客户端将第一个block传给第一个DataNode,以packet为单位传给下一个DataNode

  7. 当第一个block传送完成,客户端请求NameNode第二个block位置

只要一个DataNode上传成功即可