我在hive中有一个分区表,每个分区将有630个gzip压缩文件,每个文件的平均大小为100kb。如果我使用配置单元查询这些文件,它将生成正好630个映射器,即一个文件的一个映射器。
现在作为实验我尝试用猪和猪实际上组合文件并生成只有2个映射器和操作读取这些文件比蜂巢快得多。
为什么猪和蜂巢的执行风格有差异?在hive中,我们可以类似地组合小文件来生成较少的映射器吗?
答案 0 :(得分:2)
您需要指定要使用CombineHiveInputFormat
:
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
您还应将最小分割尺寸设置为更高:
set mapred.min.split.size=100000000;
作为旁注,CombineHiveInputFormat是EMR上的默认Hive输入格式,正是出于这个原因(许多小文件),请参阅How Amazon EMR Hive Differs from Apache Hive。
Pig执行组合,因为默认情况下处于启用状态,请参阅Combine Small Input Files:
pig.splitCombination
- 打开或关闭拆分文件(默认设置为“true”)。