一、hdfs角色划分

hdfs集群共有三个角色:Namenode (Secondary Namenode)、Datanode
namenode
负责整个文件系统元数据的管理(维护目录树)
客户端请求访问hdfs都是通过namenode来接收客户端的请求
注意:每个block信息占用大概150字节的namenode空间
datanode
负责管理用户文件数据块,文件会按固定的大小切割成若干块后分布式存储在各台datanode上,一个文件块 可以有多个副本(默认3),分别存储在datanode上
datanode会定期向namenode汇报自身锁保存的文件block信息,而namenode会负责记录文件的存储的相关 信息

六、hdfs工作机制 - 图1

二、hdfs写数据流程

image.png

  • 客户端向namenode请求上传文件,namenode检查目标文件是否存在
  • namenode返回可以上传
  • client请求block_1可以上传到哪些datanode服务器上
  • namenode返回三个可用的datanode节点

就近原则选择一台(网络拓扑上的就近)
第二台优先选另一个机架上的datanode
第三台在本机架上挑选一台

  • 客户端向datanode请求建立一个block的传输通道(本质上是rpc,建立pipeline),第一台datanode收到请求会调用第二台datanode,第二台会调用第三台,建立完成逐级返回客户端
  • datanode应答通道建立成功
  • 客户端向datanode传输数据,一个block传输完成后,client再次请求namenode上传第二个

    三、hdfs读数据流程

    image.png

  • 客户端向namenode请求下载文件

  • namenode返回目标文件的元数据信息(block所在的datanode)
  • 客户端向datanode请求读取数据文件
  • datanode以FSDataInputStream流的形式向客户端传输数据
  • 客户端生成文件