Hive查询花费大量时间来启动map-reduce作业

时间:2013-11-19 08:52:55

标签: apache hadoop mapreduce hive adhoc-queries

我们正在使用Hive进行Ad-hoc查询,并且有一个Hive表,该表在两个字段(date,id)上分区。

现在,对于每个日期,大约有1400个ID,所以在一天内就会添加许多分区。实际数据存在于s3中。现在我们面临的问题是假设我们从表中进行了一个月select count(*)然后需要相当长的时间(大约1小时52分钟)才能启动地图缩减工作。

当我在Hive详细模式下运行查询时,我可以看到它这次花费实际上决定了要生成多少个映射器(计算拆分)。是否有任何方法可以减少启动map-reduce作业的延迟时间?

这是在此延迟时间内记录的日志消息之一:

13/11/19 07:11:06 INFO mapred.FileInputFormat: Total input paths to process : 1
13/11/19 07:11:06 WARN httpclient.RestS3Service: Response '/Analyze%2F2013%2F10%2F03%2F465' - Unexpected response code 404, expected 200 

1 个答案:

答案 0 :(得分:1)

这可能是因为对于过度分区的表,查询计划阶段需要很长时间。更糟糕的是,查询计划阶段本身可能需要比查询执行阶段更长的时间。

解决此问题的一种方法是调整 Metastore 。但更好的解决方案是设计一个有效的模式并摆脱不必要的分区。相信我,你真的不想要太多的小分区。

作为替代方案,您还可以在发出查询之前尝试将 hive.input.format 设置为 org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

HTH