一、HDFS组成角色
1、NameNode:
hdfs元数据管理者,管理namespace(文件系统命名空间),NameNode维护文件系统命名空间。
namespace或其属性的任何更改都由NameNode记录。简写NN。
2、DataNodes:
Datanode是文件系统的工作节点,他们根据管理指令(客户端或者是namenode)调度存储和检索数据。
心跳机制:定期向namenode发送他们所存储的块(block)的列表。简写ND。
3、Client
客户端(client)代表用户与namenode和datanode交互来访问整个文件系统。
开发人员面向client api来编程即可,对namenode、datanode可以无感。
二、HDFS架构设计
1、基本架构
2、读文件流程
①、client向NN发送请求寻找数据对应块的位置。
②、NN返回元数据。如所属机器、那块block_id、先后顺序。
③、client与DN直接通信读取各个块的信息,为并行读取,client合并。
3、写文件流程
①、1)向namenode发送读数据请求后,寻找可以写入的块信息的机器位置所在。
2)文件过大,写入可能会分成很有block,实际则一个block一个block的申请。
3)若副本为3,则每次请求返回一个block对应的3个副本的block要存放的位置。
②、1)拿到3个块的datanode,client写入第1个datanode,逐个package包的方式。如64K去发送和接收。
2)第1个向第2个datanode传输,第2个向第3个传递package。
3)写完该block后,如果还有则反复进行第1步和第2步。
③、1)所有block写完后,client收到全部写完的ack答复,告诉namenode已写完,client关闭socket流。
2)datanode也会向namenode报告新增block信息。