hdfs写操作的流程
先来一张图展示hdfs写操作的流程 hdfs dfs put ../test.log /data/
步骤:
1.client通过rpc协议调用filesystem.create(path)方法与namenode通信,check path路径在hdfs中是否存在,有没有权限,如果有就创建一个文件,但是不关联任何的block,返回一个FSDataOutputStream对象。如果没有就返回错误。
2. client调用FSDataOutputStream对象的write方法,将第一个块写给DN1,当第一个块写完,DN1复制块到DN2,DN2在复制到DN3中。
3.当DN3写完后,返回一个ack package给DN2,DN2收到DN3的ack package后,返回ack package给DN1,当DN1收到ack后,返回ack给FSDataOutputStream对象,表示第一个块的三个副本写入完成。剩余的块依照上面的顺序依次写入hdfs中。
4.当文件写完后,client调用FSDataOutputStream对象的close方法,关闭输出流,flush刷新缓存区的数据包。
5.再调用filesystem.complete方法,告诉nn我们写完了。