HDFS读写过程

HDFS的读写过程:node

  读过程:函数

Client收到用户的读请求——client拿着pathnamenode请求文件或者blockdatanode列表——client从返回的datanode列表中选择一个离本身最近的datanode,而且向他请求数据——datanode接到请求返回block的数据spa

读过程:对象

  DFSInputStream对象中包含文件开始部分的数据块所在的DataNode地址,首先它会连接包含文件第一个块最近的DataNode。随后,在数据流中重复调用read函数,知道这个块所有读完位置,当最后一个块读取完毕时,DFSInputStream会关闭链接,并查找存储下一个数据块客户端最近的DataNode。客户端按照DFSInputSttream打开和DataNode链接返回的数据流的顺序读取该块,它会调用NameNode来检索下一组块所在的DataNode的位置信息。队列

 

  写过程:client接到用户的写请求——client接收到数据,分割成一个个block——client请求namenode,并说明写入的数据大小和备份数——namenode返回给client须要的datanode列表——client写入第一个datanode,以packet的形式写入,一个packet通常为64k;第一个datanode写入第二个datanode,依次类推;每写入一个datanode都会返回ack信息,第一个datanode返回全部的ack信息;当datanode持久化数据后向namenode汇报已经完成——client接收到ack,检查全部datanode都写入正常,发送请求给namenode要求关闭文件——namenode关闭文件。cli

  写过程:DFSOutputStream将文件分割成包,而后放入一个内部队列。DataStreamer会将这些小的文件包放入数据流中。请求

 

  

  副本写过程:假设副本系数为3,当本地临时文件累积到一个数据块的大小(累积量超过一个数据块的大小),客户端会从NameNode获取一个Datanode列表用于存放副本,而后客户端开始向第一个Datanode传输数据,第一个Datanode一小部分一小部分(4kb)接收数据,将每一部分写入本地仓库,并同时传输到该部分到列表中第二个Datanode节点,第二个Datanode也是这样因此,Datanode采起流水线复制,从前一个节点接收数据,并在同时转发给下一个节点。im

相关文章
相关标签/搜索