HDFS分散式文件系統介紹
來自專欄 初學大數據
在上一篇文章中已經簡單介紹了什麼是大數據以及Hadoop的生態圈,那麼大數據要解決的核心問題是什麼?
數據存儲———> 分散式文件系統HDFS
數據計算———> 分散式計算MapReduce(YARN)
今天呢,詳細介紹一下 Hadoop 本身架構中很重要的模塊之— HDFS :一種分散式文件系統,可提供對應用程序數據的高吞吐量訪問,解決海量數據存儲問題。將從以下幾個方面來深入闡述:
HDFS 存儲架構剖析
如圖所示,我們可以得知hdfs主要包括幾個角色:
1. Client 提交讀取請求
2. Namenode 全局把控
3. Datenodes 數據存儲
4. Block 一個文件會被拆分成多個Block存儲
那麼這幾個角色分別是做什麼工作的呢?又是如何協作的呢?
先來解釋解釋 Client 是做什麼的,顧名思義就是 HDFS 的訪問客戶端,負責提交讀取請求,Client 提交請求有2中方式,一種是通過 HDFS 提供的 api 編寫程序進行交互,另一種就是安裝了 Hadoop 的 DateNodes,其也可以通過命令行與 hdfs 進行交互。
當接收到客戶端提交的請求之後就要著手對數據進行處理(讀寫操作),那麼讀寫操作就需要用到 Namenode 和 DateNodes 了,為什麼呢?
我舉個不是很嚴謹的例子來簡單說明一下,就好比你去一個倉庫取貨,你要跟倉庫管理員說我要取 xx 產品,管理員根據你提供的信息通過管理系統查詢並獲知你要的產品在 xx 號貨櫃距離最近,你在這稍等,我去取一下,管理員得知具體貨櫃號後就屁顛屁顛的跑過去取你要的產品了,管理員到貨櫃並取貨的這個過程跟他查詢的管理系統沒半毛錢關係,管理系統只是負責提供存儲信息的,管理員從貨櫃中取得產品交給你之後,他的這個工作就結束了,並且貨櫃會定期通知管理系統當前貨櫃的使用情況(比如還剩餘多少空間等)。存貨的過程也類似,不做重複說明。
那麼在這個過程中,Client 充當的就是倉庫管理員,NameNode 就好比那個管理系統,而 DateNodes 就是貨櫃。大概流程走通了以後我們來詳細分析一下每個角色的詳細功能。在這個過程中 NameNode 要負責響應 Client 的請求,要有產品的存儲信息,要實時記錄各個貨櫃的存放情況,才能做到準確響應,DataNodes 要處理產品存取並及時跟 NameNode 反饋數據,包括 2 部分( xx 產品本身,本貨櫃的信息),我們整理一下在 Hadoop 中這幾個角色充當的作用:
NameNode:接收客戶端請求響應,維護文件系統的目錄結構,管理文件與block 之間的關係,block 與 datanode 之間關係。支持對 HDFS 中的目錄、文件和塊做類似文件系統的創建、刪除、修改、列表文件和目錄等基本操作。塊存儲管理在整個 HDFS 集群中有且只有唯一一個處於 active 狀態的 NameNode,負責對這個 HDFS 進行管理。
特點:
- NameNode 是一個中心伺服器,單一節點(簡化系統的設計和實現),負責管理文件系統的名字空間 ( namespace ) 以及客戶端對文件的訪問。
- 文件操作,NameNode 負責文件元數據的操作,DataNode 負責處理文件內容的讀寫請求,跟文件內容相關的數據流不經過 NameNode ,只會詢問它跟那個 DataNode 聯繫,否則 NameNode 會成為系統的瓶頸。
- 副本存放在哪些 DataNode 上由 NameNode 來控制,根據全局情況做出塊放置決定,讀取文件時 NameNode 盡量讓用戶先讀取最近的副本,降低帶塊消耗和讀取時延。
- NameNode 全權管理數據塊的複製,它周期性地從集群中的每個DataNode接收心跳信號和塊狀態報告 ( Blockreport ) 。接收到心跳信號意味著該DataNode 節點工作正常。塊狀態報告包含了一個該 DataNode 上所有數據塊的列表。
DateNodes:存儲用戶的文件對應的數據塊 ( Block ) 文件被分成多個 block 存儲在磁碟上,為了保證數據的安全,文件會有多個副本。Namenode 和 Client的指令進行存儲或者檢索 block ,並且要定期向 NameNode 發送心跳信息,彙報本身及其所有的 block 信息,健康狀況。
特點:
- 一個數據塊在 DataNode 以文件存儲在磁碟上,包括兩個文件,一個是數據本身,一個是元數據包括數據塊的長度,塊數據的校驗和,以及時間戳。
- DataNode 啟動後向 NameNode 註冊,通過後,周期性( 1小時 )的向NameNode上報所有的塊信息。
- 心跳是每 3 秒一次,心跳返回結果帶有 NameNode 給該 DataNode 的命令如複製塊數據到另一台機器,或刪除某個數據塊。如果超過 10 分鐘沒有收到某個 DataNode 的心跳,則認為該節點不可用。
- 集群運行中可以安全加入和退出一些機器。
Block:HDFS 存儲的是大量的文件,那麼可靠性就至關重要了,一旦數據丟失那麼造成的損失可能是毀滅性的,我們來剖析一下 HDFS 是怎麼可靠地存儲的。
在剖析之前我們自己來回想下生活中的一個場景,比如簽訂數額較大的借條,可分為債主、借款人、見證人各一份,多人持有的目的是為了防止其中某人借條丟失導致不必要的麻煩。那麼 HDFS 也是基於這樣的一個原理來存儲數據,原理肯定較為複雜,下面開始我們的分析:
HDFS 將每一個文件切分為多個一樣大小的塊(最後一塊除外),文件的塊通過複製來實現容錯。每個塊的大小以及副本係數可以針對每個文件進行配置,可以在文件創建的時候進行指定,在後期可進行修改。HDFS 文件是一次寫入的(附加,刪除除外),並且嚴格限制同一時間只能有一個用戶寫入。
- 文件切分成塊(默認大小 128M ),以塊為單位,每個塊有多個副本存儲在不同的機器上,副本數可在文件生成時指定(默認 3 )。
- NameNode 是主節點,存儲文件的元數據如文件名,文件目錄結構,文件屬性(生成時間,副本數,文件許可權),以及每個文件的塊列表以及塊所在的DataNode 等等。
- DataNode 在本地文件系統存儲文件塊數據,以及塊數據的校驗和。
- 可以創建、刪除、移動或重命名文件,當文件創建、寫入和關閉之後不能修改文件內容。
NameNode + N個DataNode
建議:NN和DN是部署在不同的節點上
如果覺得文章不錯,隨手給個贊吧,你的點贊是給我最大的支持,另外有錯誤歡迎留言指出,謝謝。
歡迎關注我的公眾號:Jianpan ,更多好文,敬請期待!
推薦閱讀:
※oVirt安裝配置——第四章(創建網路篇)
※谷歌、優步、阿里齊聚「UBDC全域大數據峰會·2016」
※我們每個人都只是一堆數據,想到後直接整個人鬱悶了!
※pc28網站計算數據?
※知識分享 | 不超3分鐘看懂「PHM」!