Hadoop——HDFS設計理論概述及常用命令

Hadoop——HDFS設計理論概述及常用命令

HDFS的設計思想:
    1.HDFS是通過分佈式集羣來存儲文件(爲客戶端提供了一個便捷的訪問方式,就是一個虛擬的目錄結構);
    2.文件存儲到HDFS集羣中去的時候是被切分成block的;
    3.文件的block存放在若干臺datanode節點上;
    4.HDFS文件系統中的文件與真實的block之間的映射關係,由namenode管理;
    5.每一個block在集羣中會存儲多個副本,好處是可以提高數據的可靠性,還可以提高訪問的吞吐量。
(下圖是HDFS的架構原理圖)

HDFS架構圖

對DataNode(DN)和NameNode(NN)的相關介紹:

namenode記錄元數據:
    1.客戶端上傳文件時,NN首先往edits log文件中記錄元數據操作日誌;
    2.客戶端開始上傳文件,完成後返回成功信息給NN,NN就在內存中寫入這次上傳操作新產生的元數據信息;
    3.每當edits log寫滿時,需要將這一段時間新的元數據刷到fsimage文件中去;
    SecondaryNameNode:將edits log文件合併到fsimage文件中(fsimage和edits log相關示意圖如下圖所示)。
datanode提供真實的文件數據存儲服務:
    1.文件塊(block):最基本的存儲單位(HDFS默認block大小是128M);
    2.不同於普通文件系統的是,HDFS中,如果一個文件小於一個數據塊的大小,並不佔用整個數據塊存儲空間;
    3.Replication,多副本,默認是三個(hdfs-site.xml的dfs.replication屬性)

SecondaryNameNode作用示意圖

====>HDFS讀寫文件過程
讀文件過程:
  1.使用HDFS提供的客戶端開發庫Client,向遠程的Namenode發起RPC請求;
  2.Namenode會視情況返回文件的部分或者全部block列表,對於每個block,Namenode都會返回有該block拷貝的 DataNode地址;
  3.客戶端開發庫Client會選取離客戶端最接近的DataNode來讀取block;如果客戶端本身就是DataNode,那麼將從本地直接獲取數據。
  4.讀取完當前block的數據後,關閉與當前的DataNode連接,併爲讀取下一個block尋找最佳的DataNode;
  5.當讀完列表的block後,且文件讀取還沒有結束,客戶端開發庫會繼續向Namenode獲取下一批的block列表。
  6.讀取完一個block都會進行checksum驗證,如果讀取datanode時出現錯誤,客戶端會通知Namenode,然後再從下一個擁有該block拷貝的datanode繼續
寫文件過程:
  1.使用HDFS提供的客戶端開發庫Client,向遠程的Namenode發起RPC請求;
  2.Namenode會檢查要創建的文件是否已經存在,創建者是否有權限進行操作,成功則會爲文件創建一個記錄,否則會讓客戶端拋出異常;
  3.當客戶端開始寫入文件的時候,開發庫會將文件切分成多個packets,並在內部以數據隊列"data queue"的形式管理這些packets,並向Namenode申請新的blocks,獲取用來存儲replicas的合適的datanodes列表,列表的大小根據在Namenode中對replication的設置而定。
  4.開始以pipeline(管道)的形式將packet寫入所有的replicas中。開發庫把packet以流的方式寫入第一個datanode,該datanode把該packet存儲之後,再將其傳遞給在此pipeline中的下一個datanode,直到最後一個datanode,這種寫數據的方式呈流水線的形式。
  5.最後一個datanode成功存儲之後會返回一個ack packet, 在packet裏傳遞至客戶端,在
  客戶端的開發庫內部維護着"ack queue", 成功收到datanode返回的ack packet後會從
  "ack queue"移除相應的packet。
  6.如果傳輸過程中,有某個datanode出現了故障,那麼當前的pipeline會被關閉,出現故障的datanode會從當前的pipeline中移除,剩餘的block會繼續剩下的datanode中繼續以pipeline的形式傳輸,同時Namenode會分配一個新的datanode,保持replicas設定的數量。
  (讀文件和寫文件過程示意圖如下圖所示:)

HDFS讀文件過程
HDFS寫文件過程

Rack Awareness策略:
  1.第一個block副本放在和client所在的node裏(如果client不在集羣範圍內,則這第一個node是隨機選取的,系統會嘗試不選擇哪些太滿或者太忙的node)。
  2.第二個副本放置在與第一個節點不同的機架中的node中(隨機選擇)。 
  3.第三個副本和第二個在同一個機架,隨機放在不同的node中。

Rack Awareness策略

常用管理命令:(待補充)
hadoop-daemon.sh
hdfs 
hdfs dfs
hdfs dfsadmin
hadoop namenode -format (格式化成功之後,會看到success字樣,注意:每個節點只能格式化一次,否則會出現datanode和namenode節點ID不一致的問題)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章