Imapla概述
Impala是Cloudera公司的一个实时海量查询产品。是对于已有Hive产品的补充。Impala采用了和Hive相同的类SQL接口,但并没有采用MapRed框架执行任务,而是采用了类似Dremel的方式。号称秒级可以扫描PB数据。
其实Impala就是自己实现了一个执行引擎。这个引擎不像MapRed一样是一个通用框架,并且也没有任何failover和high availability的设计。但是优势在于执行速度足够快,秒级返回。其设计理念就是,执行速度足够快,快到如果失败了,重新执行一遍的代价也不大。
很显然,MapRed之所以流行就在于其可以很好的做到可扩展和容错。容错的价值在于,当一个大任务需要1小时以上的执行时间,如果在执行过程中发生故障,可以快速恢复,而不许要重新执行。所以这也是MPI任务为什么采用checkpoint的进行容错。都是为了减少机器故障给执行时间带来额开销。
Hive是在MapRed模型之上抽象出来的类似SQL的接口,简化了写MapRed程序的代价。同样由于依赖于MapRed系统,导致Hive任务执行时间很长,和MapRed一样,只适合执行批处理任务。
而面对实时查询的需求,旧的做法通常是先通过MapRed对数据进行加工,再导出到mysql等系统中。然而这种做法存在多个问题:
- 数据存在多个地方,如果管理不善,很容易带来数据不一致等各种问题
- 用户需要了解数据是否已存储在mysql中
- mysql对存储数据量有限制
其实用户的实时查询请求经常会扫描大量数据,但计算都相对简单,例如只是count(*),等等。为满足这种需求,Google提出了Dremel,而Cloudera参考了Dremel的设计思路,实现了Impala。
Impala存在以下特点:
- 面向实时查询,结果秒级返回
- 兼容hive的类sql语法,但暂时不支持udf和transform
- 可以和hive共享metastore
- 没有任何failover的设计
- 支持从hdfs和hbase读取数据
- 运行时环境用c++实现,并利用了llvm的技术,动态优化执行代码
最后说一下,Impala不会完全替代Hive,因为毕竟Hive的容错和稳定性是Impala比不了的。Impala只是Hive的一个补充,可以快速的响应一些简单的查询请求。
从业务角度上分析,如果Imapla能够做到在5秒,甚至更短的时间内返回结果,那将有机会替代现有的mysql或oracal数据库,成为决策系统的底层支撑查询引擎。例如目前Oracal的BI或类似的系统,底层使用的是传统关系数据库,对海量数据的查询性能非常差。如果替换成Impala,则能够访问的数据量将大的多,对BI系统在公司业务上的贡献将有质的飞跃。
预告一下,后续将继续发表一些和impala有关的文章,将会涉及到系统架构,如何安装调试,前端代码分析,后台代码分析,llvm优化等等。
Date: 2013-02-17 19:37:18 CST
HTML generated by org-mode 6.21b in emacs 23