hdfs學習筆記
hdfs,是hadoop distributed file system的簡稱,是hadoop抽象檔案系統的一種實現。hdfs的檔案分布在集群機器上,同時提供副本進行容錯及可靠性保證。例如客戶端寫入讀取檔案的直接操作都是分布在集群各個機器上的,沒有單點效能壓力。
什麼是hdfs
1.hdfs中的檔案在物理上是
分塊儲存(block)
,塊的大小可以通過配置引數( dfs.blocksize)來規定,預設大小在hadoop2.x版本中是128m,之前的版本中是64m。
2.hdfs檔案系統會給客戶端提供乙個
統一的抽象目錄樹
,客戶端通過路徑來訪問檔案,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data
3.目錄結構及檔案分塊位置資訊(元資料)
的管理由namenode節點承擔,namenode是hdfs集群主節點,負責維護整個hdfs檔案系統的目錄樹,以及每乙個路徑(檔案)所對應的資料塊資訊(blockid及所在的datanode伺服器)
4.檔案的各個block的儲存管理由datanode節點承擔,datanode是hdfs集群從節點,每乙個block都可以在多個datanode上儲存多個副本(副本數量也可以通過引數設定dfs.replication,預設是3)
5.datanode會定期向namenode匯報自身所儲存的檔案block資訊,而namenode則會負責保持檔案的副本數量,hdfs的內部工作機制對客戶端保持透明,客戶端請求訪問hdfs都是通過向namenode申請來進行。
6.hdfs是設計成適應一次寫入,多次讀出的場景,且不支援檔案的修改。需要頻繁的rpc互動,寫入效能不好。
namenode和datanode的理解
namenode是中心伺服器,單一節點(簡化系統的設計和實現),負責管理檔案系統的命名空間(namespace)以及客戶端對檔案的訪問。
副本存放在哪些datanode上由namenode來控制,根據全域性情況作出塊放置決定,讀取檔案時namenode盡量讓使用者先讀取最近的副本,降低帶塊消耗和讀取延時。
namenode全權管理資料塊的複製,它周期性地從集群中的每個datanode接收心跳訊號和塊狀態報告。接收到心跳訊號意味著該datanode節點工作正常。塊狀態報告包含了乙個該datanode上所有資料塊的列表。
namenode是主節點,儲存檔案的元資料如檔名,檔案目錄結構,檔案屬性(生成時間,副本數,檔案許可權)以及每個檔案的塊列表,以及塊所在的datanode等等。
namenode儲存結構:
namespaceid:代表的是檔案系統唯一標識,檔案系統首次格式化時產生。沒有註冊到namenode之前的datanode都不知道namespaceid,所以可以通過這個來檢查新建的datanode
clusterid:集群id
ctime:namenode儲存系統建立時間,首次格式化檔案系統這個屬性是0,當檔案系統公升級之後,該值會更新到公升級之後的時間戳
storagetype:說明該儲存目錄是namenode的資料結構
layoutversion:是乙個負整數,用來描述hdfs持久化資料結構的版本的。這個版本與haoop版本號無關,當檔案系統布局發生改變他就回減一,但是此時hdfs也需要公升級,否則新的namenode無法使用。
blockpoolid:塊池id。
乙個資料塊在
datanode以檔案儲存在磁碟上,包括兩個檔案,乙個是資料本身,乙個是元資料報括資料塊的長度,塊資料的校驗和,以及時間戳。
datanode啟動後想namenode註冊,通過後,週期性(1小時)的向namenode上報所有的塊資訊。
心跳是每3秒一次,心跳返回結果帶有namenode給該datanode的命令如複製塊資料到另一台機器,或刪除某個資料塊。如果超過10分鐘沒有收到某個datanode的心跳,則認為該節點不可用。
集群執行中可用安全加入和退出一些機器。
檔案切分成塊,(預設大小128m),以塊為單位,每個塊有多個副本儲存在不同的機器上,副本數可在檔案生成時指定(預設3)
datanode再本地檔案系統儲存檔案塊資料,以及塊資料的校驗和。
可以建立,刪除,移動和重新命名檔案,當檔案建立,寫入和關閉之後不能修改檔案的內容。
當datanode讀取block的時候,它會計算checksum,如果計算後的checksum,與block建立時值不一樣,說明該block已經損壞。
如果塊已損壞,client會讀取其它datanode上的block.
namenode標記該塊已經損壞,然後複製block達到預期設定的檔案備份數。
datanode在其檔案建立後三周驗證其checksum.
資料寫入過程
設計目標
分析工作經常讀取其中的大部分資料,即使不是全部。 因此讀取整個資料集所需時間比讀取第一條記錄的延時更重要。
hdfs不適合的應用型別
1) 低延時的資料訪問
對延時要求在毫秒級別的應用,不適合採用hdfs。hdfs是為高吞吐資料傳輸設計的,因此可能犧牲延時hbase更適合低延時的資料訪問。
2)大量小檔案
經驗而言,乙個檔案/目錄/檔案塊一般占有150位元組的元資料記憶體空間。如果有100萬個檔案,每個檔案占用1個檔案塊,則需要大約300m的記憶體。因此十億級別的檔案數量在現有商用機器上難以支援。
3)多方讀寫,需要任意的檔案修改
HDFS學習筆記
3 hdfs儲存原理 主節點 資料目錄 元資料 服務 從節點 具體完成資料的儲存任務 hdfs 相容廉價的硬體裝置,實現流資料讀寫,支援大資料集,支援簡單的檔案模型,強大的跨平台相容性 hdfs侷限性 不適合低延遲資料訪問,無法高效儲存大量小檔案,不支援多使用者寫入以及任意修改檔案。1 為了分攤磁碟...
HDFS學習筆記
1 流式資料訪問 一次寫入,多次讀取是最高效的訪問模式。資料集通常由資料來源生成或從資料來源複製而來,每次分析都在該資料集上進行 2 資料塊 檔案的獨立儲存單元,預設64mb 目的是為了最小化定址開銷 塊的元資料存在namenode的記憶體中 hdfs中乙個小於塊大小的檔案不會佔據整個塊的空間 3 ...
hadoop學習筆記(HDFS)
hdfs的設計基礎與目標 1 硬體錯誤是常態,因此需要冗餘。2 為大資料而生,流式讀寫,批量讀取而非隨機讀寫。擅長資料分析而不是事務處理。3 大規模資料集。4 一次寫多次讀邏輯設計,即一旦寫入,只能讀,不能修改。5 程式才用 資料就近 原則分配節點執行。hdfs的可靠性 冗餘副本策略 機架策略 心跳...