好程式設計師大資料學習路線分享HDFS學習總結

好程式設計師IT發表於2019-08-20

好程式設計師大資料學習路線分享 HDFS 學習 總結 HDFS 介紹

 

HDFS(Hadoop Distributed File System) 是分散式檔案系統 , Hadoop 專案的核心子專案 .

 

設計思想: 將大檔案、大批次檔案,分散式存放在大量伺服器上,以便於採取分而治之的方式對海量資料進行運算分析。

 

HDFS 的重要特性

 

1. HDFS 中的檔案在物理上是 ** 分塊儲存 **(block) ,塊的大小可以透過配置引數 ( dfs.blocksize) 來規定,預設大小在 hadoop2.x 版本中是 128M ,老版本中是 64M

2. HDFS 檔案系統會給客戶端提供一個 ** 統一的抽象目錄樹 ** ,客戶端透過路徑來訪問檔案

3. ** 目錄結構及檔案分塊資訊 ( 後設資料 )** 的管理由 namenode 節點承擔

4. 檔案的各個 block 的儲存管理由 datanode 節點承擔

5. HDFS 是設計成適應一次寫入,多次讀出的場景,且不支援檔案的修改

 

HDFS 的優點

 

1. 高可靠性

 

   Hadoop 按位儲存和處理資料的能力強

 

2. 高擴充套件性

 

   Hadoop 是在可用的計算機叢集中分配資料完成計算計算任務  

 

3. 高效性

 

   Hadoop 能夠在節點之間動態的移動資料 , 並保證每個節點的動態平衡

 

4. 高容錯性

 

   Hadoop 能夠自動儲存的多個副本 , 並且能夠自動將失敗的任務重新分配

 

   

 

HDFS 的缺點

 

1. 不適合低延遲訪問 , 不能快速訪問

 

   HDFS 是單 Master 的,所有的對檔案的請求都要經過它,當請求多時,肯定會有延時。它適合高吞吐率的場景,就是在某一時間內寫入大量的資料

 

2. 無法高效儲存大量小檔案

 

    儲存大量小檔案的話,它會佔用 NameNode 大量的記憶體來儲存檔案、目錄和塊資訊 ( 後設資料 )

 

3. 不支援多使用者寫入即任意修改檔案

 

    僅支援資料append( 追加 ) ,不支援檔案隨意修改

 

針對HDFS 缺點可能的改進措施

 

1. Master 設計,正在研發中的 GFS II 也要改為分散式多 Master 設計,還支援 Master Failover ,而且 Block 大小改為 1M ,有意要調優處理小檔案。( Alibaba DFS 的設計,也是多 Master 設計,它把 Metadata 的對映儲存和管理分開了,由多個 Metadata 儲存節點和一個查詢 Master 節點組成。)

2.   使用快取或多 master 設計可以降低 client 的資料請求壓力,以減少延時。

3. 橫向擴充套件,一個 Hadoop 叢集能管理的小檔案有限,那就把幾個 Hadoop 叢集拖在一個虛擬伺服器後面,形成一個大的 Hadoop 叢集。 google 也是這麼幹過的。

 

HDFS Shell 命令

 

| **-help** 輸出命令的手冊                                      |

| :----------------------------------------------------------- |

| **-ls** 顯示目錄資訊    `hadoop fs -ls   hdfs://hadoop-server01:9000/`   ps :這些引數中,所有的 hdfs** 路徑都可以簡寫    -->`hadoop fs -ls /`    等同於上一條命令的效果 |

| **-put**   HDSF 上傳檔案 `hdfs dfs -put 本地檔案路徑 HDFS 檔案系統路徑 ` *< 易錯:記 源路徑→目的路徑 >* |

| **-get**   HDFS 檔案系統中的檔案下載回來   `hdfs dfs -get HDFS 檔案系統路徑 本地檔案系統路徑 `      *< 易錯 >*  ps HDFS 有一個和 put get 類似的而方法 copyFromlocal 相當於 put copyTolocal 相當於 get |

| **-cat**   檢視 HDFS 檔案系統中的檔案內容   `hdfs dfs -cat HDFS 檔案系統中檔案的路徑 `  ps: 不要檢視非檔案 |

| **-cp**   HDFS 檔案系統中進行復制操作   `hdfs dfs -cp HDFS 檔案系統中的檔案路徑 目標 HDFS 檔案系統中的路徑 ` |

| **-mv**  HDFS 檔案系統中的檔案進行移動操作   `hdfs dfs -mv HDFS 檔案系統中的檔案路徑 目標 HDFS 檔案系統中的路徑 ` ps : 將原始檔移動目標路徑 , 這個命令可允許有多個源路徑 , 此時目標路徑必須是一個資料夾 ( 目錄 ) 不允許不同的檔案系統互相移動檔案 |

| **-du**    檢視 HDFS 檔案系統中檔案的大小    `hdfs dfs -du HDFS 檔案系統中路徑中的一個檔案 ` |

| **-mkdir**    HDSF 系統中建立資料夾 mkdir 建立資料夾   ps :遞迴建立 +`-p` |

| **-rm**    刪除 HDFS 檔案系統中的目錄或檔案   `hdfs dfs -rm HDFS 檔案系統路徑 `   `hdfs dfs -rm -r HDFS 檔案系統路徑 `  ps : 只能是單個檔案 或 空目錄,若引數資料夾中有多個檔案 加 -r |

| **-chmod**    更改檔案的許可權   `hdfs dfs -chmod -R 許可權值 HDFS 檔案系統路徑下的資料夾 ` ps : 所有每三位可以作為一個八進位制處理 777 是滿許可權 rwx +R 之後, 資料夾下的所有子檔案和資料夾都會被修改 |

| **-appendTofile**   追加一個檔案到已經存在檔案的末尾 `hadoop fs -appendTofile ./hello.txt /hello.txt` |

| **-getmerge**   合併下載多個檔案 `hadoop fs -getmerge /aaa/log.* ./log.sum` |

| **-df**   統計檔案系統的可用空間資訊 `hadoop fs -df -h /`     |

|                                                              |

 

HDFS 的工作機制

 

在瞭解工作機制之前,我們先來看看幾個重要角色:

 

 NameNode

 

1. master ,它是一個管理者 , 維護著整個檔案系統的檔案目錄樹

2. 儲存資料庫( Block )對映資訊,儲存後設資料資訊包括:檔案的所屬權 , 檔案的許可權 , 檔案大小 , 時間 (Block 列表 ,Block 偏移量 ), 位置資訊

3. 主要職責:處理客戶端讀寫請求,收集 DateNode 彙報的 Block 列表資訊 <* 不會儲存到本地系統中 *>

 

**DateNode**

 

1. Slave ,它是一個從節點,簡單理解就是 NameNode 的奴隸

2. 儲存使用者的檔案塊資料

3. 主要職責:定期向 NameNode 彙報自身所持有的 block 資訊(心跳機制),執行資料塊的讀 / 寫操作

 

 Secondary NameNode

 

1. 檢查點節點,表面上看 SecondaryNameNode NameNode 的備份 , 實際上 SecondaryNameNode 的主要作用並不是備份

2. 主要職責:定期合併 fsimage edit log ,並推送給 NameNode

 

問題引入:一個已經 執行十年的叢集,最近的fsimage (映象)是 NameNode 十年前格式化產生,這麼多年的操作日誌被 edit log (日誌)記錄已達幾百 T 。那麼問題來了,如果我要重啟這個叢集,這麼大日誌檔案,必定要重啟很久,我們的時間並不充裕該 如何解決這個問題?

 

*< 問題提取:只要 NameNode 不格式化或重新啟動 ,fsimage 將保持原始狀態 ,edits 會不斷的增加 >*

 

此時我們引入Secondary NameNode , 把 PN 中的 edit log  fsimage SN merge, 此時 PN 還會繼續產生新的日誌 , 記錄合併和合並期間的操作 , 合併之後新 fsimage 會複製回 PN , 迴圈上面的操作 . 以此能保持 edit log 檔案處於比較小的狀態 ,fsimage 的時間點也不會太久遠

 

**fsimage 是如何產生的呢? **

 

HDFS 系統要開始執行的時候需要先對 NameNode 進行一次格式化 , 那麼第一次格式化就會產生一個 fsimage 檔案 , 但是這個檔案是個空檔案 ,NameNode 啟動的時候會載入 fsimage  然後執行 edit log 載入到記憶體中 , 然後立刻向磁碟中寫一個新的 fsimage 檔案 , 這個 fsimage 就是一個最新的儲存資訊

 

** 緊急情況時,可以輔助恢復 NameNode**

 

namenode secondary namenode 的工作目錄儲存結構完全相同,所以,當 namenode 故障退出需要重新恢復時,可以從 secondary namenode 的工作目錄中將 fsimage 複製到 namenode 的工作目錄,以恢復 namenode 的後設資料

 

HDFS 讀寫資料流程

 

HDFS 讀資料流程

 

簡單版本

 

客戶端將要讀取的檔案路徑傳送給namenode namenode 獲取檔案的元資訊(主要是 block 的存放位置資訊)返回給客戶端,客戶端根據返回的資訊找到相應 datanode 逐個獲取檔案的 block 並在客戶端本地進行資料追加合併從而獲得整個檔案


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2654309/,如需轉載,請註明出處,否則將追究法律責任。

相關文章