Hadoop基础-HDFS的读取与写入过程剖析
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
本篇博客会简要介绍hadoop的写入过程,并不会设计到源码,我会用图和文字来描述hdfs的写入过程。
一.hdfs写数据流程
如上图所示,想要把一个4.2G的文件写入到hdfs集群中,它是怎么实现的呢?其步骤简要如下:
1>.客户端向NameNode请求在"/user/yinzhengjie/movies/"目录下上传一个名称叫“苍老师.rmvb”的视频;
2>.NameNode检查客户端是否有权限上传,如果有返回客户端可以上传,否则返回权限被拒绝。
3>.客户端请求第一个block上传到哪几个DataNode服务器上;
4>.NameNode返回3个DataNode节点,分别为DataNode1,DataNode2,DataNode3(如上图所示);
5>.客户端请求DataNode1上传数据,DataNode1收到请求会继续调用DataNode2,然后DataNode2再调用DataNode3,将这个同学管道简历完成;
6>.DataNode1,DataNode2,DataNode3逐级应答客户端
7>.客户端开始往DataNode1上传第一个block(先从磁盘读取数据存放到一个本地内存缓冲区),以package为单位,DataNode1收到一个package就会传给DataNode2,DataNode2传给DataNode3;DataNode1每传一个packet会放入一个应答队列等待应答;
8>.当一个block传输完成后,客户端再次请求NameNode上传第二个block的服务器。(重复执行3~7步)
二.hdfs读数据流程
如上图所示,想要把一个4.2G的文件从hdfs集群中读取,它是怎么实现的呢?其步骤简要如下:
1>.客户端向NameNode请求下载"/user/yinzhengjie/movies/苍老师.rmvb"的文件;
2>.NameNode通过查询元数据,如果找到文件块所在的DataNode地址列表就返回给客户端,如果没有找到元数据信息就返回客户端访问的资源不存在;
3>.客户端拿到NameNode的数据之后,挑选一台DataNode服务器(就近原则,然后随机)请求读取数据;
4>.DataNode开始传输数据给客户端(从磁盘里面读取数据放入流,以package为单位来做实验);
5>.客户端以package为单位接收,现在本地缓存,然后写入目标文件;
原文:https://www.cnblogs.com/yinzhengjie/p/9614267.html