Hadoop集群之HDFS

HDFS簡介

HDFS全稱Hadoop Distributed File System,是一個分布式文件系統(tǒng),基于Google三大論文之一的Google File System開發(fā)。主要為了解決在多個普通的節(jié)點(廉價的機器,只要有存儲空間,cpu和內(nèi)存要求不高)上存儲并訪問日益增長的業(yè)務數(shù)據(jù),并且在理論上可以實現(xiàn)橫向無限擴展。

架構介紹

HDFS采用的是主從架構(Master/Slave),其中namenode是主節(jié)點,datanode是從節(jié)點,如下圖所示:
HDFS架構
  • Namenode
    1.接收客戶端的讀寫請求
    2.存儲文件的元數(shù)據(jù),主要包括文件的文件名,Block信息,副本數(shù),文件的位置信息等
    3.接收Datanode的心跳上報
    所以,如果Namenode很重要,如果down掉將不能接受Client請求,整個HDFS將不可用。
  • Datanode
    1.客戶端實際的讀寫IO
    2.接受Namenode指令,進行Datanode之間的block副本的拷貝
    3.上報給Datanode自身的信息(健康狀況、文件讀寫情況等)
  • Block
    一個大文件被切分成多個Block塊,Hadoop 2.0后塊的默認大小是128M,一個Block有多個副本,它們被存儲在不同的節(jié)點上,具體存儲策略可查閱相關資料。

常用命令

HDFS是一個文件系統(tǒng),它遵循了與Linux類似的POSIX標準,所以有類似于linux的shell命令行操作接口(命令)。主要提供了User Commands、Admin Commands以及Debug Commands:

HDFS命令

常用的用戶命令有dfs、fsck,下面舉個例子:
1.查看根目錄下的文件列表
hdfs dfs -ls /
2.查看根目錄下所有文件的大小
hdfs dfs -du /
等,fsck主要用來查看文件的block信息,以及修復損壞的block等。
常用的管理命令有balancer,用來平衡各個Datanode節(jié)點之間的存儲負載。
具體各個命令的用法可以查詢官方文檔HDFS命令,自己去探索。

內(nèi)存受限問題

為了快速響應文件讀寫請求,HDFS把所有的元數(shù)據(jù)都存儲在Namenode內(nèi)存中,隨著業(yè)務數(shù)據(jù)增多或小文件很多,都會導致Namenode 占用內(nèi)存不斷增加,如果占用內(nèi)存接近極限,會導致HDFS不可用,這樣就導致了內(nèi)存受限問題。在實際生產(chǎn)環(huán)境中,可以用官方的Federation解決方案,按業(yè)務分成多個HDFS集群;也可以提前評估數(shù)據(jù)基數(shù)及其增長速度,保證Namenode有足夠的可用內(nèi)存;同時要做好定時小文件的合并。

單點故障問題

我們上面已經(jīng)講到Namenode在集群中的地位至關重要,如果它down掉了將影響整個集群的訪問,存在單點故障問題,主要表現(xiàn)在以下幾方面:

  • 如果Namenode掛掉了,無法接收Client的讀寫請求,直接影響業(yè)務
  • Namenode節(jié)點掛掉后,如果元數(shù)據(jù)信息丟失(比如硬盤損壞),整個集群數(shù)據(jù)將無法恢復,造成災難性后果

    針對以上兩點,首先要有一個備份的Namenode,在當前Namenode掛掉后可以馬上接管讀寫請求,不影響業(yè)務;另外,要把元數(shù)據(jù)的信息(edits文件) 存儲在公共的區(qū)域而不是存儲在Namenode節(jié)點本地,防止Namenode節(jié)點機器故障后元數(shù)據(jù)信息丟失導致數(shù)據(jù)無法恢復。常用的高可用解決方案為QJM:
    HDFS HA
  • 包含多個Namenode節(jié)點,其中只有一個active,接收Client讀寫請求;其他是standby,除了不能接收Client讀寫請求,它同樣存儲元數(shù)據(jù)信息,接受Datanode上報Block信息,以便在變?yōu)閍ctive狀態(tài)是可以快速接受Client請求。
  • Namenode Active、Standy的狀態(tài)選擇和切換由Zookeeper完成。每個Namenode都伴隨著一個zkfc服務,用來監(jiān)控Namenode可用性,如果其檢測到對應的Namenode不可用,則上報給zk,zk從其他Standby的Namenode節(jié)點中選擇一個為Active,通知zkfc把該Namenode變?yōu)锳ctive,這樣就實現(xiàn)了瞬間接管。
  • 還有一個問題,那就是元數(shù)據(jù)的存儲問題。為了避免元數(shù)據(jù)存儲在本地時(edits文件)機器故障導致數(shù)據(jù)無法恢復,在該HA方案中,元數(shù)據(jù)被存儲在Journalnode節(jié)點中,為了防止單點故障,一般會有多個Journalnode節(jié)點形成一個集群(存儲edits文件的多個備份),Namenode不斷向Journalnode集群同步元數(shù)據(jù),在恢復HDFS集群時,會從Journalnode中加載元數(shù)據(jù)

關鍵指標

上面已經(jīng)詳細介紹了HDFS的架構及高可用原理,現(xiàn)在總結一下HDFS運維過程中應該主要關注的一些指標:
1.Namenode Memory,如果該指標已經(jīng)占比比較高(90%以上),則需要考慮擴展內(nèi)存,合并文件,清除無用文件
2.Namenode GC Time,如果GC Time比較長,且Namenode RPC queue wait time比較長,則考慮Journalnode 元數(shù)據(jù)同步可能有問題,需要重啟Journalnode
3.Corrupted Blocks,如果損壞Block較多,需要手動修復
4.Under Replicated Blocks,如果副本數(shù)缺失很多,需要手動補充副本。

完。

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

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

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