1

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

现在对于每个日期,大约有 1400 个 id,因此在一天内大约添加了许多分区。实际数据位于 s3 中。现在我们面临的问题是假设我们select count(*)从表中执行一个月,然后启动 map reduce 作业需要相当长的时间(大约: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 
4

1 回答 1

1

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

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

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

高温高压

于 2013-11-20T22:41:46.077 回答