談到大資料,不得不提的乙個名詞是「hdfs」。它是一種分布式檔案儲存系統,其系統架構圖如下圖所示:
從圖中可以了解到的幾個關鍵概念
從圖中可以了解到的兩個重要元件:
需要了解的另乙個元件:
簡單地說,namenode 有管理和儲存兩個作用。namenode 管理檔案系統的命名空間,維護檔案系統樹以及樹中的所有檔案和目錄。它儲存的是元資料(metadata)資訊,包括檔名目錄以及它們之間的層級關係、檔案目錄的所有者及其許可權、每個檔案塊的名以及檔案有哪些塊組成等。
這裡就很容易理解為什麼hadoop傾向儲存大檔案的原因了:因為檔案越小,儲存同等大小檔案需要的元資訊就越多,會給namenode 帶來了儲存壓力。
在 namenode 中存放元資訊的檔案是fsimage。在系統執行期間,所有對元資訊的操作都需要儲存到記憶體中並持久化到另乙個檔案edit logs,我們在講解 secondarynamenode 元件時還會提到這兩個檔案。
datanode 具有的作用如下:
secondarynamenode並不是 namenode 的備份,這點很容易理解錯。secondarynamenode 是在檔案系統中設定乙個檢查站點幫助 namenode 更好的工作。
這裡我們簡單梳理一下 namenode 的載入過程:namenode啟動時通過 fsimage 檔案獲取整個檔案系統的快照,啟動後將對檔案系統的改動寫到 edit logs 中,secondarynamenode 定時去獲取 這個 edit logs,並更新到自己的 fsimage 中。一旦有了新的 fsimage,將其再拷貝回 namenode 中,namenode下次啟動時會使用這個新的 fsimage,這個過程如下圖所示:
機架感知策略簡單點說就是副本放置策略。hdfs 中預設乙個塊具有三個副本,其分布如下圖所示:
第乙個副本放在客戶端相同的節點上,第二個副本放在不同機架的節點上,第三個副本放在與第二個副本同機架但不同節點上。
我們在討論容錯時,通常關注這四個角度:資料儲存故障容錯、磁碟故障容錯、datanode 故障容錯以及namenode 故障容錯。對於這幾個角度的容錯又可以從三個維度去分析:冗餘備份、失效轉移和降級限流。例如:namenode 的故障檢測通過 fsimage 檔案和 edit logs檔案;資料的故障容錯通過冗餘備份——機架感知策略等。
hdfs 能夠管理和儲存pb級別資料,處理非結構化資料,一般對資料的及時性要求不高,通常適合write-once-read-many訪問模式。
hdfs 不建議儲存小檔案,不建議大量隨機讀,不支援多使用者寫入以及不支援對檔案的修改。
客戶端呼叫 create()來建立檔案,distributed file system 用 rpc 呼叫 namenode 節點,在檔案系統的命名空間中建立乙個新的檔案。namenode 節點首先確定檔案原來不存在,並且客戶端有建立檔案的許可權,然後建立新檔案。
distributed file system 返回 dfsoutputstream,客戶端用於寫資料。客戶端開始寫入資料,dfsoutputstream 將資料分成塊,寫入 data queue。data queue 由 data streamer 讀取,並通知 namenode 節點分配資料節點,用來儲存資料塊(每塊預設複製 3 塊)。分配的資料節點放在乙個 pipeline 裡。data streamer 將資料塊寫入 pipeline 中的第乙個資料節點。 第乙個資料節點將資料塊傳送給第二個資料節點。 第二個資料節點將資料傳送給第三個資料節點。
dfsoutputstream 為發出去的資料塊儲存了 ack queue,等待 pipeline 中的資料節點告知資料已經寫入成功。
首先 client 通過 file system的 open函式開啟檔案, distributed file system用rpc 呼叫 namenode 節點,得到檔案的資料塊資訊。
對於每乙個資料塊,namenode 節點返回儲存資料塊的資料節點的位址。distributed file system 返回 fsdatainputstream 給客戶端, 用來讀取資料。 客戶端呼叫 stream 的 read()函式開始讀取資料。 dfsinputstream 連線儲存此檔案第乙個資料塊的最近的資料節點。datanode 從資料節點讀到客戶端(client),當此資料塊讀取完畢時,dfsinputstream 關閉和此資料節點的連線,然後連線此檔案下乙個資料塊的最近的資料節點。當客戶端讀取完畢資料的時候,呼叫fsdatainputstream 的 close 函式。
在讀取資料的過程中, 如果客戶端在與資料節點通訊出現錯誤, 則嘗試連線包含此資料塊的下乙個資料節點。失敗的資料節點將被記錄,以後不再連線。
hadoop 一 深度剖析hdfs原理
在配置hbase集群將 hdfs 掛接到其它映象盤時,有不少困惑的地方,結合以前的資料再次學習 大資料底層技術的三大基石起源於google在2006年之前的三篇 gfs map reduce bigtable,其中gfs map reduce技術直接支援了apache hadoop專案的誕生,big...
HDFS檔案的讀寫操作剖析
namenode namenode負責管理檔案目錄 檔案和block的對應關係以及block和datanode的對應關係。datanode datanode就負責儲存了,當然大部分容錯機制都是在datanode上實現的。二 hdfs基本架構圖 rack 是指機櫃的意思,乙個block的三個副本通常會...
HDFS架構剖析和雙快取機制
hdfs hadoop distributed file system 的架構演變其實就是hadoop的更新迭代的過程,目前hadoop有hadoop1 hadoop2 hadoop3三個版本,對應的就有hdfs1,hdfs2,hdfs3。hdfs1是乙個主從架構,主節點只有乙個叫namenode,...