hdfs读原理
- client调用DFS的open打开希望读取的文件,DFS代表了分布式文件系统的一个实例。
- DFS通过rpc,调用namenode机器,确定文件起始块的位置。同一个块,按照重复数,返回多个位置,这些位置按照hadoop集群拓扑结构排序,离client近的排在前面。
- 第2步返回DFSInputStream,它可以管理datanode和namenode。client调用DFSInputStream的read。
- DFSInputStream连接距离最近的datanode,读数据。
- 到达块末尾,DFSInputStream关闭和该DataNode的连接,寻找下一个块的最佳datanode,依次类推。
hdfs写原理
- client调用DFS的create,创建新文件。
- DFS通过rpc,调用namenode机器,创建一个空文件,并且为新文件添加一条记录。
- 第2步返回一个DFSOutputStream,它可以管理datanode和namenode。DFSOutputStream把写的数据切成一个个小的packet,放到data queue
- DataStreamer处理data queue的packet,先问namenode,当前packet最适合存储在哪些datanode,比如重复数是3,就找到3个最适合的datanode。packet被写到第一个datanode,第一个datanode会把packet输出到第二个datanode,以此类推。
- DFSOutputStream有一个ack queue,里面也是packet,当某个packet对应的应该写入的datanode都表示已经写入了,ack queue会把对应的packet移除。