1. 程式人生 > 其它 >hive任務 處理小檔案合併的引數配置

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;