我是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秒)。我知道我知道,连接是在字符串字段上,而不是在整数上,但是数据集并不大(CCA3300和100000条记录)。我尝试了关于这个SQL的提示,但没有更快的结果。MS SQL Server上的相同查询持续1秒。此外,表中的简单计数(*)持续7-8秒,这是令人震惊的(表中有3300条记录)。我真的不知道问题出在哪里?有什么想法,还是我曲解了Hadoop?
发布于 2013-05-03 22:46:12
Yes..you误解了Hadoop。Hadoop和Hive都不是实时的。它们最适合于离线、批处理之类的东西。它们根本不是RDBMS的替代品。虽然你可以做一些微调,但“绝对实时”是不可能的。当你运行一个hive查询时,有很多事情在幕后发生,我想你不是没有意识到。首先,你的Hive查询被转换成相应的MR作业,然后是一些其他的事情,如拆分创建,记录生成,映射器生成等。如果你有实时需求,我永远不会建议Hadoop(或Hive)。
你可能想看看Impala,以满足你的实时需求。
发布于 2013-05-03 23:11:03
Hive不是用于实时作业的合适工具,但是如果您希望利用Hadoop基础设施进行实时或快速数据访问,那么可以看看HBase。它的增值都是关于快速访问。不知道您为什么选择Hadoop作为您的解决方案,但Hbase位于HDFS之上,这是一些人喜欢的,因为HDFS提供了固有的冗余(您只需将文件复制到HDFS上一次,它就会自动复制),这可能是您研究Hadoop的原因之一。
有关更多信息,请访问:read this question
发布于 2013-05-03 21:37:31
我不确定你是不是新手,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。
https://stackoverflow.com/questions/16359337
复制相似问题