IT十年-大資料系列講解之HDFS(二)

程式設計師OfHome發表於2018-04-09

HDFS優點

高容錯性

資料自動儲存多個副本

副本丟失後,自動恢復

適合批處理

移動計算而非資料

資料位置暴露給計算框架

適合大資料處理

GB、TB、甚至PB級資料

百萬規模以上的檔案數量

10K+節點規模

流式檔案訪問

一次性寫入,多次讀取

保證資料一致性

可構建在廉價機器上

通過多副本提高可靠性

提供了容錯和恢復機制

HDFS缺點,不適合以下操作方式:

低延遲資料訪問

比如毫秒級

低延遲與高吞吐率

小檔案存取

佔用NameNode大量記憶體

尋道時間超過讀取時間

併發寫入、檔案隨機修改

一個檔案只能有一個寫者

僅支援append

感謝你的觀看,如果感覺寫的不錯,你可以關注一下我的微信公眾號,也可以加入我們的大數家庭群。

微信公眾號:程式設計師OfHome

程式設計師OfHomeQQ群:610535338

HDFS不適合儲存小檔案

元資訊儲存在NameNode記憶體中

一個節點的記憶體是有限的

存取大量小檔案消耗大量的尋道時間

類比拷貝大量小檔案與拷貝同等大小的一個大檔案

NameNode儲存block數目是有限的

一個block元資訊消耗大約150 byte記憶體

儲存1億個block,大約需要20GB記憶體

如果一個檔案大小為10K,則1億個檔案大小僅為1TB(但要消耗掉NameNode 20GB記憶體)

HDFS架構

HDFS使用典型的master-slave結構

HDFS設計思想

hdfs架構

Active Namenode:主Master(只有一個)

管理HDFS的名稱空間

管理資料塊對映資訊

配置副本策略

處理客戶端讀寫請求

Standby Namenode:NameNode的熱備;

定期合併fsimage和fsedits,推送給NameNode;

當Active NameNode出現故障時,快速切換為新的 Active NameNode。

Datanode:Slave(有多個)

儲存實際的資料塊

執行資料塊讀/寫

Client:檔案切分

與NameNode互動,獲取檔案位置資訊;

與DataNode互動,讀取或者寫入資料;

管理HDFS;

訪問HDFS。

HDFS資料塊(block)

檔案被切分成固定大小的資料塊

預設資料塊大小為64MB,可配置

若檔案大小不到64MB,則單獨存成一個block

為何資料塊如此之大

資料傳輸時間超過尋道時間(高吞吐率)

一個檔案儲存方式

按大小被切分成若干個block,儲存到不同節點上

預設情況下每個block有三個副本

HDFS寫流程

HDFS讀流程

HDFS典型的物理拓撲結構

HDFSBlock副本放置策略

副本1: 同Client的節點上

副本2: 不同機架中的節點上

副本3: 與第二個副本同一機架的另一個節點上

其他副本:隨機挑選

HDFS可靠性策略

HDFS訪問方式

HDFS Shell命令 :和linux命令很像

HDFS Java API :org.apache.hadoop.fs,很簡單

HDFS REST API

HDFS Fuse:實現了fuse協議

HDFS lib hdfs:C/C++訪問介面

HDFS 其他語言程式設計API

使用thrift實現

支援C++、Python、php、C#等語言

HDFS2.0新特性(還沒有完全實現,謹慎使用):

NameNode HA

NameNode Federation

HDFS 快照(snapshot)

HDFS 快取(in-memory cache)

HDFS ACL

異構層級儲存結構(Heterogeneous Storage hierarchy)

PS:

關注微信公眾號“程式設計師OfHome”,傳送“領取資料”可以免費領取視訊資料。

對大資料感興趣的朋友可以加入到我們的程式設計師OfHomeQQ群:610535338 群裡有都是從事或者在學習大資料的朋友,在此我也邀請你進群一起學習,群內沒有廣告,也是禁止打廣告的,大家也可以關注一下我的微信公共號“程式設計師OfHome”下方掃掃可關注。


相關文章