经过了前几期的介绍hadoop网络交互这块就告一段落了。接下来我们要入坑聊聊hdfs文件系统了。内容应该是越来越精彩了。但是大家一定要耐下性子,不要着急。阅读代码最忌着急。所以一定要冷静。
hdfs是什么?大家可能都知道它是一个分布式的文件系统,那么它就会有两个属性,首先它是一个文件系统,其次才是分布式这个概念。所以我们要想学习也应该先从文件系统的角度去了解它。
文件系统大家可能都很了解了,我会经常用它,那么它最基基的功能是什么呢?显而易见呀,当然是读和写了。这样说对不对?很对,但是有一点点可能大家忽略了就是文件系统的格式化,随然它不是我们使用文件系统的目的,但是它却是我们接触一个文件系统的第一步,就像开箱一样。下面我就给大家带来hdfs的开箱直播。
首先根据hadoop命令:
$ bin/hdfs NameNode –format
找到对应的java类,这个找不到的可以看看【小白看源码-1-hadoop fs命令学习】。
org.apache.hadoop.hdfs.server.namenode.NameNode
下面我们就开始学习NameNode类。
通过查看NameNode的main方法,我们了解createNameNode函数是它处理的核心逻辑,而format只是它的很小的一个分支,代码里不过3行,如下所示,而format函数就是最终的处理。
Format函数中最主要的代码也是3行,如下所示,不得不感慨大师的编码能力真是强呀^_^
不开玩笑了,这里要重点留意两个参数dirsToFormat和editDirsToFormat。这两个就是被hdfs管理的真实路径。
按代码看,我们先看一下FSImage是如何创建的。如下所示,里面又创建了NNStorage