hadoop最基本的功能设计就是对外提供数据的读写。框架如下(client就是读写操作的代表,一般指的是API方式获取):
1、从HDFS读取数据
2、写数据到HDFS
文件的写入过程非常复杂,我根据理解画的流程图并不完整,其中缺的最主要的一块就是在管道传输的时候遇到错误的处理流程。根据我查的资料了解,网上说的错误处理过程大致分两类,一类是关闭管道重新申请DataNode,然后再建立管道重新传输,当然数据从ackQueue返回到DataQueue是必然的。另一类则是关闭管道后移除错误节点,然后剩下的节点组成管道继续传输。错误节点的错误会被标记,等待DataNode自行处理。然后NameNode会在文件传输完成后根据副本数量自动分配DataNode复制数据达到副本数量为止。我个人任务第二种更偏向于真实情况,因为源码的注释里说移除错误节点,建立不包含错误节点的新的管道,并没有说立即申请新的DataNode组成管道。基本过程就是如下图所示(参考hadoop源码说明):