大數據(二) - HDFS
HDFS優點
高容錯性
數據自動保存多個副本
副本丟失后,自動恢復
適合批處理
移動計算而非數據
數據位置暴露給計算框架
適合大數據處理
GB、TB、甚至PB級數據
百萬規模以上的文件數量
10K+節點規模
流式文件訪問
一次性寫入,多次讀取
保證數據一致性
可構建在廉價機器上
通過多副本提高可靠性
提供了容錯和恢復機制
HDFS缺點,不適合以下操作方式:
低延遲數據訪問
比如毫秒級
低延遲與高吞吐率
小文件存取
占用NameNode大量內存
尋道時間超過讀取時間
并發寫入、文件隨機修改
一個文件只能有一個寫者
僅支持append
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典型的物理拓撲結構

HDFS Block副本放置策略
副本1: 同Client的節點上
副本2: 不同機架中的節點上
副本3: 與第二個副本同一機架的另一個節點上
其他副本:隨機挑選


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)
來自: http://blog.csdn.net//matthewei6/article/details/50507023
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!