(11条消息) 实时查询引擎
到目前为止,已经介绍了几个最主要的实时查询引擎,分别是:
在这几个实时查询引擎中,个人感觉最易用的应属Impala,因为它跟CDH集成在一起,无论在安装、管理、使用上都非常方便,且与HIVE天然集成,数据共享,兼容性好。而最灵活的应属Drill和Presto, Drill可以针对文件、目录、HIVE表作数据分析查询。Presto则有各种各样的连接器, 可扩展性非常高。
下面来对这几个组件进行一个简单的比较:
安装方面:最快速最简单的当属Impala,因为Impala与CDH集成在一起,不需要另外安装,可以直接通过WEB界面添加服务完成安装。而Apache Drill也非常快捷,简单的更改配置文件,复制到每台服务器上即可。最复杂的当属HAWQ了,更改了Greenplum的存储方式,但其它没有变化,安装过程就一样的步骤多而麻烦了,不过HAWQ也可以通过Ambari图形界面安装。
内存使用:大家都是基于内存运算来达到实时级别的。但当内存达到极限时的表现却各有不同。Drill会直接产生异常, Impala在有限的情况下(实际感受就没存在过)可以实现磁盘溢出运算,其它也是直接抛出异常。而Presto没有明确的表态,实际测试也没有产生过溢出异常。HAWQ跟Greenplum完全一样,可以在内存不出时,溢出到磁盘进行运算的。
SQL兼容性:作为对标准DML的支持,其实大家都差不多。不能执行DELETE,UPDATE,剩下就只有SELECT了。标准的GROUP, JOIN, LIMIT,HAVING, ORDER BY是必须支持的。余下的就看支持的扩展语法是否丰富,分析函数是否丰富,内置函数是否丰富了。而大家都是混大数据界的,分析函数那是多少都必须支持的。在以上三方面,最丰富的肯定当属HAWQ了,保留了Greenplum所有的功能,跟Oracle非常相似。其它几个也都支持了比较常用的一些,可以满足大部分情况使用。另外最值得一值的是, HAWQ还支持PL/java, PL/Perl,PL/pgSQL等过程语言。
SQL执行效率方面。下面通过一个简单的查询测试来看看吧:
Drill | Presto | Impala | HAWQ | |
---|---|---|---|---|
数据加载(15970428行) | 16.69s(INSERT SELECT方式) | 49s(COPY方式) | ||
求总记录数 | 48.71s,37.16s | 6s,1s | 1.14s,1.13s | 1.02s,1.07s |
按category汇总求最大/小 | 15.8s,18.6s | 9s,7s | 1.85s, 1.67s | 4.1s, 1.2s |
> 数据加载Drill,Presto直接使用Impala加载后的数据,不需要重复加载。且HAWQ与Impala的数据加载速率也没有可比性,执行方式完全不一样。
> 每一个查询测试都执行了两次
> 测试中总共有3个DataNode节点,但HAWQ只有2个Segment节点在运行。其它都是3个节点
> 从以上简单的测试结果来看, Impala与HAWQ的执行效率都是非常快且不相上下的。其次Presto的执行效率也还行,而Drill。。。
高可用性方面:最靠谱的当属Drill了,无主节点的设置,即使在战斗到只剩最后一个节点时,仍然可以继续使用。而其它三个组件都有弱点,Impala是Catalog,Statestore角色,Presto是兼用Discovery功能的Coordinator节点,HAWQ是Master主节点。虽然像HAWQ可以通过主备方式来避免,其它的也很少挂掉,且会自动重启。但这毕竟是它的软肋。
至此,实时查询引擎系列就暂告段落了,有遗误的地方请大家留言告知。