写流程
1.客户端向NameNode发送写文件请求
2.NN检查文件是否存在,权限的校验,并返回对应的块上传的datanode列表
3.client会跟第一个datanode建立socket连接,然后第一个和第二个建立,第二个和第三个。。。建立连接。
4.client会将块分成64k的小文件,写入第一个datanode内存,第一个然后同时传给第二个。。。建立pipeline(如果datanode损坏则找新的datanode,如果全部损坏则上传失败)
Block副本放置策略
第一副本:上传文件的DN;如果集群外上传则挑选一台磁盘不太远cpu不太忙的机器
第二副本: 防止在和第一副本不在一个机架的节点上
第三副本:与第二副本相同机架的节点
读数据
- client访问NameNode,查询元数据信息,获得这个文件的数据块位置信息(被排序支撑本地化读取)
- 就近挑选一台datanode服务器,通过偏移量查找到对应的数据(任意位置读取)
- DataNode向输入流中中写数据,以packet为单位来校验。
- 关闭输入流