1 文件上传
中等描述:
- 客户端向namenode通信,请求上传文件,namenode检查目标文件是否已存在,父目录是否存在,该客户端是否有上传权限。
- namenode返回是否可以上传。
- 客户端会先对文件进行逻辑切块,比如一个blok块128m,文件有300m就会被切分成3个块,一个128M、一个128M、一个44M请求第一个 block该传输到哪些datanode服务器上。
- namenode返回datanode列表。
- 为上传文件做准备。构建pipline,将同一个块的所有存储节点构成一个数据流通道。
- 开始真正上传文件。上传文件过程中,边上传边切块。以packet(64kb)为单位上传,先上传到第一个datenode01的缓存中,缓存中每当接收一个packet就向本地磁盘写入,并传递给下一个结点。当第一个块上传完成后关闭通道。
- 开始上传第二个块,所有块上传完成后namenode向客户端返回结果。
- 所有块上传完成后,客户端告知namenode数据上传成功。
- namenode更新元数据。
1.1 文档
1.2 课程
2 文件下载
- 客户端向namenode发送文件下载请求。
- NameNode在自己的元数据库中查询,查询到返回数据的块和存储节点。
blk_1:hadoop01 hadoop02 hadoop04
blk_2:hadoop01 hadoop03 hadoop04
如果查询不到则会报错
3.客户端拿到数据块的存储节点,先下载第一个块
下载的时候也是就近原则 - 第一个块下载完成后生成一个crc文件,和上传时候的.meta文件进行文件完整度校验(校验的是起始偏移量和末尾偏移量中间的内容)。如果校验通过,则认为第一个块下载成功
- 重复3、4
- 所有块都下载成功后,向namenode发送响应。
2.1 视频课程
2.2 文档