HDFS結構介紹

2021-08-10 10:37:29 字數 3941 閱讀 6870

hdfs(hadoop distributed file system)

** block:(見圖)

** hdfs把檔案劃分成block儲存在不同節點上

--預設128m(以前是64m,今後可能會變為256m)

--dfs.blocksize屬性(hdfs-site.xml)

--該屬性應該由檔案大小的數值分布來決定,比如80%的檔案大小為200m左右,那麼該值設定為256m或者128就比較合適

另如,大都是g級單位大小的檔案,該值就應該盡量設定的大些

** 如果乙個檔案大小只有1m,它實際占用的空間也是1m,並非128m,並不會浪費空間

client(1m) --> namenode(128m邏輯空間) --> datanode(1m實際占用空間)

** 遵循:一次寫入多次讀取

** namenode(一台)

--儲存和管理整個檔案系統的元資料,目錄和檔案的元資料會被持久化儲存

--管理檔案塊和datanode節點的對應關係,該資料儲存在記憶體中,

記錄乙個block的資訊大約需要0.15k,因此記憶體的大小,會限制能夠儲存的檔案的總數

--整個檔案系統集群的訪問入口,無論讀寫資料,都要首先訪問namenode

在namenode上找到了對應的datanode,資料讀寫就不再需要經過namenode

--監聽datanode節點的存活狀態

** datanode(多台)

--以塊(block)的形式儲存資料

--預設每個塊有三個副本(包括自身),都是儲存在不同的節點

--向namenode傳送心跳資訊(預設3s),超時則認為該節點不可用(預設超過10m)

一旦發生,namenode會複製該節點上的所有block到其他節點

--向namenode傳送儲存的所有塊的資訊

--真正響應客戶端資料讀寫請求

hadoop預設block副本存放策略(分布式系統預設為3,偽分布式只能是1)

官方說法:

** 第乙個副本放在本機架某乙個datanode節點

** 第二個副本放在同一機架另外乙個datanode節點

** 第三個副本放在另外乙個機架的節點(離架)

參見:(for the common case, when the replication factor is three, hdfs』s placement policy is to put

one replica on one node in the local rack/機架, another on a different node in the local rack, and

the last on a different node in a different rack. )

另外一種說法(hadoop權威指南):

** 第乙個副本放在執行客戶端程式的節點,如果該節點位於集群外,就隨機選擇乙個節點

** 第二個副本放在和第乙個副本不同機架的隨機節點(離架)

** 第三個副本放在與第二副本同一機架的隨機節點

** 如果需要存放其他副本,則在集群中隨機選擇其他節點,系統會盡量避免過多副本集中在同乙個機架的現象

-- 其實這兩種說法類似,都是乙個機架放乙個,另外乙個機架放兩個,其他隨機存放

-- 客戶端讀取副本: 就近原則

----------------------------------------

namenode元資料(見圖)

** fsimage 檔案系統映象

** edits 編輯日誌

client操作行為: put、rm... ==> 記錄到edits檔案(變化的元資料)

-- 存放位置由dfs.namenode.name.dir屬性(hdfs-site.xml)決定,

預設為/opt/modules/hadoop-2.5.0/data(即$)/dfs/name,可以檢視

-- 類似的,資料存放位置由dfs.datanode.data.dir屬性決定,預設為file://$/dfs/data

-- 回顧:hadoop.tmp.dir在core-site.xml(見上一章)

namenode啟動過程

** 載入fsimage,並重新執行edits檔案,然後載入到記憶體

** 如果edits檔案比較大,合併會非常消耗時間

** 解決方法:通過secondarynamenode合併

** 等待datanode傳送block report(塊報告)到namenode

** 等待過程中,整個hdfs進入安全模式(safemode)

secondarynamenode

** 輔助namenode,進行fsiamge和edits檔案合併

** 避免namenode下一次重啟fsiamge和edits合併時間過長問題

** secondarynamenode不是namnode的熱備

安全模式safemode

** 整個檔案系統只能讀,不能寫

** 為什麼要設計乙個安全模式? 保證資料的完整和安全性

** 什麼條件下我們會進入安全模式

** namenode啟動過程中

** 使用命令手動進入(如:維護階段)

** namenode重啟時,進入安全模式,datanode需要向namenode傳送塊的資訊,namenode只有當整個檔案系統中99.9%

(可以通過dfs.namenode.safemode.threshold-pct屬性配置)的塊滿足最小副本要求,才會自動退出安全模式。

** 假設我們設定的副本數(dfs.replication屬性)是5,那麼在datanode上,每個塊就應該有5個副本存在,假設現在

只存在3個副本,那麼比率就是3/5=0.6,明顯小於0.999,因此系統會自動的複製副本到其他datanode,直到至少

99.9%的塊都有5個副本,才會自動退出安全模式。

** 同樣,如果系統中有8個副本,超過我們設定的5個副本,那麼系統也會刪除多餘的3個副本。

----日誌-------------------------------------

日誌檔案格式 (.log和.out),位於$hadoop_home/logs

***幫助我們排錯

.log:通過log4j記錄的,記錄大部分應用程式的日誌資訊,主要

.out:記錄標準輸出和標準錯誤日誌,少量記錄,次要

常見命名規則:框架名-使用者名稱-程序名-主機名.字尾

例如:hadoop-tom-namenode-blue01.mydomain.log

----配置檔案----------------------------------

預設配置檔案:

core-default.xml

#core-default.xml位於$/share/hadoop/common/hadoop-common-2.5.0.jar壓縮包裡

#檢視壓縮包裡檔案:jar -tvf hadoop-common-2.5.0.jar | grep -i default.xml

#解壓後可以檢視檔案內容

#$ mkdir aaa

#$ unzip hadoop-common-2.5.0.jar -d aaa

#其他3個類似,有興趣可以自己去找

hdfs-default.xml

yarn-default.xml

mapred-default.xml

自定義配置檔案:$/etc/hadoop

core-site.xml、hdfs-site.xml、

mapred-site.xml、yarn-site.xml

** 當對應的程序啟動時,會先載入預設配置檔案,再載入自定義配置檔案,屬性重複時,後者覆蓋前者

HDFS詳細介紹

hdfs hadoop distributed file system 分布式檔案系統,提供高吞吐量的應用程式資料訪問,對外部客戶機而言,hdfs 就像乙個傳統的分級檔案系統。可以建立 刪除 移動或重新命名檔案,等等。但是 hdfs 的架構是基於一組特定的節點構建的,這是由它自身的特點決定的。這些節...

hdfs簡單介紹

1.hdfs前言 設計思想 分而治之 將大檔案 大批量檔案,分布式存放在大量伺服器上,以便於採取分而治之的方式對海量資料進行運算分析 在大資料系統中作用 為各類分布式運算框架 如 mapreduce,spark,tez,提供資料儲存服務 重點概念 檔案切塊,副本存放,元資料 2.hdfs的概念和特性...

hdfs 中 Shell 類介紹

shell 類功能 是乙個提供執行作業系統命令的類,主要有兩個抽象方法給基類去繼承,1.abstract string getexecstring 繼承類實現該方法,提供乙個要給shell在執行的命令 2.abstract void parseexecresult bufferedreader li...