Hadoop源碼解讀之(一)>>>>>>>>>>NameNode
正如大多數源碼解讀,第一篇爲NameNode的解析。
首先將NameNode註釋翻譯一下,大概意思如下:
1.NameNode 服務器有兩個作用:
a.目錄名稱空間的管理者
b.維護 hadoop 分佈式系統的“inode table”
2.NameNode維護着兩個關鍵的對應關係
a.文件名和block 塊
b.block 塊和其對應的存儲機器
其中:第一個對應關係存儲在磁盤中,第二個對應關係在每次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的解析部分。