大資料基礎之HDFS
https://hadoop.apache.org
A distributed file system that provides high-throughput access to application data.
特點:
- 大檔案、一次寫入多次讀取,修改只支援Append
- 多副本
- 流式、非低延時
一 概念
元資料、File-Block、機架、副本、讀資料、寫資料
File-Block、Replication
QJM部署
NameNode、DataNode、ZKFC、JournalNode
HA
zk節點
- /hadoop-ha/${dfs.nameservices}/ActiveBreadCrumb 永久節點
- /hadoop-ha/${dfs.nameservices}/ActiveStandbyElectorLock 臨時節點
程式碼
org.apache.hadoop.hdfs.tools.DFSZKFailoverController
二 常用命令
hdfs dfs -ls /
hdfs dfs -du -h /
hdfs dfsadmin -report
hdfs haadmin -getAllServiceState
hdfs fsck /tmp/36c8b0727c814dc2ae5d520a45fadeb0.51c9f1f1e3652991ed3071c6c0bb0264 -files -blocks -locations -racks
hdfs dfs -setrep 2 /user/hive/warehouse/temp.db/test_ext_o/000000_0
hdfs balancer -threshold 10
hadoop distcp hdfs://master1:8020/foo/a hdfs://master1:8020/foo/b hdfs://master2:8020/bar/foo
三 讀寫過程
讀
寫
四 Namenode相關
檔案
全量+增量
fsimage、edit log
記憶體估算
Total = 198 ∗ num(Directory + Files) + 176 ∗ num(blocks) + 2% ∗ size(JVM Memory Size)
五 Datanode相關
分配策略
選擇策略:
- 1 當前機架(相對hdfs client而言)chooseLocalNode
- 2 遠端機架(相對hdfs client而言)chooseRemoteRack
- 3 另一機架
- 4 全部隨機 chooseRandom
程式碼:
org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.findNewDatanode
副本檢查
BlockManager中啟動執行緒ReplicationMonitor,ReplicationMonitor定期檢查哪些block存在副本缺失,並將待複製block資訊通知原始DataNode,DataNode收到資訊後會不斷複製block,預設一次2個block;
程式碼:
org.apache.hadoop.hdfs.server.blockmanagement.BlockManager
相關配置:
dfs.replication
dfs.namenode.replication.interval
dfs.namenode.replication.work.multiplier.per.iteration
dfs.namenode.replication.max-streams
六 安全模式
SafeMode 是 NameNode 的一種特殊狀態,在這種狀態下,檔案系統只接受讀資料請求,而不接受上傳、刪除、修改等變更請求。
在 NameNode 主節點啟動時,HDFS 首先進入安全模式,DataNode 在啟動的時候會向 NameNode 傳送心跳訊號並彙報可用的 block 的狀態,當整個系統達到安全標準時,HDFS 自動離開安全模式。
安全標準:block缺失率低於0.1%
dfs.namenode.safemode.threshold-pct=0.999
退出安全模式命令
hdfs dfsadmin -safemode leave