友快網

導航選單

基於儲存和分散式的儲存檔案管理系統的實現和實現--hdfs教程詳解

一、HDFS概述

1。1 HDFS 產出背景及定義

1)HDFS 產生背景

隨著資料量越來越大,在一個作業系統存不下所有的資料,那麼就分配到更多的操作系 統管理的磁碟中,但是不方便管理和維護,迫切需要一種系統來管理多臺機器上的檔案,這 就是分散式檔案管理系統。HDFS 只是分散式檔案管理系統中的一種。

2)HDFS 定義

HDFS(Hadoop Distributed File System),它是一個檔案系統,用於儲存檔案,透過目 錄樹來定位檔案;其次,它是分散式的,由很多伺服器聯合起來實現其功能,叢集中的服務 器有各自的角色。 HDFS 的使用場景:適合一次寫入,多次讀出的場景。一個檔案經過建立、寫入和關閉 之後就不需要改變。

1。2 HDFS 優缺點

HDFS優點

高容錯性 資料自動儲存多個副本。它透過增加副本的形式,提高容錯性, 某一個副本丟失以後,它可以自動恢復。

適合處理大資料 資料規模:能夠處理資料規模達到GB、TB、甚至PB級別的資料; 某一個副本丟失以後,它可以自動恢復。檔案規模:能夠處理百萬規模以上的檔案數量,數量相當之大。

可構建在廉價機器上,透過多副本機制,提高可靠性。

HDFS缺點

不適合低延時資料訪問,比如毫秒級的儲存資料,是做不到的。

無法高效

對大量小檔案進行儲存。儲存大量小檔案的話,它會佔用NameNode大量的記憶體來儲存檔案目錄和塊資訊。這樣是不可取的,因為NameNode的記憶體總是有限的;小檔案儲存的定址時間會超過讀取時間,它違反了HDFS的設計目標。

不支援併發寫入、檔案隨機修改。 一個檔案只能有一個寫,不允許多個執行緒同時寫;僅支援資料append(追加),不支援檔案的隨機修改。

1。3 HDFS 組成架構

NameNode(nn)

:就是Master,它 是一個主管、管理者。 (1)管理HDFS的名稱空間; (2)配置副本策略; (3)管理資料塊(Block)對映資訊; (4)處理客戶端讀寫請求。

DataNode:

就是Slave。NameNode 下達命令,DataNode執行實際的操作。 (1)儲存實際的資料塊; (2)執行資料塊的讀/寫操作。

Client:就是客戶端。 (1)檔案切分。檔案上傳HDFS的時候,Client將檔案切分成一個一個的Block,然後進行上傳; (2)與NameNode互動,獲取檔案的位置資訊; (3)與DataNode互動,讀取或者寫入資料; (4)Client提供一些命令來管理HDFS,比如NameNode格式化; (5)Client可以透過一些命令來訪問HDFS,比如對HDFS增刪查改操作;

Secondary NameNode:

並非NameNode的熱備。當NameNode掛掉的時候,它並不 能馬上替換NameNode並提供服務。 (1)輔助NameNode,分擔其工作量,比如定期合併Fsimage和Edits,並推送給NameNode ; (2)在緊急情況下,可輔助恢復NameNode。

1。4 HDFS 檔案塊大小(面試重點)

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

HDFS

的塊

設定太小,會增加定址時間,程式一直在找塊的開始位置;

如果塊設定的太大,從磁碟傳輸資料的時間會明顯大於定位這個塊開 始位置所需的時間。導致程式在處理這塊資料時,會非常慢。

總結:HDFS塊的大小設定主要取決於磁碟傳輸速率。

二、HDFS常見shell操作

2。1 基本語法

hadoop fs 具體命令 OR hdfs dfs 具體命令,兩個是完全相同的

2。2 命令大全

https://blog。csdn。net/qq_44779847/article/details/116501229

注意:設定的副本數只是記錄在 NameNode 的元資料中,是否真的會有這麼多副本,還得 看 DataNode 的數量。因為目前只有 3 臺裝置,最多也就 3 個副本,只有節點數

增加到 10 臺時,副本數才能達到 10。

三、HDFS 的 API 操作

https://blog。csdn。net/qq_44779847/article/details/116606371

四、HDFS 的讀寫流程(面試重點)

4。1 HDFS 寫資料流程

客戶端透過 Distributed FileSystem 模組向 NameNode 請求上傳檔案,NameNode 檢 查目標檔案是否已存在,父目錄是否存在。

NameNode 返回是否可以上傳。

客戶端請求第一個 Block 上傳到哪幾個 DataNode 伺服器上。

NameNode 返回 3 個 DataNode 節點,分別為 dn1、dn2、dn3。

客戶端透過 FSDataOutputStream 模組請求 dn1 上傳資料,dn1 收到請求會繼續呼叫 dn2,然後 dn2 呼叫 dn3,將這個通訊管道建立完成。

dn1、dn2、dn3 逐級應答客戶端。

客戶端開始往 dn1 上傳第一個 Block(先從磁碟讀取資料放到一個本地記憶體快取), 以 Packet 為單位,dn1 收到一個 Packet 就會傳給 dn2,dn2 傳給 dn3;dn1 每傳一個 packet 會放入一個應答佇列等待應答。

當一個 Block 傳輸完成之後,客戶端再次請求 NameNode 上傳第二個 Block 的服務 器。(重複執行 3-7 步)。

4。2 HDFS 讀資料流程

客戶端透過 DistributedFileSystem 向 NameNode 請求下載檔案,NameNode 透過查 詢元資料,找到檔案塊所在的 DataNode 地址。

挑選一臺 DataNode(就近原則,然後隨機)伺服器,請求讀取資料。

DataNode 開始傳輸資料給客戶端(從磁盤裡面讀取資料輸入流,以 Packet 為單位 來做校驗)。

客戶端以 Packet 為單位接收,先在本地快取,然後寫入目標檔案。

五、 NameNode 和 SecondaryNameNode

1)第一階段:NameNode 啟動

第一次啟動 NameNode 格式化後,建立 Fsimage 和 Edits 檔案。如果不是第一次啟動,直接載入編輯日誌和映象檔案到記憶體。

客戶端對元資料進行增刪改的請求。

NameNode 記錄操作日誌,更新滾動日誌。

NameNode 在記憶體中對元資料進行增刪改。

2)第二階段:Secondary NameNode 工作

Secondary NameNode 詢問 NameNode 是否需要 CheckPoint。直接帶回 NameNode 是否檢查結果。

Secondary NameNode 請求執行 CheckPoint。

NameNode 滾動正在寫的 Edits 日誌。

將滾動前的編輯日誌和映象檔案複製到 Secondary NameNode。

Secondary NameNode 載入編輯日誌和映象檔案到記憶體,併合並。

生成新的映象檔案 fsimage。chkpoint。

複製 fsimage。chkpoint 到 NameNode。

NameNode 將 fsimage。chkpoint 重新命名成 fsimage。

Fsimage 和 Edits 解析

NameNode被格式化之後,將在/opt/module/hadoop-3。1。3/data/tmp/dfs/name/current目錄中產生如下檔案

fsimage_0000000000000000000 fsimage_0000000000000000000。md5 seen_txid VERSION

Fsimage檔案:HDFS檔案系統元資料的一個永久性的檢查點,其中包含HDFS檔案系統的所有目 錄和檔案inode的序列化資訊。

Edits檔案:存放HDFS檔案系統的所有更新操作的路徑,檔案系統客戶端執行的所有寫操作首先 會被記錄到Edits檔案中。

seen_txid檔案儲存的是一個數字,就是最後一個edits_的數字

每次NameNode啟動的時候都會將Fsimage檔案讀入記憶體,加

Edits裡面的更新操作,保證記憶體 中的元資料資訊是最新的、同步的,可以看成NameNode啟動的時候就將Fsimage和Edits檔案進行了合併。

oiv 檢視 Fsimage 檔案

:hdfs oiv -p 檔案型別 -i 映象檔案 -o 轉換後文件輸出路徑 案例:hdfs oiv -p XML -i fsimage_0000000000000000025 -o /opt/module/hadoop-3。1。3/fsimage。xml

oev 檢視 Edits 檔案

:hdfs oev -p 檔案型別 -i 編輯日誌 -o 轉換後文件輸出路徑 案例: hdfs oev -p XML -i edits_0000000000000000012-0000000000000000013 -o /opt/module/hadoop- 3。1。3/edits。xml

六、DataNode

6。1 DataNode的工作機制

一個數據塊在 DataNode 上以檔案形式儲存在磁碟上,包括兩個檔案,一個是資料本 身,一個是元資料包括資料塊的長度,塊資料的校驗和,以及時間戳。

DataNode 啟動後向 NameNode 註冊,通過後,週期性(1 小時)的向 NameNode 上報所有的塊資訊。

心跳是每 3 秒一次,心跳返回結果帶有 NameNode 給該 DataNode 的命令如複製塊數 據到另一臺機器,或刪除某個資料塊。如果超過 10 分鐘沒有收到某個 DataNode 的心跳,則 認為該節點不可用。

叢集執行中可以安全加入和退出一些機器。

6。2 資料完整性

當 DataNode 讀取 Block 的時候,它會計算 CheckSum。

如果計算後的 CheckSum,與 Block 建立時值不一樣,說明 Block 已經損壞。

Client 讀取其他 DataNode 上的 Block。

DataNode 在其檔案建立後周期驗證 CheckSum

6。3 掉線時限引數設定

hdfs-site。xml 配置, heartbeat。recheck。interval 的單位為毫秒, dfs。heartbeat。interval 的單位為秒。 dfs。namenode。heartbeat。recheck-interval 300000 dfs。heartbeat。interval 3

6。4 服役新資料節點

在 hadoop104 主機上再克隆一臺 hadoop105 主機

修改 IP 地址和主機名稱

刪除原來 HDFS檔案系統留存的檔案(data 和 log)

source

一下

配置檔案

然後直接啟動即可,如果遇到資料不均衡,執行命令(對應自己的目錄): 。/start-balancer。sh starting balancer, logging to /opt/module/hadoop- 3。1。3/logs/hadoop-watson-balancer-hadoop102。out

6。5 退役舊資料節點

新增白名單

在 NameNode 的 hdfs-site。xml 配置檔案中增加 dfs。hosts 屬性 dfs。hosts /opt/module/hadoop-3。1。3/etc/hadoop/dfs。hosts

新增黑名單

在 NameNode 的 hdfs-site。xml 配置檔案中增加 dfs。hosts。exclude 屬性 dfs。hosts。exclude /opt/module/hadoop-3。1。3/etc/hadoop/dfs。hosts。exclude

DataNode多目錄

DataNode 也可以配置成多個目錄,每個目錄儲存的資料不一樣。即:資料不是副本,在hdfs-site。xml配置 dfs。datanode。data。dir file:///${hadoop。tmp。dir}/dfs/data1,file:///${hadoop。tmp。dir}/dfs/data2

上一篇:《航海日記》中的巨型章魚,是否真的是毀天滅地的存在?| 藝術捕夢
下一篇:人生天地之間,若白駒過隙,忽然而已人生天地之間,若白駒過隙