Hadoop總結一:基礎知識-Namenode,Datanode(非HA高可用性配置)

Namenode主要功能:接受客戶端的讀寫服務
Namenode保存metadata信息(元數據)
  --文件ownership和permissions
  --文件包含哪些快
  --Block保存在哪個DataNode上(Datanode啓動時上報)

Namenode的metadata信息在啓動後會加載到內存
  --metadata存儲到磁盤文件名爲‘fsimage’
  --Block的位置信息不會保存到fsimage---這個信息保存在內存中
  --edits記錄對metadata的操作日誌

SecondaryNamenode
他不是NN的備份,但是可以作爲備份,它的主要工作是幫助NN合併edits文件,減少NN啓動時間
SNN執行合併的時機
  --根據配置文件設置的時間間隔fs.checkpoint.period默認3600秒
  --根據配置文件設置edits log大小,fs.checkpoint.size規定edits文件的最大默認是64MB

 
Datanode
  --存儲數據(Block)
  --啓動DN線程時向NN回報block信息
  --主動向NN發送心跳保持與其聯繫(3秒一次),如果NN沒有收到DN的心跳,則認爲其已經lost,copy其上的block到其他DN

Block的副本放置策略:
  --第一個副本:放置在上傳文件的DN,如果是集羣外提交,則隨機挑選一臺磁盤不太滿,cpu不太忙的節點(最好在同一個節點)
  --第二個副本:放置在第一個副本不同的機架的節點上
  --第三個副本:與第二個副本相同機架的節點
  --更多副本:隨機節點
PS:配置文件中需要把每一臺服務器的節點編號寫在配置文件中


HDFS讀流程:

客戶端(client)用FileSystem的open()函數打開文件

DistributedFileSystem用RPC調用元數據節點,得到文件的數據塊信息。

對於每一個數據塊,元數據節點返回保存數據塊的數據節點的地址。

DistributedFileSystem返回FSDataInputStream給客戶端,用來讀取數據。

客戶端調用stream的read()函數開始讀取數據。

DFSInputStream連接保存此文件第一個數據塊的最近的數據節點。

Data從數據節點讀到客戶端(client)

當此數據塊讀取完畢時,DFSInputStream關閉和此數據節點的連接,然後連接此文件下一個數據塊的最近的數據節點。

當客戶端讀取完畢數據的時候,調用FSDataInputStream的close函數。

在讀取數據的過程中,如果客戶端在與數據節點通信出現錯誤,則嘗試連接包含此數據塊的下一個數據節點。

失敗的數據節點將被記錄,以後不再連接。



HDFS寫流程:

客戶端調用create()來創建文件

DistributedFileSystem用RPC調用元數據節點,在文件系統的命名空間中創建一個新的文件。

元數據節點首先確定文件原來不存在,並且客戶端有創建文件的權限,然後創建新文件。

DistributedFileSystem返回DFSOutputStream,客戶端用於寫數據。

客戶端開始寫入數據,DFSOutputStream將數據分成塊,寫入data queue。

Data queue由Data Streamer讀取,並通知元數據節點分配數據節點,用來存儲數據塊(每塊默認複製3塊)。分配的數據節點放在一個pipeline裏。

Data Streamer將數據塊寫入pipeline中的第一個數據節點。第一個數據節點將數據塊發送給第二個數據節點。第二個數據節點將數據發送給第三個數據節點。

DFSOutputStream爲發出去的數據塊保存了ack queue,等待pipeline中的數據節點告知數據已經寫入成功。

如果數據節點在寫入的過程中失敗:

關閉pipeline,將ack queue中的數據塊放入data queue的開始。

當前的數據塊在已經寫入的數據節點中被元數據節點賦予新的標示,則錯誤節點重啓後能夠察覺其數據塊是過時的,會被刪除。

失敗的數據節點從pipeline中移除,另外的數據塊則寫入pipeline中的另外兩個數據節點。

元數據節點則被通知此數據塊是複製塊數不足,將來會再創建第三份備份。

當客戶端結束寫入數據,則調用stream的close函數。此操作將所有的數據塊寫入pipeline中的數據節點,並等待ack queue返回成功。最後通知元數據節點寫入完畢。


HDFS安全模式

  --當集羣啓動的時候,會首先進入到安全模式。安全模式是hadoop集羣的一種保護方式。當系統處於安全模式時,會檢查數據塊的完整性。假設我們設置的副本數(即參數dfs.replication)是5,那麼在dataNode上就應該有5個副本存在,假設只存在3個副本,那麼比率就是3/5=0.6。在配置文件hdfs-default.xml中定義了一個最小的副本率0.999。

我們的副本率0.6明顯小於0.999,因此係統會自動的複製副本到其他dataNode,使得副本率不小於0.999。如果系統中有8個副本,超過我們設定的5個副本,那麼系統也會刪除多於的3個副本。

總體來說,安全模式是hadoop的一種保護機制,用於保證集羣中數據塊的安全性的。

在命令行下是可以控制安全模式的進入、退出和查看的,

命令hadoop  fs  –safemode  get 查看安全模式狀態

命令hadoop  fs  –safemode  enter 進入安全模式狀態

命令hadoop  fs  –safemode  leave 離開安全模式狀態


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