HDFS的读写删操作流程

一、读取流程

HDFS的读写删操作流程_第1张图片
上图的详细过程:
1、HDFS提供的客户端开发库Client,通过RPC访问NameNode,发送读操作。
2、NameNode通过查询元数据,获取到文件的存储路径,将文件对应的全部(文件较小)或者文件的部分(文件较大)的存储路径放到一个队列中,发送给客户端。
3、客户端收到队列,依次遍历队列,读取文件块的信息
4、客户端从队列中获取到第一个文件块的存储位置,从中选出一个最近的DataNode来进行读取。
5、读完第一块之后校验文件块的大小是否符合,如果符合,继续读取第二个文件块;如果不符合,表明文件有损坏,去其他DataNode重新读取,同时通过心跳机制告知NameNode。发送完后面的每一块都会校验。
6、读取完这批次的文件块,在此访问NameNode,获取下一批数据。
7、直到所有的文件块都读完,客户端会通知NameNode关闭文件。

二、写入流程

HDFS的读写删操作流程_第2张图片
1、HDFS提供的客户端开发库Client,向远程的NameNode发起RPC请求写入操作。
2、NameNode会检查要创建的文件是否已经存在,创建者是否有权限进行操作(用户也有不同的权限),成功则会为文件创建一个记录,否则会让客户端抛出异常。
3、校验都通过,NameNode会计算文件的大小,计算切块的数量,记录到元数据中,并将文件块的信息列表返回给客户端。
4、当客户端收到返回的列表,客户端会将文件切分成多个,并封装成Packets对象。(客户端在内部也是以以数据队列"data queue"的形式管理这些packets,并向NameNode申
请新的blocks,获取用来存储replicas的合适的DataNode列表,列表的大小根据在NameNode中对replication的设置而定)。
5、取出第一块数据,根据其中的地址,从中选择一个网络距离最近的DataNode,将第一个packet对象写进去。
6、开发库把packet以流的方式写入第一个DataNode,该DataNode把该packet存储之后,再将其传递给在此 pipeline中的下一个DataNode,直到最后一个DataNode。
7、最后一个DataNode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护着"ack queue",成功收到
DataNode返回的ack packet后会从"ack queue"移除相应的packet
如果传输过程中,有某个DataNode出现了故障,那么当前的pipeline会被关闭,出现故障的DataNode会从当前的pipeline中移除, 剩余的block会继
续剩下的DataNode中继续以pipeline的形式传输,同时NameNode会分配一个新的DataNode,保持 replicas设定的数量

三、删除流程

HDFS的读写删操作流程_第3张图片

你可能感兴趣的:(大数据)