1. 程式人生 > 其它 >大資料基礎之HDFS

大資料基礎之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