namenodeタスクスレッドのLease Manager$Monitor
今日はnamenodeのバックグラウンドタスクスレッドLease Manager$Monitorを分析して、リースマネージャLease Managerがテナントの管理を担当しています.(レンタルの概念については前の記事を見てもいいです.)これらの期限が切れたテナントをタイミングよく調べて廃棄してください.これはMonitorのコメントからも見られます.
第三のSortedMapは主に1つの管轄資源と賃貸借契約のマッピング関係を維持しています.temp 1_fileというhdfsファイルはleaseAという契約があります.これは主にnamenodeがあるデータブロックが現在あるかどうかを調べる時に使います.
賃貸借契約のadd操作はいつ行われますか?
はい、これからはlease ManagerのMonitorタスクスレッドの機能を分析します.彼は主に期限切れのリースを検出してから対応する処理を行います.
有効期限を検出するための方策は、まずSortedSetから有効期限に近いデータ、つまり更新時間が早いデータを取り出して、これを使って最大レンタル期限と比較します.もし期限が切れたら以下の操作を行います.
リース期間中に他の要求をどう処理するかは、ダタノイドノードで分析されますが、まだ分析が不十分です.
* Monitor checks for leases that have expired,
* and disposes of them.
レンタルマネージャの完全な機能は何ですか?これはやはり彼のjava docから始めました./**
* LeaseManager does the lease housekeeping for writing on files.
* This class also provides useful static methods for lease recovery.
*
* Lease Recovery Algorithm
* 1) Namenode retrieves lease information
* 2) For each file f in the lease, consider the last block b of f
* 2.1) Get the datanodes which contains b
* 2.2) Assign one of the datanodes as the primary datanode p
* 2.3) p obtains a new generation stamp form the namenode
* 2.4) p get the block info from each datanode
* 2.5) p computes the minimum block length
* 2.6) p updates the datanodes, which have a valid generation stamp,
* with the new generation stamp and the minimum block length
* 2.7) p acknowledges the namenode the update results
* 2.8) Namenode updates the BlockInfo
* 2.9) Namenode removes f from the lease
* and removes the lease once all files have been removed
* 2.10) Namenode commit changes to edit log
*/
リースマネージャは以下のインターフェースを提供して外部に使用します./**
* Adds (or re-adds) the lease for the specified file.
*/
synchronized void addLease(String holder, String src)
/**
* Remove the lease for the specified holder and src
*/
synchronized void removeLease(String holder, String src)
レンタル契約は簡単に理解できます.誰がどのような権限を持っていますか?(時間制限があるだけです.)では、この関連関係を格納するために一番いいデータ構造はmapです.Lease Managerにレンタル契約を預けているのは以下のようないくつかのデータ構造があります.//
// Used for handling lock-leases
// Mapping: leaseHolder -> Lease
//
private SortedMap<String, Lease> leases
// Set of: Lease
private SortedSet<Lease> sortedLeases
//
// Map path names to leases. It is protected by the sortedLeases lock.
// The map stores pathnames in lexicographical order.
//
private SortedMap<String, Lease> sortedLeasesByPath
このうち、最初のSortedMapは主にwhoがwhich leaseを所有しています.例えば、Aクライアントは現在A 1にLという賃貸借契約を要求しています.Lという賃貸借契約の具体的な表現はリース契約leaseという類の説明を見ます.賃貸借契約類は主に以下のいくつかのフィールドで説明されています.private final String holder; //
private long lastUpdate; //
private final Collection<String> paths = new TreeSet<String>(); // , hdfs
それとも上の例を続けて言います.Lという契約が現在メンテナンスされているのはhdfsファイルtest_であると仮定します.temp 1_fileなら、SortedMapに保存されているデータはこのような構造です.{ "key" : "client_A_request_A1"
"value" : {
"holder":"client_A_request_A1",
"lastUpdate":"now()"
"paths":["test_temp1_file"]
}
}
二つ目のSortedSetは主に各leaseオブジェクトを格納することを目的としています.このSortedSetは賃貸借契約の期限切れの検査において、それらのリースの期限が切れるのが早いデータをできるだけ検出することができます.契約対象自体がComprableインターフェースを実現した後、賃貸借契約の更新時間と所有者を利用して比較します.例えば2つの賃貸借契約があり、Aの最終更新時間は111111です. Bの前回の更新時間は111112で、Bの状態はAより1つの時間単位が新しいので、AはBよりリース期限が近いので、ABは同時にSortedSetに保存した場合、AはBの上にあります(TreeSetは赤黒樹のTreeMapに基づいて実現します).第三のSortedMapは主に1つの管轄資源と賃貸借契約のマッピング関係を維持しています.temp 1_fileというhdfsファイルはleaseAという契約があります.これは主にnamenodeがあるデータブロックが現在あるかどうかを調べる時に使います.
賃貸借契約のadd操作はいつ行われますか?
1:loadFSEditLog
2:loadFSImage
3:appendFile
4:startFile(createFile)
これはdatanodeノードを分析する時に詳しく分析します.ここではまずソースを知っています.はい、これからはlease ManagerのMonitorタスクスレッドの機能を分析します.彼は主に期限切れのリースを検出してから対応する処理を行います.
有効期限を検出するための方策は、まずSortedSetから有効期限に近いデータ、つまり更新時間が早いデータを取り出して、これを使って最大レンタル期限と比較します.もし期限が切れたら以下の操作を行います.
1: hdfs ( )
2: ,
3: , hdfs ,
リース期間中に他の要求をどう処理するかは、ダタノイドノードで分析されますが、まだ分析が不十分です.