hive任務 處理小文件合並的參數配置


1.小文件產生

使用hive過程中經常會遇到小文件問題:

  1. 在執行插入數據操作過程中,可能會產生小文件(map輸入);
  2. map-only作業,可能會產生小文件(map輸出);
  3. map-reduce作業,每個reduce輸出一個文件,可能產生小文件(reduce輸出)。

2.小文件影響

  • hdfs存儲:存儲過多小文件會產生大量元數據,會增加NameNode占有的空間,影響集群健康和拓展
  • hive任務:默認情況下,hive輸入端的處理每個小文件會啟用一個map,一個map啟用一個JVM去執行,啟用map和JVM過程資源占用比例相對提高,影響性能。

3.小文件處理參數設置

3.1輸入端:如果執行任務前,存在小文件,在執行map前進行小文件合並,通過設置參數

設置:每個Map最大輸入大小,這個值決定了合並后文件的數量;

set mapred.max.split.size=256000000;

設置:一個節點上split的至少的大小,這個值決定了多個DataNode上的文件是否需要合並;

set mapred.min.split.size.per.node=100000000;

設置:一個交換機下split的至少的大小,這個值決定了多個交換機上的文件是否需要合並;

set mapred.min.split.size.per.rack=100000000;

設置:輸入端map合並小文件。

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

3.2輸出端:通過輸出端小文件合並,減少產生的小文件數量

設置:啟用小文件合並 - Map-Only作業,默認true;

set hive.merge.mapfiles=true;

設置:啟用小文件合並 - Map-Reduce作業,默認false;

set hive.merge.mapredfiles=true;

設置:合並后所需每個文件的大小,默認256MB;這個數值是個約數,合並后文件大小會有上下浮動;

hive.merge.size.per.task=268534456;

設置:小文件平均大小合並閾值,默認16MB;

set hive.merge.smallfiles.avgsize=16777216;

設置:啟用小文件合並 - Spark 作業,默認false;

set hive.merge.sparkfiles=true;

設置:啟用小文件合並 - Tez 作業,默認false;

set hive.merge.tezfiles=true;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM