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...