hadoop hdfs執行機制

2021-07-13 08:24:13 字數 2028 閱讀 4079

hdfs特點

hdfs是hadoop的分布式檔案系統,用於儲存大資料,它的特點是:

1.分布式部署,利用廉價的機器儲存大資料

2.提供副本機制,容錯機制,在機器宕機或副本丟失,自動恢復,預設副本儲存3份

關注三個主要節點:

1.namenode:整個檔案系統的管理節點,接收使用者的請求,儲存著檔案/目錄的元資料資訊和每個檔案對應的block的對映列表。在linux系統上,它儲存著三個重要檔案

a.fsimage,元資料映象檔案,儲存某一段時間內的namenode的元資料資訊

b.edits,儲存操作日誌檔案

c.fstime,儲存最近一次checkpoint的時間

2.datanode:提供真實檔案的資料儲存服務,它檔案的多個塊(block),block是最基礎的儲存單位,hdfs預設的塊大小的是128m。

3.secondarynamenode:冷熱備,合併fsimage和fsedits生成新的fsimage,然後再發給namenode,替換舊的fsimage

namenode元資料詳細

namenode metadata主要存放filename,replications,block-ids,還有blockid到host的對映,例如,有乙個檔名為android.apk寫到hdfs系統中,那medata將會儲存如下資訊

客戶端向hdfs讀資料的過程

檔案讀取的過程如下:

1.客戶端向namenode發起rpc請求;

2.namenode返回該檔案的元資料資訊,包括,檔名稱,分塊的id已經和分塊id和主機的對映等等

3.客戶端根據元資料資訊向最近的datanode讀取block,如果客戶端本身是datanode,那麼將直接從本地獲取資料,block的讀取是同步的,即讀完一塊block,才可以讀另外一塊block。

4.讀取完乙個block都會進行checksum驗證,如果發現該block錯誤,那麼客戶端會通知namenode,namenode將會從其他拷貝副本選擇乙份讓客戶端繼續讀取

客戶端向hdfs寫資料的過程

1.客戶端通過rpc向namenode提交寫資料請求

2.namenode檢查該檔案是否存在,客戶端是否有許可權寫資料,如果可以寫入,則為該檔案建立一條記錄,如果不可以,則向客戶端丟擲異常。

3.客戶端接收到namenode允許寫操作之後,將檔案進行切分成多個packets,並向namenode申請blocks,namenode返回blocks列表給客戶端

4.客戶端接收到blocks列表之後,開始將packets寫到blocks列表中,當將packet寫到第乙個datanode完成時,該datanode會把該分塊的資料複製到其他datanode中,預設是複製3份。

5.最後乙個datanode成功儲存之後通過客戶端,客戶端接收到訊息之後,將會移除相應的packet,並通知namenode,namenode就會在記憶體中的metadata中新增一條該檔案資訊的描述,並在edits日誌檔案中寫入一條記錄

6.如果寫資料的過程中,發生異常,都會在edits日誌檔案中記錄操作。

namenode和secondarynamenode協助過程

secondarynamenode的作用是協作namenode完成fsimage的儲存和更新,協作過程如下。

什麼時候checkpoint

1.設定fs.checkpoint.period指定倆次checkpoint的最大時間,預設是3600秒

2.設定fs.checkpoint.size規定edits檔案的最大值,預設是64m

session執行機制

session機制是一種伺服器端的機制,伺服器使用一種類似於雜湊表 的結構 也可能就是使用 雜湊表 來儲存資訊。當程式需要為某個客戶端的請求建立乙個session的時候,伺服器首先檢查這個客戶端的請求裡是否已包含了乙個session標識 稱為sessionid,如果已包含乙個sessionid則說明...

try catch finally執行機制

finally的執行 如下的程式所示,注釋中是執行的順序 public class test public static string test finally public static string test1 finally其實是僅在return 語句執行前執行,如果return 乙個函式,那...

runtime執行機制

這篇文章主要介紹的是runtime是什麼以及怎麼用!希望對讀者有所幫助!第乙個問題,1 runtime實現的機制是什麼,怎麼用,一般用於幹嘛?runtime是一套比較底層的純c語言api,屬於1個c語言庫,包含了很多底層的c語言api。在我們平時編寫的oc 中,程式執行過程時,其實最終都是轉成了ru...