您好,登錄后才能下訂單哦!
影響:
1、文件的元數據存儲在namenode中,每個文件的元數據都差不多大,小文件過多會極大的占用namonode
的內存,制約集群的擴展。(主要影響)
2、在對小文件進行處理的時候,一個小文件對應一個maptask,一個maptask會起一個jvm進程,進程的
開啟銷毀會嚴重性能。(jvm復用)
產生場景:
1、實時處理:比如我們使用 Spark Streaming 從外部數據源接收數據,然后經過 ETL 處理之后存儲
到 HDFS 中。這種情況下在每個 Job 中會產生大量的小文件。
2、hive中對表執行insert操作,每次插入都在表目錄下形成一個小文件。
創建表結構相同的表,create table t_new as select * from t_old;
老表根據實際情況可以刪除就刪除。
3、hive中執行簡單過濾操作,符合過濾條件的數據存在很多block塊中,只走map,map輸出有很多小文
件。
開啟map端的聚合。
4、mapreduce正常執行產生小文件。
將mapreduce輸出不直接寫hdfs,而是寫入到hbase中。
設置map端文件合并及reduce端文件合并。
5、輸入數據文件為小文件。
小文件合并后再計算。
CombineFileInputFormat: 它是一種新的inputformat,用于將多個文件合并成一個單獨的
split,另外,它會考慮數據的存儲位置。
通用處理方案:
1、Hadoop Archive
Hadoop Archive或者HAR,是一個高效地將小文件放入HDFS塊中的文件存檔工具,它能夠將多個小文件
打包成一個HAR文件,這樣在減少namenode內存使用的同時,仍然允許對文件進行透明的訪問。
2、Sequence file
sequence file由一系列的二進制key/value組成,如果為key小文件名,value為文件內容,則可以將
大批小文件合并成一個大文件。
底層處理方案:
HDFS-8998:
DataNode劃分小文件區,專門存儲小文件。一個block塊滿了開始使用下一個block。
HDFS-8286:
將元數據從namenode從內存移到第三方k-v存儲系統中。
HDFS-7240:
Apache Hadoop Ozone,hadoop子項目,為擴展hdfs而生。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。