应用场景
在使用Hive的过程中,编写了HQL语句,发现HQL执行过程是非常慢的,因为hive采用的是把HQL转化成hadoop的MapReduce任务,然后编译,打包成jar包,分发到各个server上去执行,这个过程会很慢很慢!而impala也可以执行SQL,但是比Hive快很多,而Impala根本不用Hadoop的Mapreduce机制,直接调用HDFS的API获取文件,在内存中快速计算!
但是Impala也并不是完全比Hive好。Impala的容错机制没有Hive好,而且没有Hive那么成熟。
- 所以一般使用以下方法来决定使用哪个:
-
如果是ETL任务使用Hive
如果是实时的热查询则用Impala
1. Impala介绍
Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。
1.1 Impala的优点
- Impala不需要把中间结果写入磁盘,省掉了大量的I/O开销。
- 省掉了MapReduce作业启动的开销。MapReduce启动task的速度很慢(默认每个心跳间隔是3秒钟),Impala直接通过相应的服务进程来进行作业调度,速度快了很多。
- Impala完全抛弃了MapReduce这个不太适合做SQL查询的范式,而是像Dremel一样借鉴了MPP并行数据库的思想另起炉灶,因此可做更多的查询优化,从而省掉不必要的shuffle、sort等开销。
- 通过使用LLVM来统一编译运行时代码,避免了为支持通用编译而带来的不必要开销。
- 用C++实现,做了很多有针对性的硬件优化,例如使用SSE指令。
- 使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销。
1.2 Impala的功能
- Impala可以根据Apache许可证作为开源免费提供。
- Impala支持内存中数据处理,它访问/分析存储在Hadoop数据节点上的数据,而无需数据移动。
- 使用类SQL查询访问数据。
- Impala为HDFS中的数据提供了更快的访问。
- 可以将数据存储在Impala存储系统中,如Apache HBase和Amazon s3。
- Impala支持各种文件格式,如LZO,序列文件,Avro,RCFile和Parquet。
2. Impala VS Phoenix
现有hbase的查询工具有很多如:Hive,Tez,Impala,Shark/Spark,Phoenix等。
phoenix,中文译为“凤凰”,很美的名字。Phoenix是由saleforce.com开源的一个项目,后又捐给了Apache基金会。它相当于一个Java中间件,提供jdbc连接,操作hbase数据表。
但是在生产环境中,不可以用在OLTP中。在线事务处理的环境中,需要低延迟,而Phoenix在查询HBase时,虽然做了一些优化,但延迟还是不小。所以依然是用在OLAT中,再将结果返回存储下来。Phoenix的团队用了一句话概括Phoenix:”We put the SQL back in NoSQL” 意思是:我们把SQL又放回NoSQL去了!这边说的NoSQL专指HBase,意思是可以用SQL语句来查询Hbase,你可能会说:“Hive和Impala也可以啊!”。但是Hive和Impala还可以查询文本文件,Phoenix的特点就是,它只能查Hbase,别的类型都不支持!但是也因为这种专一的态度,让Phoenix在Hbase上查询的性能超过了Hive和Impala!
所以Impala可以针对文本文件,impala可以操作hdfs,hive,hbase等,而Phoenix只针对Hbase。