hdfs基本概念(設計思想 特性 工作機制 上傳下載 namenode存儲元數據機制)

2019/2/16 星期六

hdfs基本概念(設計思想 特性 工作機制 上傳下載 namenode存儲元數據機制)
1、hdfs總的設計思想:
設計目標:提高分佈式併發處理數據的效率(提高併發度和移動運算到數據)
分而治之:將大文件、大批量文件,分佈式存放在大量獨立的服務器上,以便於採取分而治之的方式對海量數據進行運算分析;
重點概念:文件切塊,副本存放,元數據,位置查詢,數據讀寫流

2、hdfs的shell操作 //見響應的單獨文檔

3、hdfs的一些概念
Hdfs分佈式文件系統的基本工作機制及相關概念解析 //見畫圖
首先,它是一個文件系統,有一個統一的命名空間——目錄樹, 客戶端訪問hdfs 文件時就是
通過指定這個目錄樹中的路徑來進行
其次,它是分佈式的,由很多服務器聯合起來實現功能;
 hdfs 文件系統會給客戶端提供一個統一的抽象目錄樹,Hdfs 中的文件都是分塊(block)
存儲的,塊的大小可以通過配置參數( dfs.blocksize)來規定,默認大小在hadoop2.x 版本
中是128M,老版本中是64M
 文件的各個block 由誰來進行真實的存儲呢?----分佈在各個datanode 服務節點上,而
且每一個block 都可以存儲多個副本(副本數量也可以通過參數設置dfs.replication,默
認值是3)
 Hdfs 中有一個重要的角色:namenode,負責維護整個hdfs 文件系統的目錄樹,以及每
一個路徑(文件)所對應的block 塊信息(block 的id,及所在的datanode 服務器)
 hdfs 是設計成適應一次寫入,多次讀出的場景,並不支持文件的修改
(hdfs 並不適合用來做網盤應用,因爲,不便修改,延遲大,網絡開銷大,成本太高)

4、特性:
容量可以線性擴展
數據存儲高可靠
分佈式運算處理很方便
數據訪問延遲較大,不支持數據的修改操作
適合一次寫入多次讀取的應用場景

5、hdfs 的工作機制
HDFS 集羣分爲兩大角色:NameNode、DataNode
NameNode 負責管理整個文件系統的元數據
DataNode 負責管理用戶的文件數據塊

6、namenode 工作機制
namenode 職責:
1、響應客戶端請求 //客戶端去請求hdfs的時候都會先去找namenode
2、維護目錄樹 //客戶端去讀或者寫文件的時候都會去指定一個目錄,這個目錄是hdfs的目錄,這個目錄有namenode管理
3、管理元數據(查詢,修改) *****
//什麼是原數據
文件的描述信息:某一個路徑的文件有幾個block,每一個block在那些datanode上面有存儲,一個文件的副本數量是幾?這些信息就是元數據,元數據很重要,不能發生丟失或者錯誤,那麼在客戶端請求的時候,就有可能請求不到。

7、datanode 的工作機制
1、Datanode 工作職責:
2、存儲管理用戶的文件塊數據
3、定期向namenode 彙報自身所持有的block 信息(通過心跳信息上報)
4、上傳一個文件,觀察文件的block 具體的物理存放情況
在每一臺datanode 機器上的這個目錄:
/home/hadoop/app/hadoop-2.4.1/tmp/dfs/data/current/BP-193442119-192.168.2.120-1432457733
977/current/finalized

—————————————————————————————————————————————————
2019/2/18 星期一

hdfs 寫數據流程(put)
1、根namenode 通信請求上傳文件,namenode 檢查目標文件是否已存在,父目錄是否存在
2、namenode 返回是否可以上傳
3、client 請求第一個block 該傳輸到哪些datanode 服務器上
4、namenode 返回3 個datanode 服務器ABC
5、client 請求3 臺dn 中的一臺A 上傳數據(本質上是一個RPC 調用,建立pipeline),A收到請求會繼續調用B,然後B 調用C,將真個pipeline 建立完成,逐級返回客戶端
6、client 開始往A 上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存),以packet爲單位,A 收到一個packet 就會傳給B,B 傳給C;A 每傳一個packet 會放入一個應答隊列等待應答
7、當一個block 傳輸完成之後,client 再次請求namenode 上傳第二個block 的服務器。

hdfs 讀數據流程(get)
1、跟namenode 通信查詢元數據,找到文件塊所在的datanode 服務器
2、挑選一臺datanode(就近原則,然後隨機)服務器,請求建立socket 流
3、datanode 開始發送數據(從磁盤裏面讀取數據放入流,以packet 爲單位來做校驗)
4、客戶端以packet 爲單位接收,現在本地緩存,然後寫入目標文件

小結:
在這裏我們描述的是hdfs的讀寫數據的流程是比較順利的一種情況,這上面的每一個階段都有可能出現異常,那hdfs對於每個異常也是很完善的,容錯性非常的高,這些異常處理的邏輯比較複雜,我們暫時不做深入的描述,搞懂正常的讀寫流程就ok了。
—————————————————————————————————————————————————
Hdfs中namenode管理元數據的機制
hdfs 元數據是怎麼存儲的?
A、內存中有一份完整的元數據(特定數據結構)
B、磁盤有一個“準完整”的元數據的鏡像文件
C、當客戶端對hdfs 中的文件進行新增或者修改操作,首先會在edits 文件中記錄操作日誌,當客戶端操作成功後,相應的元數據會更新到內存中;每隔一段時間,會由secondary namenode 將namenode 上積累的所有edits 和一個最新的fsimage 下載到本地,並加載到內存進行merge(這個過程稱爲checkpoint)
D、checkpoint 操作的觸發條件配置參數:
dfs.namenode.checkpoint.check.period=60 #檢查觸發條件是否滿足的頻率,60 秒
dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
#以上兩個參數做checkpoint 操作時,secondary namenode 的本地工作目錄
dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir}
dfs.namenode.checkpoint.max-retries=3 #最大重試次數
dfs.namenode.checkpoint.period=3600 #兩次checkpoint 之間的時間間隔3600 秒
dfs.namenode.checkpoint.txns=1000000 #兩次checkpoint 之間最大的操作記錄
E、namenode 和secondary namenode 的工作目錄存儲結構完全相同,所以,當namenode故障退出需要重新恢復時,可以從secondary namenode 的工作目錄中將fsimage 拷貝到namenode 的工作目錄,以恢復namenode 的元數據
F、可以通過hdfs 的一個工具來查看edits 中的信息
bin/hdfs oev -i edits -o edits.xml

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章