Hadoop入門必須知道的簡單知識

Hadoop入門知識

Hadoop構成

Hadoop由4個主要構成部分:

1) 基礎核心:提供基礎的通用的功能

2) HDFS:分佈式存儲

3) MapReduce:分佈式計算

4) YARN:資源分配(多個任務是排隊執行還是同時執行)

 

HDFS構成

HDFS由3種主要的節點構成:

1) NameNode  用來存儲數據的存放位置等元數據(不存放數據)

2) DataNode 只用來存儲數據

3) SecondaryNameNode   

輔助NameNode運行,將NameNode產生的元數據持久化到磁盤上

注意:生產環境中一臺計算機通常只擔任一種角色。測試環境中一臺計算機可以擔任多種角色;如僞分佈模式中擔任全部角色,測試集羣中也常見NameNodeSecondary NameNode在同一臺計算機上。

 

NameNode

進程

對應於NameNode進程(通過jps命令可以查看java進程)。

功能

1) 存儲數據的分佈位置、數據的各種描述信息(如文件名、文件大小、文件所在目錄、所有者名稱、讀寫執行權限等)

2) 讀數據時,要先從NameNode獲取文件的分佈位置(在哪些DataNode上),然後再從DataNode上讀數據(當然,這個過程已經由HDFS的ShellAPI實現了)

3) 寫數據時,先向NameNode提交要寫的文件的信息,NameNode檢查自己的記錄表,以找到合適的DataNode(需要找多個,因爲每個文件還要創建副本)來存儲這些數據,然後指揮這些DataNode串成一串接收數據。如果某個DataNode在接收數據時罷工,則忽略掉它(忽略之後造成的副本數少於指定數量會在後期補加副本);如果所有選出的DataNode全掛掉(機率很低),則寫入失敗。

4) 需要時,可以調用NameNode列出HDFS中的文件夾及文件(如執行 hdfs dfs -ls / 命令時)。

元數據存儲位置

具體存儲位置由配置文件指定,即hdfs-site.xml中的 dfs.namenode.name.dir 指定

這個位置可以用,列表指定多個位置進行擴容

 

dfs.namenode.name.dir的默認值是file://${hadoop.tmp.dir}/dfs/name

${hadoop.tmp.dir}的默認值是 /tmp/hadoop-${user.name}

${user.name}是安裝Hadoop的用戶名

 

這些默認值在Hadoop官方網站的文檔中有詳細說明

配置時,爲了簡單,通常會在core-site.xml中修改 ${hadoop.tmp.dir},因爲這個值在各個具體配置文件中被多次引用!

 

通過Hadoop的瀏覽站點也能找到NameNode元數據的存儲位置,在Overview頁上

 

 

持久化的元數據

進入NameNode存放元數據的目錄,可以看到如下文件:

 

NameNode的元數據運行時是加載在內存中的(因爲這些數據需要快速查詢),當NameNode關閉時,內存中的元數據又會持久化到硬盤上(上圖中的fsimage文件)。在不考慮HDFS的寫操作時,元數據只在內存和硬盤之間交換。

內存元數據  《——》 fsimage

HDFS集羣是要寫數據的,這時就會導致內存中的元數據和硬盤上的fsimage文件不同。內存是易失的,如意外斷電或死機都會導致內存中的數據丟失,爲了保證所有的數據變化都能記錄下來,HDFS會將所有的操作都記錄到edits文件中。這樣在寫數據時就會形成以下關係:

內存元數據  ==  fsimage + edits

SecondaryNameNode

進程

對應於SecondaryNameNode進程

功能

生產環境中NameNode會長時間運行,幾乎不關閉。而內存中的元數據是在NameNode關閉時進行持久化的。這樣生產環境中內存元數據與持久化元數據差異就會越來越大,會導致生成大量的edits文件,NameNode重啓速度變慢。爲了解決這些問題就產生了Secondary NameNode。

SecondaryNameNode會將NameNode中產生的fsimageedits下載過來,執行合併生成新的fsimage,然後把新的fsimage再重新發回NameNode,這樣NameNode中的持久化元數據就能與內存中的元數據一致或非常接近了,edits文件的數量大大減少。

發佈了63 篇原創文章 · 獲贊 148 · 訪問量 45萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章