从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记

Posted 中兴大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记相关的知识,希望对你有一定的参考价值。

在之前几篇文章中,我们通过对比HDFS和GFS复制流程在设计上的区别与特点,总结出了HDFS在实现流程上的细节。本篇将把实现流程的关键逻辑(主要是Client端代码)进一步抽离到一个独立类中,以顺序执行方式,呈现一个纯粹的写入流程,并附上关键代码的调用层级示意。

文 | 何文鑫

*注:点击图片可查看清晰大图

client创建namenode通信代理:

向namenode申请新建文件,副本数为2,返回fileId:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

向namenode申请新建块,namenode返回LocatedBlock,内含datanode列表:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

与第一个datanode建立socket通信:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

创建用于数据传输校验的DataChecksum:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

创建pipeline,读取ack:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

读取本地数据:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

计算本地数据校验值:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

创建容纳数据的packet:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

将数据拆分为多个chunk写入packet:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

packet写入pipeline,读取ack:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

发送close消息拆掉pipeline,关闭输入输出流:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

告知namenode块写入完成:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

运行结果:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

完整代码见github/gist:

https://gist.github.com/wenxinhe/aa37fded1978d05292c969f8d99f3d09

hdfs写入关键代码调用层级示意:

从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记(4)

(to be continued...)



「从设计到实现」系列文章:






 

大数据时代的思考和洞察

长按二维码关注

以上是关于从设计到实现:写入流程代码精炼 | 分布式文件系统读书笔记的主要内容,如果未能解决你的问题,请参考以下文章

从设计到实现:GFS和HDFS在复制上的设计及异同比较 | 分布式文件系统读书笔记

ElasticSearch原理架构

Hadoop权限认证的执行流程

go实现高并发高可用分布式系统:设计类似kafka的高并发海量数据存储机制2

从设计到实现:Replication | 分布式文件系统读书笔记

Java小题精炼训练营(篇三)