20200623——hdfs

HDFS是什麼

HDFS是Hadoop distributed file system的的縮寫,是分佈式計算中數據存儲管理的基礎,是基於流數據模式訪問和處理超大文件的需求而開發的分佈式文件系統。

HDFS的優勢

高容錯性與恢復機制

raid1,獨立冗餘磁盤陣列。會有多個副本存儲在hdfs中,提高容錯性。可以通過其他副本進行恢復。

適合大數據處理

能夠存儲百萬規模以上的文件數據。處理數據的大小可以達到PB的級別,甚至更高。

HDFS的劣勢

低延時數據訪問

它做不到毫秒級別的存儲數據。它適合高吞吐率的場景,在某一個時間寫入大量的數據。

小文件存儲

存儲大量小文件,這裏小文件指的是小於hdfs系統的block大小的文件(默認爲64MB,2.7版本升級到了128MB),它會佔用NameNode大量的內存來存儲文件,目錄以及塊信息。

併發寫入,文件隨機修改

一個文件不允許多線程同時寫。
僅支持數據append(追加),不支持文件的隨機修改。

HDFS架構

client

就是客戶端,唯一與正常的客戶端功能不一樣的,就是文件上傳的時候,client將文件切成一個一個的block,然後進行存儲。
提供一些命令來管理hdfs,比如啓動或者關閉hdfs

NameNode

是一個master,相當於一個主管,管理者。
管理HDFS的名稱空間(元數據信息和操作日誌),配置副本策略,處理客戶端讀寫請求。
fsimage相當於HDFS空間的一個快照,保存了所有文件的地址,描述和創建時間等信息。edites文件保存操作日誌,任何對文件系統命名的空間或屬性的修改都會被寫入edites文件並且記錄下來,當edites文件的大小增長達到閾值的時候,會將fsimage文件和edites進行合併。

DataNode

是slave,
存儲實際的數據塊
執行數據塊讀寫的操作
定時向NN發送心跳報告(3秒一次) 保持存活 向NN報告自己持有Block信息 接受NN的命令
如果連續10分鐘NN都沒有收到某個DataNode心跳信息 則NN會認爲DataNode已經失去連接

SecondaryNameNode

並且是NameNode的熱備,當NameNode掛掉之後,它並不能馬上替換NameNode進行服務
輔助NameNode,分擔其工作量。
在緊急情況下,可輔助恢復NameNode。

時間間隔達到:3600秒 距離上次合併的時間間隔
edits文件大小達到:64MB

HDFS的操作

HDFS的寫數據操作

在這裏插入圖片描述

詳細步驟

首先向nn通信,請求上傳文件。nn會檢查文件是否存在,父目錄是否會存在。
nn返回是否可以上傳
client會對文件進行切分,切分成諸多block,內部會用data queue管理,請求nn上傳第一塊
nn返回一個dn的節點列表
client會請求第一臺dn上傳數據,然後請求第二臺,直到通信管道建立完畢,然後逐級應答
client會像第一個dn上傳第一個packets,以流的形式,先從數據讀取放到一個磁盤的緩存packet(64kb)。然後第一個收到一個packet就會發送到第二個,第二個調用第三個,每傳入一個就會放入一個應答隊列等待應答。
當第一個block傳輸完成之後,繼續第二個block的上穿。

HDFS的讀數據操作

在這裏插入圖片描述

詳細步驟

client與nn通信,查詢元數據
nn判斷讀取的文件是否存在,存在,則響應client文件保存在dn節點上
client與每個dn節點建立網絡鏈接,然後讀取每個datanode節點上面的block數據塊

HDFS其他的知識點

副本存放策略(機架感知策略)

默認的是有三個副本
client將第一個副本寫入離自己最近的節點 如果客戶端所在的節點就是個datanode節點,則直接上傳本地,如果不是,則找到最近的datanode進行上傳
第二個副本,選擇和第一個副本不懂機架的節點
第三個副本,選擇和第二個副本相同機架的節點。

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