10

我是 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;

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

4

4 回答 4

18

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

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

于 2013-05-03T14:46:12.153 回答
4

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

欲了解更多信息:阅读这个问题

于 2013-05-03T15:11:02.937 回答
1

我不确定您对 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。

于 2013-05-03T13:37:31.183 回答
1

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

于 2014-11-05T00:27:56.813 回答