HDFS體系結構及存儲原理

  首先要了解的是,HDFS採用的是主從架構,即一個主節點(名稱節點),多個從節點(數據節點),主節點起到管家做用,負責提供數據目錄服務,從節點都是數據節點負責數據存儲。shell

  咱們都知道文件系統中都是有命名空間的概念的,HDFS也不例外,它的命名空間只有一個,裏面包含了目錄、文件、塊,它的使用和傳統的文件體系是同樣的,咱們訪問HDFS文件系統,也和傳統的訪問方式同樣經過 / + 目錄名稱訪問。服務器

  提到訪問數據,就必須知道HDFS的通訊協議。全部的HDFS通訊協議都是構建在TCP/IP的基礎之上,並且不一樣組件之間,通訊協議會有些差異,好比,客戶端向名稱節點發起的TCP鏈接,是使用客戶端的協議和名稱節點進行交互。而整個集羣中名稱節點和數據節點之間的交互是使用專門的的數據節點協議進行交互的,另外常常涉及到客戶端讀取數據,就須要客戶端和數據節點進行交互,它經過遠程調用RPC來實現。整個HDFS客戶端實際上就是一個庫,它向外界暴露HDFS文件系統的接口並且還隱藏了後臺實現的複雜性,整個操做除了能夠經過JAVA API實現,也能夠直接經過shell命令實現。架構

  對於分佈式文件系統中常常遇到的幾個問題,HDFS給出了以下解決方案:分佈式

  (1)冗餘數據保存的問題:數據以塊爲單位,每一個塊都被冗餘保存,通常一個數據塊被默認保存爲三份。這種設計方式的好處:設計

    1)加快數據傳輸速度(若多個客戶端同時訪問,可保證去訪問冗餘塊即並行操做);接口

    2)很容易檢查數據錯誤(即經過檢查冗餘塊對比數據檢查錯誤);集羣

    3)保證數據可靠性(若某機器壞掉仍保證數據可用,且在HDFS中,若副本量低於預設值,系統會自動複製副本達到預設值)後臺

  (2)數據保存策略問題:第一個塊來了以後,保存三個副本,第一個副本放在上傳文件的數據節點上(若發送請求再也不集羣內部,則會隨機挑選一臺磁盤不太滿,CPU又不太忙的節點,將第一個副本放在上面),第二個副本會放在和第一個副本不一樣機架的節點上,第三個副本放在第一個副本相同的機架節點上。這樣的優點顯而易見,能夠保證某個服務器或某個機架出現問題後,其他副本還能正常工做基礎

  (3)數據恢復的問題:在數據的存儲中常常會發生數據錯誤,這時候就須要數據恢復策略來恢復數據。HDFS中可能出現數據問題的地方有如下幾種:命名空間

    1)名稱節點出錯:HDFS 1.0版本經過第二名稱節點進行冷備份,可是這樣的缺點也是顯而易見的,即數據須要必定的時間恢復,在這段時間裏,HDFS是沒法提供對外服務的。而在HDFS 2.0版本中實現了熱備份,即若是名稱節點出了問題,第二名稱節點會即時頂替名稱節點工做,而不存在數據恢復時間。

    2)數據節點出錯:數據節點會按期向名稱節點發送心跳信息(用來告訴名稱節點本身可用),若名稱節點探測到某個數據節點不可用,則將其他數據節點中的備份再複製一份到另外一個機器(即隨時保持副本的數量爲預設值)

    3)數據出現錯誤:客戶端讀取數據後會對它的數據進行校驗碼驗證(每一個文件都有一個校驗碼),若是發現校驗碼不對,就說明數據除了問題,校驗碼是在文件被建立的時候生成的,即客戶端每寫入一個文件都會爲該數據塊生成一個校驗碼,把它保存在同一文件目錄下,下次讀取的時候會連帶校驗碼一塊兒讀取,讀到以後進行計算,把計算獲得的校驗碼和上次生成的校驗碼進行比較,若是不一致,說明數據存儲過程當中發生了錯誤,而後對錯誤數據進行恢復和複製。

相關文章
相關標籤/搜索