Hadoop Hive 慢查询

Posted

技术标签:

【中文标题】Hadoop Hive 慢查询【英文标题】:Hadoop Hive slow queries 【发布时间】:2013-05-03 12:49:23 【问题描述】:

我是 Hadoop Hive 的新手,我正在开发一个报告解决方案。问题是查询性能真的很慢(hive 0.10,hbase 0.94,hadoop 1.1.1)。查询之一是:

select a.*, b.country, b.city from p_country_town_hotel b 
    inner join p_hotel_rev_agg_period a  on
    (a.key.hotel = b.hotel) where b.hotel = 'AdriaPraha' and a.min_date < '20130701'
    order by a.min_date desc  
    limit 10;

这需要相当长的时间(50 秒)。我知道我知道,连接是在字符串字段上而不是在整数上,但数据集不大(cca 3300 和 100000 条记录)。我尝试了有关此 SQL 的提示,但结果并没有更快。 MS SQL Server 上的相同查询持续 1 秒。此外,表中的简单计数(*)持续 7-8 秒,令人震惊(表有 3300 条记录)。我真的不知道是什么问题?有什么想法还是我误解了 Hadoop?

【问题讨论】:

【参考方案1】:

是的..您误解了 Hadoop。 Hadoop 和 Hive 也不适用于实时的东西。它们最适合离线、批处理之类的东西。它们根本不是 RDBMS 的替代品。尽管您可以进行一些微调,但“绝对实时”是不可能的。当您运行配置单元查询时,会发生很多事情,我认为您不会不知道。首先,您的 Hive 查询被转换为相应的 MR 作业,然后是其他一些事情,例如拆分创建、记录生成、映射器生成等。如果您有实时需求,我绝不会建议 Hadoop(或 Hive)。

您可能想查看Impala 以满足您的实时需求。

【讨论】:

不要使用 impala 来分析大数据。检查this。即使是当前版本(0.15)也比本博客中使用的要快得多。检查this blog。【参考方案2】:

Hive 不是实时作业的合适工具,但如果您想利用 Hadoop 基础架构进行实时或快速数据访问,请查看HBase。它的增值之处在于快速访问。不知道为什么要为您的解决方案选择 Hadoop,但 Hbase 位于 HDFS 之上,有些人喜欢这是因为 HDFS 提供的固有冗余(您将文件复制一次并自动复制)这可能是其中之一您正在研究 Hadoop 的原因。

欲了解更多信息:read this question

【讨论】:

首先,谢谢你们帮助我:)。目前这是一个概念证明,所以我们有少量数据。但在现实生活中,我们将拥有数千万行,这就是我们选择试用 Hadoop Hive 的原因。而且它是免费的:)。出于报告目的,我需要快速报告(理想情况下是几秒钟),所以我想使用一些快速的东西(我会看看这个 Impala)。这就是为什么我对 Hadoop Hive 的速度感到惊讶的原因,因为我预计它必须很快,因为它是为大数据设计的......【参考方案3】:

我不确定您对 hadoop 有多新。Hive 不会以交互速度为您提供结果表有多小。如果您已经知道这一点并尝试调整查询, 你可以试试下面:

select a.*, b.country, b.city from
 (select * from p_country_town_hotel where hotel= 'AdriaPraha') b 
 inner join 
 (select * from p_hotel_rev_agg_period where min_date < '20130701') a  
 on
 a.key.hotel = b.hotel
 order by a.min_date desc  
 limit 10;

如果您知道其中一张表足够小以适合内存,您可以尝试 map side join。

【讨论】:

【参考方案4】:

使用http://phoenix.apache.org/ 进行这样的实时查询

【讨论】:

以上是关于Hadoop Hive 慢查询的主要内容,如果未能解决你的问题,请参考以下文章

Hive 连接查询非常慢

Sqoop Oracle 导出非常慢

hive的空格怎么查询

hive框架原理

MySQL删除千万级数据量导致的慢查询优化

hive查询为啥在yarn上看不到