Hadoop 的核心(1)—— HDFS
首先來看看Hadoop 是什麼?
- Hadoop 是一個開源的大數據框架
- Hadoop是一個分散式計算的解決方案
- Hadoop = HDFS(分散式文件系統)+ MapReduce(分散式計算)
Hadoop 的兩個核心:
- HDFS 分散式文件系統:存儲是大數據技術的基礎
- MapReduce 編程模型:分散式計算是大數據應用的解決方案
先來介紹第一個核心 —— HDFS,它有三個特點:
- 普通的成百上千的機器構成
- 按TB甚至PB為單位的大量的數據
- 簡單便捷的文件獲取
HDFS 的基本概念:
數據塊-數據塊是抽象塊而非整個文件作為存儲單元,在 Hadoop1.x 中默認大小是64M,Hadoop2.x 中默認大小是128M,默認每個塊備份3份。
由於HDFS是分散式的,也就是主從模式,NameNode 就是主,DataNode 就是從。所以 HDFS 是由一個 NameNode 和多個 DataNode 組成的。
NameNode:
- 管理文件系統的命名空間,存放文件元數據
- 維護著文件系統的所有文件和目錄,文件與數據塊的映射
- 記錄每個文件中各個塊所在數據節點的信息(這些信息在 DataNode 啟動時會發送給 NameNode)
P.S. 如果 NameNode掛掉了怎麼辦?(分散式系統存在的問題,後面會討論這個問題)
DataNode(文件系統的工作節點):
- 存儲並檢索數據塊;
- 向 NameNode 更新所存儲塊的列表
HDFS 的優點:
- 適合大文件存儲,支持 TB、PB 級的數據存儲,並有副本策略
- 可以構建在廉價的機器上,並有一定的容錯和恢復機制
- 支持流式數據訪問,一次寫入,多次讀取,高效
HDFS 的缺點:
- 不適合大量小文件存儲
- 不適合併發寫入,不支持文件隨即修改
- 不支持隨機讀等低延時的訪問方式
P.S. Hadoop 本來也不是為這些場景設計的,所以到底用不用 Hadoop 要基於具體的業務場景來考慮。
NameNode 掛掉了怎麼辦?如何解決單點故障問題?
這是一個很嚴重的問題,因為我們很難把這些位於不同 DataNode 的數據塊重建成文件。Hadoop2 給出了HDFS的高可用 HA 方案:HDFS通常由兩個NameNode組成,一個處於 active 狀態(主節點),另一個處於 standby 狀態(備用節點),兩者的數據是時刻保持一致的。當主節點出現問題,備用節點會自動切換,用戶不會受到影響,這樣就避免了 NameNode 的單點故障問題。當主節點對外提供服務,比如處理來自客戶端的 RPC 請求,而備用節點則不對外提供服務,僅同步主節點的狀態,以便能夠在它失敗時快速進行切換。
HDFS 的寫流程:
- 客戶端向 NameNode 發起寫數據的請求
- 分塊寫入 DataNode 節點,DataNode 自動完成副本的備份
- DataNode 向 NameNode 彙報儲存完成,NameNode 通知客戶端
HDFS 的讀流程:
- 客戶端向 NameNode 發起讀數據的請求
- NameNode 找出距離最近的 DataNode 節點信息
- 客戶端從 DataNode 分塊下載文件
推薦閱讀:
※新浪微博有哪些值得推薦的微博管理應用?
※ggplot2玫瑰圖案例——星巴克門店分布圖
※永不過時的 K 均值演算法
※七周成為數據分析師:數據分析:手把手教你Excel實戰