第三章:Hadoop分布式文件系统
- 跟普通文件系统相比,分布式文件系统的块不再是磁盘块的整数倍。块的大小可以通过配置参数来规定。
- HDFS由n台运行着DataNode的机器和1台运行NameNode的机器构成。
- 每个DataNode管理一部分数据,存储文件块数据,以及块数据的校验和。
- NameNode负责管理整个HDFS集群的信息,存储元数据(元数据:比如文件名,文件目录结构,文件属性(生成时间、副本数量、文件权限等))、每个文件的块列表、块所在的DataNode等。
- DataNode工作机制:
1、DataNode负责存储管理用户的文件块数据,定期向NameNode汇报自身所持有的block信息(通过心跳报文信息上报)。
2、Block保存在DataNode节点上,这部分数据并非保存在NameNode磁盘上,是在DataNode启动时上报给NameNode的,NameNode接收到之后,将这些信息保存在内存中。 - 写数据流程:
1、 客户端要向HDFS写数据时,首先要跟NameNode通信,请求上传文件。NameNode校验文件的路径、权限等。
2、 NameNode返回是否可以上传。
3、 若可以上传,客户端请求获取第一个最近的服务器的存储位置
4、 客户端请求向该服务器上传数据,本质上是RPC调用(远程请求),建立pipeline,在该服务器收到请求后,又会继续调用后面的两个服务器,将整个pipeline建立完成,再逐级返回给客户端。
5、 客户端开始向第一个服务器上传第一个block,先从磁盘上读取数据,放到本地内存缓存,以packet为单位,第一个服务器收到一个packet就会传给下一个,下一个再传给下下一个,第一个服务器每传一个packet会放入一个应答队列等待应答。
6、 当一个block传输完成之后,客户端再次请求NameNode上传第二个block的服务器。 - 读数据流程:
1、 客户端跟NameNode通信,查询元数据,NameNode找到文件块所在的DataNode服务器。
2、 挑选一台DataNode服务器(就近原则),请求建立socket流
3、 DataNode开始发送数据(从磁盘里读取数据放入流中,以packet为单位来校验)
4、 客户端以packet为单位来接收,先在本地缓存,然后写入目标文件