本地打包Har文件實(shí)現(xiàn)

HDFS需要為每個(gè)文件分片的副本維護(hù)元數(shù)據(jù),當(dāng)文件的體積過小,文件數(shù)目過多的情況下,會因元數(shù)據(jù)過多,給master節(jié)點(diǎn)帶來大量內(nèi)存開銷。然而將小文件存儲到hdfs的需求又常常有,hdfs本身也提供了一種解決方案,har打包。下文將會介紹這一方式的原理,并實(shí)現(xiàn)一個(gè)不使用mapreduce的本地打包程序。

1.HAR打包文件介紹

Har文件是一種HDFS可支持的打包方式,將小文件合并,并可以像普通hdfs文件一樣作為MapReduce輸入。

Har文件結(jié)構(gòu):是一個(gè)以”.har”結(jié)尾命名的目錄,其中有至少三個(gè)文件”_index”、”_masterindex”、”part-0”、……。其中”part-X”文件中直接拼接了原始文件內(nèi)容,無壓縮處理,每個(gè)map操作的節(jié)點(diǎn)生成一個(gè)”part-X”文件?!盻index”文件中存儲包內(nèi)目錄、文件的元數(shù)據(jù)信息,并按路徑j(luò)ava字符串hashCode()運(yùn)算的哈希值排序?!盻masterindex”記錄”_index”文件中每1000條信息的起止哈希值、在”_index”文件中起止位置。

Har文件的訪問:在使用Hadoop命令行工具時(shí),只有使用帶有har的schema文件路徑,就可以像普通hdfs文件一樣的使用。例如:./hadoopfs -cat

har:///pack1.har/Noname1.txt。

2.本地文件系統(tǒng)中打包Har文件實(shí)現(xiàn)

1、遍歷指定目錄下的所有目錄、文件,并將所有目錄、文件路徑j(luò)ava字符串hashCode()運(yùn)算的哈希值作為key,元數(shù)據(jù)作為value,存儲到一個(gè)TreeMap中。同時(shí)將文件內(nèi)容連接寫入同個(gè)文件”part-0”。

2、將排序的元數(shù)據(jù)信息,寫入”_index”文件,每1000條信息的起止哈希值、在”_index”文件中起止位置,記錄到”_masterindex”文件。

以上代碼,已經(jīng)沒有源碼了,請反編譯查看:http://pan.baidu.com/s/1geTiwKj

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容