剖析文件读取
1.客户端向namenode请求下载文件,
2.namenode通过查询元数据,找到文件块所在的datanode地址,返回元数据
3.挑选一台datanode(就近原则,然后随机)服务器,请求读取数据。
4.datanode开始传输数据给客户端(从磁盘里面读取数据放入流,以packet为单位来做校验)。
注意:
- 1.此处分块可能会请求不同的datanode,如下图所示的blk_1和blk_2,且这两个块会先合并,形成完整的数据后,再存储到本地
- 2.客户端以packet为单位接收,先在本地缓存,判断是否需要合并,然后写入目标文件。
这时候,我们考虑一个可能出现的问题:
假设有三个节点dn1、dn2、dn3,有数据pdc.avi
client1修改了dn1的pdc.avi,而dn2、dn3的数据还没有来得及备份
此时client2读取pdc.avi,但是却从dn3开始读取,导致读取的pdc.avi不是最新修改的pdc.avi,数据一致性被破坏
有没有什么方法,能使数据被其他client可见呢?这就是一致性模型的由来:
一致性模型
1.使用debug调试如下代码<