hive 小文件的合併 hive.merge.mapredfiles

原由:node

最近倉庫裏面新建了一張分區表,數據量大約是12億行,分區比較多,從2008年7月開始 一天一個分區。apache

配置了一個任務oop

對這個表進行group by 的時候 發現啓動了2800多個maps .spa

執行的時間也高大10分鐘。orm

而後我在hdfs文件裏面看到 這個表的每一個分區裏面都有20多個小文件,每一個文件都不大 300KB--1MBhadoop

 

以前的hive的參數:
hive.merge.mapfiles=true
hive.merge.mapredfiles=false
hive.merge.rcfile.block.level=true
hive.merge.size.per.task=256000000
hive.merge.smallfiles.avgsize=16000000input

hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormatit

mapred.max.split.size=256000000
mapred.min.split.size=1
mapred.min.split.size.per.node=1
mapred.min.split.size.per.rack=1io

 

hive.merge.mapredfiles 這個指的是 在Map-Reduce的任務結束時合併小文件form

解決辦法:

1.修改參數hive.merge.mapredfiles=true

2.經過map_reduece的辦法生成一張新的表 此時生成的文件變成了每一個分區一個文件

 

再次執行group by 發現效率獲得了大大的提高。

 

小結:

正確處理hive小文件 是 控制map數的一個重要環節

處理的很差 會大大影響任務的執行效率

相關文章
相關標籤/搜索