Hadoop 垃圾回收機(jī)制原理及其源碼分析

一软免、兩個(gè)主要的配置參數(shù):

fs.trash.interval

默認(rèn)值為:0(代表刪除的數(shù)據(jù)不進(jìn)入垃圾桶流礁,直接刪除)

單位:分鐘

描述:垃圾數(shù)據(jù)保存的時(shí)間

fs.trash.checkpoint.interval

默認(rèn)值為:0

單位:分鐘

描述:多久進(jìn)行一次垃圾清理和創(chuàng)建檢查點(diǎn)的檢測茸歧,默認(rèn)值為0,此時(shí)如果設(shè)置了 fs.trash.interval,則該值就會和 fs.trash.interval 的值保持一致,另外該值只能小于等于 fs.trash.interval 的值。

二、原理介紹:

NameNode在啟動的時(shí)候糠排,會創(chuàng)建一個(gè)專門用于垃圾回收的守護(hù)線程,該線程會根據(jù)參數(shù)fs.trash.checkpoint.interval 對應(yīng)的值周期性的從睡眠中蘇醒過來超升,執(zhí)行兩個(gè)主要的操作:

1)先執(zhí)行垃圾清理操作入宦,清理的原理是如下圖所示的目錄上面的數(shù)字代表的是垃圾檢查點(diǎn)創(chuàng)建的時(shí)間(yyMMddHHmmss),拿當(dāng)前時(shí)間減去該時(shí)間室琢,如果大于參數(shù)fs.trash.interval 設(shè)置的時(shí)間乾闰,則將該檢查點(diǎn)的數(shù)據(jù)遞歸的清理掉(其中Current目錄會被過濾掉),否者不操作盈滴。

2)使用當(dāng)前的時(shí)間將Current目錄重命名成日期目錄涯肩,作為之前一個(gè)fs.trash.checkpoint.interval 周期的數(shù)據(jù)的檢查點(diǎn)。

三、源碼分析:

1.在NameNode源碼中有如下代碼病苗,代表著啟動垃圾回收機(jī)制

? ? @Override

? ? public void startActiveServices() throws IOException {

? ? ? try {

? ? ? ? namesystem.startActiveServices();

????????startTrashEmptier(conf);

? ? ? } catch (Throwable t) {

? ? ? ? doImmediateShutdown(t);

? ? ? }

? ? }

2.下面是啟動垃圾排空方法的實(shí)現(xiàn)疗垛,

可以看出其創(chuàng)建了一個(gè)守護(hù)線程用于垃圾的清理,通過創(chuàng)建Trash對象铅乡,可以獲取到Emptier對象

3.可以看出Trash類繼承與Configured继谚,主要用于保存配置信息和垃圾策略對象。

4.從中可以看到垃圾都被放到了每個(gè)用戶的目錄下阵幸。

5.TrashPolicy類中的getInstance方法花履,

使用反射創(chuàng)建TrashPolicy對象,從源碼中也可以看到挚赊,我們也可以自己實(shí)現(xiàn)自己的垃圾回收策略诡壁,并通過在配置文件中使用key:fs.trash.classname指定為自己的實(shí)現(xiàn)的類,來使用自己的垃圾回收策略荠割。系統(tǒng)默認(rèn)實(shí)現(xiàn)的垃圾回收策略類是:TrashPolicyDefault

6.之后調(diào)用TrashPolicyDefault的初始化方法妹卿,

其中最開始處的兩個(gè)參數(shù)就在此時(shí)獲取其對應(yīng)的值的,并且會創(chuàng)建一些常量用于回收時(shí)進(jìn)行路徑和時(shí)間的判斷的蔑鹦。

7.創(chuàng)建完TrashPolicyDefault之后夺克,NameNode就會調(diào)用getEmptier方法獲取一個(gè)Emptier對象,用于垃圾的真正的清理嚎朽。

Emptier類是類TrashPolicyDefault的內(nèi)部類铺纽,因此,該類能訪問類TrashPolicyDefault中的很多成員變量哟忍,另外類Emptier是Runnable的子類狡门,也是垃圾回收線程真正執(zhí)行的類,從類Emptier的構(gòu)造方法中可以看出開頭介紹的參數(shù) fs.trash.checkpoint.interval 的值必須要小于等于 fs.trash.interval 的值锅很。

8.之后NameNode會調(diào)用this.emptier.start(); (在步驟2中可以看到)方法將線程啟動其馏,之后就開始執(zhí)行類Emptier中的run方法:

從中可以看出,當(dāng)NameNode程序啟動后爆安,其會根據(jù)排空間隔時(shí)間讓線程進(jìn)行休眠叛复,當(dāng)線程蘇醒之后,就開始執(zhí)行刪除操作和創(chuàng)建檢查點(diǎn)操作扔仓。

9.垃圾刪除操作真正執(zhí)行的方法致扯,刪除策略:

1)Current目錄下的垃圾不刪除。

2)是日期目錄的当辐,將日期目錄轉(zhuǎn)換成對應(yīng)的時(shí)間的毫秒值,之后讓當(dāng)前時(shí)間減去上面的值鲤看,判斷是否超過了配置的刪除時(shí)間缘揪,如果超過,就執(zhí)行遞歸的刪除操作。

10. 創(chuàng)建檢查點(diǎn)的方法找筝,

即創(chuàng)建上面刪除事需要使用的日期目錄方法蹈垢,該方法將當(dāng)前時(shí)間轉(zhuǎn)換成 yyMMddHHmmss 格式日期,并創(chuàng)建對應(yīng)的Path對象袖裕,之后使用rename方法將Current目錄重命名成上面的日期目錄曹抬,用于下次執(zhí)行時(shí)判斷是否需要?jiǎng)h除垃圾數(shù)據(jù)的依據(jù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末急鳄,一起剝皮案震驚了整個(gè)濱河市谤民,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疾宏,老刑警劉巖张足,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坎藐,居然都是意外死亡为牍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門岩馍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碉咆,“玉大人,你說我怎么就攤上這事蛀恩∫咄” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵赦肋,是天一觀的道長块攒。 經(jīng)常有香客問我,道長佃乘,這世上最難降的妖魔是什么囱井? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮趣避,結(jié)果婚禮上庞呕,老公的妹妹穿的比我還像新娘。我一直安慰自己程帕,他們只是感情好住练,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愁拭,像睡著了一般讲逛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岭埠,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天盏混,我揣著相機(jī)與錄音蔚鸥,去河邊找鬼。 笑死许赃,一個(gè)胖子當(dāng)著我的面吹牛止喷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播混聊,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼弹谁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了句喜?” 一聲冷哼從身側(cè)響起预愤,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎藤滥,沒想到半個(gè)月后鳖粟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拙绊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年向图,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片标沪。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榄攀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出金句,到底是詐尸還是另有隱情檩赢,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布违寞,位于F島的核電站贞瞒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏趁曼。R本人自食惡果不足惜军浆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挡闰。 院中可真熱鬧乒融,春花似錦、人聲如沸摄悯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奢驯。三九已至申钩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘪阁,已是汗流浹背典蜕。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工断盛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人愉舔。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像伙菜,于是被迫代替她去往敵國和親轩缤。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理贩绕,服務(wù)發(fā)現(xiàn)火的,斷路器,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 微博微信上“改良版”世界名畫層出不窮淑倾,這些年馏鹤,人們好像對惡搞名畫這件事樂此不彼。 格調(diào)彩繪小編時(shí)常在想娇哆,人家好好的...
    格調(diào)彩繪閱讀 981評論 0 1
  • 今天是更新的第二天湃累,我想說的是關(guān)于我是怎么對待工作的? 工作對于每個(gè)人都是很重要的碍讨,是謀生的手段治力,獲得物質(zhì)的途徑,...
    風(fēng)雨里閱讀 270評論 0 0