HDFS 分布式文件存儲服務(wù)(二) 原理介紹

SPOF

  • spof: single point of failure 即單點故障
    任何只有一個節(jié)點的服務(wù)都會存在該問題

HDFS 寫數(shù)據(jù)流程

1 client請求NN是否可以上傳數(shù)據(jù),nn根據(jù)請求校驗集群信息及元數(shù)據(jù)信息,返回是否可以上傳

  1. client根據(jù)Configuration配置信息,將文件切分,并向nn請求上傳block1,
  2. nn根據(jù)請求計算各個dn距離client的網(wǎng)絡(luò)距離和各個dn的狀態(tài)(健康狀態(tài),活躍性,節(jié)點存儲能力等),返回給最合適的dn列表給client
    機架感知策略:
    網(wǎng)絡(luò)拓撲距離:
  3. client根據(jù)返回的dn列表,選擇網(wǎng)絡(luò)距離最近的dn建立pipeline輸送管道 開始進行block的上傳,上傳方式為將block拆分為每個64k大小的package數(shù)據(jù)包進行發(fā)送,等待ack返回確認
  4. dn接收且保存下client發(fā)送的package數(shù)據(jù)包,并與下一個dn建立pipeline,將此數(shù)據(jù)包繼續(xù)發(fā)送到下一個dn,下一個dn重復(fù)此動作,直到備份的dn全部接收完成,然后順序返回ack確認
    數(shù)據(jù)包帶著各備份datanode的信息
  5. client接收到ack確認之后,繼續(xù)上傳下一個package,直到block1上傳完畢
  6. client重復(fù)第二步開始進行下一個block的上傳,直到文件上傳完畢
  7. 整個文件上傳完成后,client提交上傳結(jié)果給nn,nn記錄元數(shù)據(jù)信息

HDFS 讀數(shù)據(jù)流程

  1. client請求NN下載數(shù)據(jù),nn根據(jù)請求信息判斷集群信息及元數(shù)據(jù)信息,返回該文件的元數(shù)據(jù)所有數(shù)據(jù)塊地址列表
  2. client在一個數(shù)據(jù)塊請求中啟動多個線程 并發(fā)的進行數(shù)據(jù)塊的read操作
  3. 將讀到的文件寫入本地的臨時文件中
  4. client繼續(xù)請求下一個數(shù)據(jù)塊,重復(fù)第二步,知道文件塊全部下載完成
  5. 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ā)生:
    1. 集群啟動時會進入安全模式,此時nn等待所有dn的匯報,與元數(shù)據(jù)進行比較,來校驗數(shù)據(jù)是否丟失及恢復(fù)
    2. 當發(fā)現(xiàn)數(shù)據(jù)丟失時,當前所有存在的塊/元數(shù)據(jù)中記錄的塊 <= 99.9%,會停留在安全模式,實現(xiàn)數(shù)據(jù)恢復(fù), 直到大于99.9%,會自動退出
    3. 手動進入,用于hdfs集群的升級和維護
  • 安全模式的特征:
    1. 安全模式下 不允許寫入,只允許讀,可以通過客戶端強制離開安全模式

集群的動態(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通訊端口

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容