hdfs中,當乙個客戶端往hdfs某個檔案寫入資料的時候,為了保持資料的一致性,其他客戶端是不允許同時寫入的。為了實現這一機制,hdfs引入了租約的概念。簡而言之,租約是hdfs 給與客戶端可以寫入某個檔案的臨時許可證,沒有此證件或者租約到期都不能繼續向該檔案寫入資料。
一 租約的屬性或者要素:
1、租約持有者(holder):一般是指客戶端,每乙個客戶端持有乙個租約。
2、租約對應的檔案列表:乙個客戶端的所持有的租約允許對應多個檔案id列表,表示這個客戶端可以同時對多個檔案進行操作。
二 hdfs中租約的管理
比如租約的新增移除或者客戶端操作完畢未及時釋放租約,hdfs的處理流程,過期的租約是怎麼處理的等。這些操作都是在租約管理器中實現的leasemanager.
leasemanager由於是要對外提供服務的,所以毫無疑問它屬於active
namenode執行的服務,
2.1作用
1、維護租約持有者和租約的對映關係
2、維護檔案路徑和租約的對映關係
3、提供租約增刪改查方法
4、維護乙個監視器程序,定期檢查租約是否到期或者超時,對於長時間沒有更新租約的檔案(硬時間限制),就會觸發租約恢復機制
2.2新增租約-addlease
hdfs客戶端在寫檔案的時候,需要申請租約,根據holder去獲取租約,如果沒有獲取到,則建立乙個租約,然後更新租約和租約持有者的資訊;如果已經存在,可以先從租約持有者和租約對映關係移除,
且需要從檔案列表移除,在新增新的租約,然後更新對應的對映關係
2.3租約檢查-fsnamesystem.checklease
當客戶端放棄申請到的資料塊或者上一次申請的資料塊用完了,現在申請新的資料塊,那麼都需要檢查租約。
如果hdfs檔案不存在,或者是乙個目錄,或者已經被刪除,或者正處於構建中,則丟擲異常。
2.4租約更新-renewlease
根據以更新時間排序的租約集合中刪除當前租約,再更新這個租約的最新更新時間,再次加到租約集合中
2.5刪除租約
namenode關閉構建中的檔案,將檔案構建狀態轉變為非構建狀態,同時由於客戶端已經完成了寫操作,所以需要刪除租約。
三 租約檢查機制
租約管理器會定期對租約進行檢查,對於長時間沒有進行租約更新的檔案,會對這個檔案進行租約恢復,然後關閉這個檔案。
什麼時候會出現租約過期呢?比如hdfs出現故障,客戶端和可能在開啟乙個檔案之後出現故障,造成客戶端不能玩成租約更新以及租約的刪除操作,這就造成逐月過期。
定期檢查是由內部的monitor內部類負責的,每個2s就會執行一次,呼叫一次leasemanager.checkleases()方法。
首先遍歷所有租約
然後:如果沒有超過硬時間限制則直接返回
再次:是對過期租約取出對應的檔案,然後對檔案租約進行恢復
最後:需要在editlog中同步恢復記錄
HDFS租約機制
在hdfs中,當每次客戶端使用者往某個檔案中寫入資料的時候,為了保持資料的一致性,此時其它客戶端程式是不允許向此檔案同時寫入資料的。那麼hdfs是如何做到這一點的呢?答案是租約 lease 換句話說,租約是hdfs給予客戶端的乙個寫檔案操作的臨時許可證,無此證件者將不被允許操作此檔案。本文我們將要深...
分布式租約機制
租約 lease 在分布式中一般描述如下 如果頒發者的時鐘比接收者的時鐘慢,則當接收者認為 lease 已經過期的時候,頒發者依舊認為 lease 有效。接收者可以用在 lease 到期前申請新的 lease 的方式解決這個問題。如果頒發者的時鐘比接收者的時鐘快,則當頒發者認為 lease 已經過期...
HDFS儲存的機制之HDFS讀寫流程
7步 1.hdfs提供的客戶端client,向遠端的namenode發起rpc請求。2.namenode會檢查要建立的檔案是否已經存在,建立者是否有許可權進行操作。成功則會檔案建立乙個記錄,否則會讓客戶端丟擲異常。3.a 當客戶端client開始寫入檔案的時候,客戶端會將檔案切分成多個packets...