我是 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?
最佳答案
是的..您误解了 Hadoop。 Hadoop 和 Hive 也不适合实时的东西。它们最适合离线、批处理之类的东西。它们根本不是 RDBMS 的替代品。虽然你可以做一些微调,但“绝对实时”是不可能的。当您运行配置单元查询时,后台会发生很多事情,我认为您并非没有意识到。首先,您的 Hive 查询会转换为相应的 MR 作业,然后是其他一些事情,例如拆分创建、记录生成、映射器生成等。如果您有实时需求,我绝不会建议使用 Hadoop(或 Hive)。
您可能想看看 Impala满足您的实时需求。
关于performance - Hadoop Hive 慢查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16359337/