首页 > 代码库 > HDFS读写

HDFS读写

技术分享

 

技术分享

Master-slaver结构,namenode是中心服务器维护着文件系统树和整个树内的文件目录,

负责整个数据集群的管理。datanode分布在不同的机架上,在客户端和namenode的调度下

存储并检索数据块,并且定期向namenode发送所存储的块的列表。客户端通过datanode和namenode

的交互访问文件系统。联系namenode获取文件的元数据,真正的IO操作直接和datanode交互。 

数据块在不同的datanode上备份以应对节点故障。默认每个数据块都保存三个副本,其中两个副本存在不同

机架两个不同节点上,另一个副本存在不同机架的节点上。

技术分享

默认数据块大小64M

元数据指文件和目录的属性信息。

镜像文件中记录修改时间,访问时间,数据块大小,组成一个文件的数据块存储位置

目录中镜像文件包含修改时间,访问控制权限。

日志文件记录HDFS 所有跟新操作

namenode启动时,合并镜像文件和日志文件。把内存中的元数据跟新到最新状态。

i技术分享

每3sdatanode向namenode发送心跳,显示自己存活,每10次心跳发送一次数据块报告,‘

包含自己存储的数据块信息通过这些信息,namenode能重建元数据,并确保每个数据块有足够的副本。

 

 

技术分享

1客户端打开分布式文件系统

2分布式文件系统通过远程过程调用访问namenode,

读到数据块信息,datanode地址

3客户端通过文件系统输入输出流读数据

4向距离最近的datanode读取数据

5出错则向副本发起连接,并记录,以后不再连接

技术分享

1客户端打开分布式文件系统

2分布式文件系统通过远程过程调用访问namenode

3namenode首先确认文件不存在,然后创建一个新的文件

4客户端通过文件系统输入输出流写入数据

5FSDataOutputStream将数据分成块写入队列

6DataStreamer处理数据队列,根据数据队列,要求namenode分配适合的datanode来存储数据副本,每个数据块默认赋值三块

7然后将数据发送给第一个datanode,第一个datanode将数据发送给第二个datanode,第二个datanode将数据块发送个第三个datanode

8数据写好后,向FSDataOutputStream发送ACK,FSDataOutputStream调用close向namenode通知写入完成,

HDFS读写