Hadoop存儲(chǔ)成本管理的具體方法
Hadoop存儲(chǔ)成本管理的具體方法
|0x00 數(shù)據(jù)壓縮
數(shù)據(jù)壓縮是在以Hadoop為主要構(gòu)架的數(shù)據(jù)倉(cāng)庫(kù)中常見的數(shù)據(jù)處理方式,一方面適當(dāng)?shù)膲嚎s數(shù)據(jù),能夠有效的提高M(jìn)R計(jì)算任務(wù)時(shí)數(shù)據(jù)傳輸?shù)男?/strong>,另一方面由于HDFS自身的三備份策略,導(dǎo)致數(shù)據(jù)存在比較大的冗余,通過(guò)壓縮能夠降低存儲(chǔ)的成本。
在進(jìn)行數(shù)據(jù)壓縮前,需要考慮如下幾方面的事情:
所采用的的壓縮算法是否支持文件的分片讀取,是否支持MR的并行讀?。?/p>
壓縮算法的I/O性能,是否能夠提高磁盤的I/O讀取效率;
壓縮算法的讀取性能,例如RCFile的讀取速度明顯快于寫入速度,更適合頻繁查詢的數(shù)據(jù)場(chǎng)景;
算法是否具備共同性,HDFS主要以Writable為序列化格式,只支持Java、Avro、Thtift等格式。
目前Hadoop主要支持以下的數(shù)據(jù)類型:
1. SequenceFile:SequenceFile是基于文件的以二進(jìn)制鍵值對(duì)形式存儲(chǔ)的數(shù)據(jù);
序列化格式:主要包括Facebook開發(fā)的Thrift框架、Hadoop創(chuàng)始人開發(fā)的Avro框架;
列式存儲(chǔ):以Google的Parquet格式和RCFile為主,彌補(bǔ)了HDFS系統(tǒng)查詢速度較低的缺陷,通過(guò)只返回相關(guān)的查詢列,以減少I/O消耗并提升查詢性能。
目前Hadoop中常見的壓縮算法有:
Snappy:Google開發(fā)的高速壓縮算法,不支持分片,需要與SequenceFile等容器一起使用;
LZO:最常見的壓縮算法,壓縮速率與Snappy相近,支持分片,但需要建立索引;
Gzip:Linux自帶的壓縮算法,壓縮速率是Snappy的2.5倍左右,但寫入相對(duì)較慢,同樣不支持分片;
4. ?bzip2:壓縮性能更優(yōu)秀,需要花費(fèi)較長(zhǎng)的時(shí)間讀取,因?yàn)?strong>支持?jǐn)?shù)據(jù)分片,因而也經(jīng)常使用。
以上四種壓縮算法的對(duì)比如下:

|0x01 數(shù)據(jù)的生命周期管理
數(shù)據(jù)倉(cāng)庫(kù)的存儲(chǔ)成本管理主要基于元數(shù)據(jù)平臺(tái)負(fù)責(zé)的生命周期管理,從數(shù)據(jù)的使用價(jià)值、查詢性能、更新頻率等方向綜合考慮,以最大程度上減少數(shù)據(jù)的存儲(chǔ)成本。目前常見的數(shù)據(jù)生命周期管理策略有如下幾種:
周期性刪除:絕大部分的數(shù)據(jù)都是以數(shù)據(jù)表的形式進(jìn)行存儲(chǔ),并且通過(guò)日期分區(qū)的方式加以區(qū)分,因而針對(duì)一些日期過(guò)早的存儲(chǔ)分區(qū),例如存儲(chǔ)時(shí)間超過(guò)一年,如果已經(jīng)沒(méi)有特別大的使用價(jià)值,建議設(shè)定定時(shí)刪除腳本以節(jié)約存儲(chǔ)效率;
徹底刪除:對(duì)于一些因?yàn)?strong>ETL過(guò)程或者是臨時(shí)查詢等形式的數(shù)據(jù)表,可以統(tǒng)一建立在Tmp或Test分區(qū)下,定期清空分區(qū)數(shù)據(jù);
冷熱數(shù)據(jù)區(qū)分:冷數(shù)據(jù)是指時(shí)間較早且不常使用的數(shù)據(jù),熱數(shù)據(jù)是指經(jīng)常查詢和使用的數(shù)據(jù),對(duì)于一些重要且不常使用的數(shù)據(jù),建議通過(guò)標(biāo)記冷分區(qū)的方式,采用極限壓縮算法進(jìn)行存儲(chǔ),盡管再次計(jì)算需要花費(fèi)比較長(zhǎng)的時(shí)間,但整體看下來(lái)依舊比較劃算;
永久保留:盡管數(shù)據(jù)是無(wú)限增長(zhǎng)的,但高業(yè)務(wù)價(jià)值的數(shù)據(jù)仍然需要永久保留,假設(shè)數(shù)據(jù)量非常大,可以設(shè)置冷熱數(shù)據(jù)分區(qū)的方式,將不常用的分區(qū)數(shù)據(jù)用極限壓縮算法進(jìn)行存儲(chǔ);
增量表合并全量表:對(duì)于特定業(yè)務(wù)的數(shù)據(jù),可以將保存每天新增數(shù)據(jù)的增量表,與歷史累積的全量表進(jìn)行合并,以節(jié)省存儲(chǔ)空間。
|0x02 數(shù)據(jù)存儲(chǔ)專項(xiàng)優(yōu)化
設(shè)定數(shù)據(jù)評(píng)價(jià)等級(jí):一般數(shù)據(jù)可以通過(guò)業(yè)務(wù)重要程度及計(jì)算關(guān)聯(lián)范圍兩個(gè)維度,設(shè)定多個(gè)評(píng)價(jià)等級(jí),例如最高等級(jí)為業(yè)務(wù)重要及關(guān)聯(lián)廣泛,最低等級(jí)為業(yè)務(wù)不重要且無(wú)關(guān)聯(lián);
數(shù)據(jù)表類型劃分:以阿里系的數(shù)據(jù)倉(cāng)庫(kù)體系為例,數(shù)據(jù)表可以劃分為事件型流水表(增量表)、事件型鏡像表(增量表)、維表、Merge全量表、ETL臨時(shí)表、TT臨時(shí)數(shù)據(jù)及普通全量表,根據(jù)表類型的不同,配合數(shù)據(jù)評(píng)價(jià)等級(jí),就能夠設(shè)定不同的歷史數(shù)據(jù)處理策略;
元數(shù)據(jù)平臺(tái)經(jīng)常性掃描:包括標(biāo)記沒(méi)有管理員的表、空表、最近長(zhǎng)時(shí)間未訪問(wèn)表、數(shù)據(jù)無(wú)更新表、數(shù)據(jù)無(wú)配屬任務(wù)表、數(shù)據(jù)量過(guò)大表等,根據(jù)系統(tǒng)自動(dòng)掃描的結(jié)果,通知對(duì)應(yīng)的數(shù)據(jù)負(fù)責(zé)人,提高數(shù)據(jù)管理的效率,同時(shí),元數(shù)據(jù)平臺(tái)根據(jù)平臺(tái)整理情況,可以定期生成存儲(chǔ)成本統(tǒng)計(jì)圖,提醒上級(jí)Boss目前的成本管理情況;
提倡個(gè)人數(shù)據(jù)管理:在數(shù)據(jù)地圖等平臺(tái)上,開發(fā)及產(chǎn)品創(chuàng)建或使用數(shù)據(jù)表,都需要申請(qǐng)對(duì)應(yīng)的權(quán)限,并根據(jù)自己創(chuàng)建的表,來(lái)自動(dòng)計(jì)算對(duì)應(yīng)數(shù)據(jù)的存儲(chǔ)成本,如果不是數(shù)據(jù)開發(fā)人員的,當(dāng)個(gè)人名下的數(shù)據(jù)存儲(chǔ)成本過(guò)高時(shí),需要及時(shí)的提醒刪除,能夠從人員管理的層面上極大的節(jié)省存儲(chǔ)成本。
|0xFF?尾聲
--end--

