全部課程
發(fā)布時(shí)間: 2023-03-31 16:06:27
Hadoop是為處理大型文件所設(shè)計(jì)的,在小文件的處理上效率較低,然而在實(shí)際生產(chǎn)環(huán)境中,需要Hadoop處理的數(shù)據(jù)往往存放在海量小文件中。因此,高效處理小文件對(duì)于提高Hadoop的性能至關(guān)重要。這里的小文件是指小于 HDFS中一個(gè)塊(Block)大小的文件。
Hadoop處理小文件有兩種方法:壓縮小文件和創(chuàng)建序列化文件。
Hadoop在存儲(chǔ)海量小文件時(shí),需要頻繁訪問(wèn)各節(jié)點(diǎn),非常耗費(fèi)資源。如果某個(gè)節(jié)點(diǎn)上存放1000萬(wàn)個(gè)600Byte大小的文件,那么該節(jié)點(diǎn)上至少需要提供4 GB的內(nèi)存。為了節(jié)省資源,海量小文件在存儲(chǔ)到HDFS之前,需要進(jìn)行壓縮。
1.Hadoop壓縮格式
Hadoop進(jìn)行文件壓縮的作用:減少存儲(chǔ)空間占用,降低網(wǎng)絡(luò)負(fù)載。這兩點(diǎn)對(duì)于Hadoop存儲(chǔ)和傳輸海量數(shù)據(jù)非常重要。
2.編解碼器
編解碼器(Codec)是指用于壓縮和解壓縮的設(shè)備或計(jì)算機(jī)程序。Hadoop中的編壓縮解碼器主要是通過(guò)Hadoop的一些類來(lái)實(shí)現(xiàn)的
創(chuàng)建序列文件主要是指創(chuàng)建SequenceFile(順序文件)和MapFile(映射文件)。
1.SequenceFile
(1)SequenceFile簡(jiǎn)介。
SequenceFile是存儲(chǔ)二進(jìn)制鍵值(Key-Value)對(duì)的持久數(shù)據(jù)結(jié)構(gòu)。通過(guò)SequenceFile可以將若干小文件合并成一個(gè)大的文件進(jìn)行序列化操作,實(shí)現(xiàn)文件的高效存儲(chǔ)和處理。
(2)SequenceFile的內(nèi)部結(jié)構(gòu)
SequenceFile由一個(gè)文件頭(Header)和隨后的一條或多條記錄(Record)組成(如圖所示)。Header的前三個(gè)字節(jié)SEQ(順序文件代碼),隨后的一個(gè)字節(jié)是SequenceFile的版本號(hào)。Header還包括Key類的名稱、Value類的名稱、壓縮細(xì)節(jié)、Metadata(元數(shù)據(jù))、Sync Marker(同步標(biāo)識(shí))等。Sync Marker的作用在于可以讀取SequenceFile任意位置的數(shù)據(jù)。
記錄有無(wú)壓縮、記錄壓縮、塊壓縮三種壓縮形式,默認(rèn)為無(wú)壓縮。
① 當(dāng)采用無(wú)壓縮(No Compress)時(shí),每條記錄由記錄長(zhǎng)度、鍵長(zhǎng)度、鍵、值組成,將鍵與值序列化寫(xiě)入SequenceFile。
② 當(dāng)采用記錄壓縮(Record Compress)時(shí),只壓縮值,不壓縮鍵,其他方面與無(wú)壓縮類似。
③ 塊壓縮(Block Compress)利用記錄間的相似性進(jìn)行壓縮,一次性壓縮多條記錄,比單條記錄的壓縮方法壓縮效率更高。
當(dāng)采用塊壓縮時(shí),多條記錄被壓縮成默認(rèn)1MB的數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊之前插入同步標(biāo)識(shí)。數(shù)據(jù)塊由表示數(shù)據(jù)塊字節(jié)數(shù)的字段和壓縮字段組成,其中,壓縮字段包括鍵長(zhǎng)度、鍵、值長(zhǎng)度、值。
上一篇: MyBatis緩存機(jī)制介紹
下一篇: 無(wú)服務(wù)器是什么意思