分布式文件系統(tǒng)
特點(diǎn)
- 容忍硬件故障,3個(gè)副本,RS(x,y)糾刪碼 RS(10,4)膨脹率1.4 RAID5
- 流式數(shù)據(jù)存儲(chǔ) 只支持追加,刪除,而不能修改
- 大數(shù)據(jù)集 (100w個(gè)文件300m內(nèi)存)
- 簡(jiǎn)單的一致性模型 (是強(qiáng)一致性),不支持隨機(jī)讀取
- 移動(dòng)計(jì)算比移動(dòng)數(shù)據(jù)劃算 “數(shù)據(jù)本地性“
- 異構(gòu)軟硬件可移植性
塊
概念
- 硬盤(pán) 塊大小一般為512B 每個(gè)文件系統(tǒng)都有默認(rèn)塊大小 xfs:4KB NTFS:4KB
- HDFS 塊 默認(rèn)128MB (分塊=》chunk) 一個(gè)小文件不會(huì)占一整個(gè)塊(硬盤(pán)會(huì))
分布式文件系統(tǒng)引入塊的好處
- 便于管理大文件
- 簡(jiǎn)化了文件系統(tǒng)的設(shè)計(jì)
- 對(duì)容錯(cuò)性的提升
- 對(duì)并行性的提升
NAMENODE
主/從 架構(gòu),每個(gè)集群一般只要1個(gè)(正在工作的)NAMENODE
NameNode管理文件系統(tǒng)的命名空間(namespace) 即管理文件系統(tǒng)元數(shù)據(jù),兩個(gè)文件永久保存在本地磁盤(pán):命名空間鏡像文件(fsimage)和編輯日志文件(editlog)
Name記錄每個(gè)塊所在DataNode的信息, 而DataNode維護(hù)塊所在磁盤(pán)位置
-
NAMENODE目錄結(jié)構(gòu)
/dfs/nn/current/VERSION
- namespaceID
- clusterID
- blockpoolID
- cTime
- sotrageType
- layoutVersion
/dfs/nn/in_use.lock
/dfs/nn/current/edit.log
記錄著當(dāng)前時(shí)間內(nèi)存中的事物,一定閾值后會(huì)寫(xiě)到fsiamge
hdfs oev -i edits_... -o ~/edit.xml -> 將edit文件(二進(jìn)制)轉(zhuǎn)換成xml可視文件
/dfs/nn/current/fsimage
包換所目錄和文件inode的序列化信息(元信息),只記錄塊和DD的對(duì)應(yīng)關(guān)系
Hfs oiv -i ... -o ... -> fsimage -> webhdfs、xml
永久性還原點(diǎn)
DATENODE
DataNode是文件系統(tǒng)的工作節(jié)點(diǎn)
DataNode根據(jù)客戶端的請(qǐng)求來(lái)讀或者寫(xiě)數(shù)據(jù)
-
DATANODE文件目錄
/dfs/dn/current/BP-...
HDFS塊存儲(chǔ)在blk前綴的文件中,存一部分原始數(shù)據(jù)以及meta文件存儲(chǔ)頭部信息和校驗(yàn)和信息
當(dāng)目錄已經(jīng)存儲(chǔ)了64個(gè)數(shù)據(jù)塊,就會(huì)新建一個(gè)子目錄
JournalNode
共享存儲(chǔ)
nn(active) editlog -> journalNode -> nn(standby)
復(fù)制塊的放置
副本因子為3時(shí),第一個(gè)數(shù)據(jù)塊放置到本地機(jī)架(RACK)的一個(gè)節(jié)點(diǎn)(如果客戶端在集群外,就隨機(jī)選擇一個(gè)節(jié)點(diǎn)),另一份數(shù)據(jù)塊放置到異機(jī)架的一個(gè)節(jié)點(diǎn),最后一份數(shù)據(jù)塊放置到與第二塊同一個(gè)機(jī)架的另一個(gè)節(jié)點(diǎn)。
重啟
- 加載fsimage到內(nèi)存,進(jìn)入安全模式(只讀)
- 執(zhí)行時(shí)間戳后的edit.log生成新的fsimage
- DA向NN報(bào)告文件,當(dāng)文件收集99.9%時(shí),退出安全模式
Balancer
兩個(gè)參數(shù)
- 閾值 5 -> 最大% - 最小% < 5% 停止重平衡