李智慧
上周Cloudera发布其实时查询开源项目Impala 0.1beta版,部署了一个4台机器的集群,对比测试了下Hive和Impala,Impala性能确实有很大改善,但是测试过程中遭遇各种BUG、各种crash,当前版本仅仅是一个toy。
测试数据
https://github.com/intel-hadoop/HiBench
使用了hivebench中join case
但是impala不支持external table,复杂join异常,做了很多简化和改造。
select count(*) from rankings;
1320000
select count(*) from uservisits;
14400000
SELECT sourceIP FROM rankings R JOIN uservisits UV on (R.pageURL = UV.destURL) limit 1;
impala 17s
hive 53s
select count(*) from uservisits;
impala about 1s
hive 20s
Impala为什么这么快?
- 不同于Hive需要启动MapReduce任务执行查询计划(上面例子,Hive启动了4个MapReduce Job),Impala使用类似Greenplum的MPP方案,可以创建更高效的执行计划,特别在多表join的时候。
- Impala使用和dataNode部署在一起的impalad进程响应执行计划,操作本地数据,数据访问和任务启动更迅速。
- Impalad守护进程把jioin的数据都加载到内存中操作(可能会导致内存溢出)
- Impala更有效的使用了越来越快的网络带宽
- 纯粹的聚合操作,Impala更有优势(除最终汇总,无数据传输,全部local操作)
Impala当前版本的一些问题
- 和Hive集成,Impala需要使用Hive的Metadata数据库,create table这些操作需要在hive中完成。(官方的说法,这样可以更好的利用Hive验证Impala,”如果你不能消除一个缺点,你就把它表述成一个优点“)
- Bug不少,无商用价值
- 只能安装在RHEL6.2 CDH4.1
只要Cloudera对Impala下工夫,Impala成为Hive和Greenplum的替代方案是迟早的事。等着瞧热闹。。。