SPOF
- spof: single point of failure 即單點故障
任何只有一個節(jié)點的服務(wù)都會存在該問題
HDFS 寫數(shù)據(jù)流程
1 client請求NN是否可以上傳數(shù)據(jù),nn根據(jù)請求校驗集群信息及元數(shù)據(jù)信息,返回是否可以上傳
- client根據(jù)Configuration配置信息,將文件切分,并向nn請求上傳block1,
- nn根據(jù)請求計算各個dn距離client的網(wǎng)絡(luò)距離和各個dn的狀態(tài)(健康狀態(tài),活躍性,節(jié)點存儲能力等),返回給最合適的dn列表給client
機架感知策略:
網(wǎng)絡(luò)拓撲距離: - client根據(jù)返回的dn列表,選擇網(wǎng)絡(luò)距離最近的dn建立pipeline輸送管道 開始進行block的上傳,上傳方式為將block拆分為每個64k大小的package數(shù)據(jù)包進行發(fā)送,等待ack返回確認
- dn接收且保存下client發(fā)送的package數(shù)據(jù)包,并與下一個dn建立pipeline,將此數(shù)據(jù)包繼續(xù)發(fā)送到下一個dn,下一個dn重復(fù)此動作,直到備份的dn全部接收完成,然后順序返回ack確認
數(shù)據(jù)包帶著各備份datanode的信息 - client接收到ack確認之后,繼續(xù)上傳下一個package,直到block1上傳完畢
- client重復(fù)第二步開始進行下一個block的上傳,直到文件上傳完畢
- 整個文件上傳完成后,client提交上傳結(jié)果給nn,nn記錄元數(shù)據(jù)信息
HDFS 讀數(shù)據(jù)流程
- client請求NN下載數(shù)據(jù),nn根據(jù)請求信息判斷集群信息及元數(shù)據(jù)信息,返回該文件的元數(shù)據(jù)所有數(shù)據(jù)塊地址列表
- client在一個數(shù)據(jù)塊請求中啟動多個線程 并發(fā)的進行數(shù)據(jù)塊的read操作
- 將讀到的文件寫入本地的臨時文件中
- client繼續(xù)請求下一個數(shù)據(jù)塊,重復(fù)第二步,知道文件塊全部下載完成
- client處理合并本地臨時文件成為一個整體文件
數(shù)據(jù)安全策略
- 元數(shù)據(jù)安全: secondarynamenode或standby 將內(nèi)存中或edits文件中的數(shù)據(jù)同步到fsimage文件中
- 節(jié)點數(shù)據(jù)安全: 副本機制
- linux文件系統(tǒng)安全: 磁盤冗余陣列 raid
元數(shù)據(jù)管理
元數(shù)據(jù)類型:
- 命名空間的目錄樹結(jié)構(gòu)
- 文件和數(shù)據(jù)塊位置信息
- 從節(jié)點狀態(tài)數(shù)據(jù)(健康,磁盤使用情況)
存儲介質(zhì):
- 內(nèi)存:內(nèi)存元數(shù)據(jù)
- 磁盤:編輯日志edits和鏡像文件fsimage
備份機制 checkpoint:
- 非高可用:由secondarynamenode定期(默認1小時,100萬條record)執(zhí)行checkpoint。新生成一個edits文件繼續(xù)記錄元數(shù)據(jù)變化,將原有的edits與fsimage復(fù)制后合并,生成新的fsimages文件,然后復(fù)制發(fā)送給namenode;
- 高可用:namenode將生成的編輯日志轉(zhuǎn)儲到j(luò)ournalnode集群上,再由備份節(jié)點的namenode將執(zhí)行日志載入到自己的內(nèi)存中,并生成新的fsimage
查看元數(shù)據(jù):
- 查看鏡像文件,oiv命令;查看編輯日志,oev命令
Federation 聯(lián)盟機制
- 場景: 集群中所有的從節(jié)點都可以擴展,但是主節(jié)點卻難以擴展,聯(lián)邦機制即可以用來實現(xiàn)主節(jié)點的擴展
- 概念:hadoop 2.X 新增機制,兩個活躍的namenode公享一個集群從節(jié)點進行負載均衡一起工作
- 特點:聯(lián)盟機制不能與HA機制共存,如果非要共存,構(gòu)建多個nameservice(即每個namenode維護自己的nameservice)
- 區(qū)分:通過/nameservice/clusterID/blockPoolID區(qū)分從節(jié)點上的某個塊屬于哪個集群
容災(zāi)機制與負載均衡
- 容災(zāi)機制: 故障轉(zhuǎn)移 主備機制 HA高可用
- 負載均衡: 避免熱點問題 默認10%的差異值:
- 均衡策略: 輪詢策略,權(quán)重策略,隨機策略
Safemode 安全模式
- 概念:
hdfs集群的一種狀態(tài),防止數(shù)據(jù)塊丟失的一種保護機制; - 何時會發(fā)生:
- 集群啟動時會進入安全模式,此時nn等待所有dn的匯報,與元數(shù)據(jù)進行比較,來校驗數(shù)據(jù)是否丟失及恢復(fù)
- 當發(fā)現(xiàn)數(shù)據(jù)丟失時,當前所有存在的塊/元數(shù)據(jù)中記錄的塊 <= 99.9%,會停留在安全模式,實現(xiàn)數(shù)據(jù)恢復(fù), 直到大于99.9%,會自動退出
- 手動進入,用于hdfs集群的升級和維護
- 安全模式的特征:
- 安全模式下 不允許寫入,只允許讀,可以通過客戶端強制離開安全模式
集群的動態(tài)擴容和縮容
- 動態(tài)擴容
增加從節(jié)點,可加入白名單,然后啟動該節(jié)點,啟動負載均衡 - 動態(tài)縮容
下線從節(jié)點,需要加入黑名單,然后刷新節(jié)點信息,啟動負載均衡
腦裂現(xiàn)象
- 概念:網(wǎng)絡(luò)或節(jié)點信息不可靠造成的誤報信息,導(dǎo)致產(chǎn)生集群無主或集群多主的現(xiàn)象
隔離機制
- 概念:為了避免腦裂機制的產(chǎn)生,需要設(shè)置namenode的隔離機制,即當備份節(jié)點需要轉(zhuǎn)換為主節(jié)點時,會通過ssh免密登錄到上個active節(jié)點上,殺死或許存在的namenode進程;
HA高可用
- 概念:通過備份名稱節(jié)點,達到避免namenode節(jié)點單點故障的問題;
- 實現(xiàn):
如何通過主備切換: 利用zk的分布式鎖,通知機制,節(jié)點類型和hadoop的zkfc進程
如何進行數(shù)據(jù)同步: 利用journalnode編輯日志edits文件共享集群
相關(guān)端口
8020 hdfs節(jié)點通訊端口
50070 hdfs頁面訪問端口
8485 journalnode通訊端口