Hadoop源碼解讀之(一)>>>>>>>>>>NameNodejava
正如大多數源碼解讀,第一篇爲NameNode的解析。
node
首先將NameNode註釋翻譯一下,大概意思以下:
服務器
1.NameNode 服務器有兩個做用:
分佈式
a.目錄名稱空間的管理者
ide
b.維護 hadoop 分佈式系統的「inode table」
函數
2.NameNode維護着兩個關鍵的對應關係
oop
a.文件名和block 塊
this
b.block 塊和其對應的存儲機器
spa
其中:第一個對應關係存儲在磁盤中,第二個對應關係在每次NameNode啓動的時候被加載到內存中。命令行
3.NameNode主要的工做是向外界暴露IPC接口、HTTP服務和一些參數管理
4.NameNode實現了3個接口:
a.ClientProtocol:容許Client請求服務,可是ClientProtocol不是被用來讓最終用戶使用的,最終用戶使用FileSystem來對HDFS進行操做。
b.DatanodeProtocol:DataNode使用該接口來存儲block塊,這些方法被DataNode調用。
c.NamenodeProtocol:該接口被secondary namenode或者balance進程調用去獲取局部的NameNode信息,如局部的blockMap等。
----解釋完註釋,來看一下代碼內容----
首先找見NameNode的構造函數
public NameNode(Configuration conf) throws IOException { this(conf, NamenodeRole.NAMENODE); } protected NameNode(Configuration conf, NamenodeRole role) throws IOException
能夠看出最終NameNode實例化走的都是後者。
下面進入main方法:
找見最重要的一句話
NameNode namenode = createNameNode(argv, null); 點進去,而後是switch代碼塊,這裏就是咱們在命令行裏面敲hdfs dfs -X的解析部分。