HDFS读写文件

写文件:

  1. client向远程NameNode发起RPC请求;
  2. NameNode检查文件是否存在,成功则为文件创建一个记录;
  3. client根据block size将文件切分成多个packets,并以“data queue”的形式进行管理,另外获取block的replication数;
  4. 以pipeline的形式将packets写入所有的replication中,先写入第一个DataNode,该DataNode把packets存储之后,将其传递给pipeline的下一个DataNode,直到最后一个DataNode(流水线形式);
  5. 最后一个DataNode存储成功后返回ack确认,在pipeline中传递到client;
  6. 传输过程中某个DataNode故障,则将当前pipeline关闭,移除故障的DataNode,剩余的DataNode仍以pipeline的形式传输,根据replication数量,分配需要的DataNode;
  7. client完成数据的写入之后,调用close()方法,关闭数据流

读文件:

  1. client向远程namenode发起RPC请求;
  2. namenode返回文件的block列表,元数据,DataNode地址等信息;
  3. client选取离它最近的datanode读取block;
  4. 读取完当前block之后,关闭DataNode连接,开始读取下一个最佳位置的block;
  5. 直到所有数据读取完之后,关闭数据流。

猜你喜欢

转载自blog.csdn.net/quitozang/article/details/82691025