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

- 客户端向namenode请求上传文件,namenode检查目标文件是否存在
- namenode返回可以上传
- client请求block_1可以上传到哪些datanode服务器上
- namenode返回三个可用的datanode节点
就近原则选择一台(网络拓扑上的就近)
第二台优先选另一个机架上的datanode
第三台在本机架上挑选一台
- 客户端向datanode请求建立一个block的传输通道(本质上是rpc,建立pipeline),第一台datanode收到请求会调用第二台datanode,第二台会调用第三台,建立完成逐级返回客户端
- datanode应答通道建立成功
客户端向datanode传输数据,一个block传输完成后,client再次请求namenode上传第二个
三、hdfs读数据流程

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