HDFS架构(Master-Slave)
- 几个进程的角色
- nameNode(master):用于保存、管理、持久化文件的元数据(文件名、文件副本数、文件块大小、文件块列表),同时还要接收客户端的文件读写请求。
- secondaryNameNode:用于实时同步文件元数据,给nameNode服务做副本,担当高可用备份,nameNode处于正常状态时secondaryNameNode只sandBy。
- dataNode(slave):真正存储文件块,分布在每个节点上。
- dfsClient:向hdfs发请求,当用户发起一个hdfs文件读、写、查询等请求时,集群都会启动一个dfsClient进程,dfsClient先访问nameNode获取文件元数据,然后根据元数据解析出文件分片的分布情况,最后去各dataNode完成真正的读写。它扮演着用户与hdfs交互中间人的角色,同时文件的拆分和拼装也是在dfsClient进程完成的。
- HDFS文件读写流程
- 读取:系统接收到用户读请求后,首先启动一个dfsClient进程,这个进程拿着用户传递的文件路径等信息,传递给nameNode,nameNode返回文件分片的分布节点列表,dfsClient就近读取文件分片,并将各分片拼装为完整文件返回给用户。
- 写入:系统接收到用户写请求后,首先启动一个dfsClient进程,这个进程将写入文件的信息提交给nameNode,nameNode根据集群情况将文件进行分片和位置规划,再将规划信息返回给dfsClient,dfsClient根据规划信息将文件切分成特定的块,然后根据位置规划分别与对应的dataNode建立管道,将分片传输到对应的dataNode上。