测试环境如下:
- Impala Daemon 内存限制mem_limit为1GB
- Presto的config.properties 配置文件中task.max-memory=1GB。
另外,由于内存有限,每次测试时Impala和Presto都没有同时开启。
总体测试表明,Presto的性能比Impala稍逊,在数据量巨大、查询比较复杂时,Impala和Presto的性能表现都不怎么样,比Hive也就快了2、3倍的样子。
由于生产环境下,除了性能之外,还有并发度、稳定性、适应性等多种因素需要考虑,所以以上测试结果仅供参考。
以下是具体测试结果:
一、1百万条记录,HDFS文件大小600MB时的查询速度
在表记录数不多时,Impala和Presto都表现出比较好的查询性能,其中Impala的查询效率大约为Hive的9~50倍,Presto的查询效率大约为Hive的8~??倍(由于Presto的查询时间只精确到秒,在最简单的select * from xxx limit 5的查询中,显示时间为0秒)。
二、1千万条记录,HDFS文件大小6GB时的查询速度
在表记录数比较多时,Impala的查询效率大约为Hive的7~10倍,Presto的查询效率大约为Hive的4~30倍。
三、1亿条记录,HDFS文件大小60GB时的查询速度
在表记录数特别多时,Impala的查询效率大约为Hive的3~60倍,Presto的查询效率大约为Hive的2~180倍。
Data Warehouse For Ever原创文章,转载请注明出处
我想问一下,
“2~180倍”是怎么得出的?怎么差距这么大?
@muxueqz
不同的查询语句造成的。select * from XXX limit n这种查询,hive和presto的执行时间差距太大了,当数据量达到60GB的时候,hive是要map扫描全部文件的,而presto执行类似语句只需要1秒。这种情况下时间就是180倍。
请问配置presto需不需要单独安装hive和Hadoop CDH4啊?
我没装,总是提示连接hive metastore失败,是怎么回事啊?
要的。presto是基于hive和hdfs的查询引擎。
“要的。presto是基于hive和hdfs的查询引擎。”这就有点恶心了,为什么还有依赖hive?
因为Presto的定位不是替代hive,只是hive的一个补充,从功能上看,Presto没有建表、插入数据等功能,所以,也没办法替代hive。
大神再测一下Apache Tajo的性能呗
谢谢提醒,我对Tajo不是很了解,看起来是一个替代Hive的东西,不过它社区活跃度实在太低了,我都怀疑它是否能坚持下去。现在支持的功能也太有限,没啥可测的,等下一版出来再说吧。
如果推荐新上项目,是推荐alibaba的mdrill,还是presto或者Impala?
mdrill是用于adhoc查询的,不能直接用hdfs的数据进行查询,要build索引,并且还有不少的二次开发工作,比较适用于对查询响应速度有较高要求的场景;如果是一般的场景,推荐使用Impala。
博主,你这是select * 操作还是?
具体查询sql贴一些比较合适
select * from XXX limit n 这种查询也是瞬间完成的,怎么会出现博主这种情况?hive的select * 操作不会执行map/reduce的