Impala简介
Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。
优点
- Impala不需要把中间结果写入磁盘,省去了大量的io开销
- 省掉了mr作业启动的开销,mr启动task的速度很慢,impala直接通过响应的服务进程来进行作业调度,速度快了很多。
- Impala完全抛弃了mr这个不太适合做sql查询的范式,而是想dremel一样借鉴了mpp并行数据库的思想另起炉灶,因此可以更多的查询优化,从而节省掉不必要的shuffle、sort等开销
- 用c++实现,做了很多针对性的硬件优化,例如使用sse指令
- 使用了支持data locality的io调度机制,尽可能的将数据和计算分配在同一台机器上进行,减少了网络开销。
- Hive 基于MapReduce,而启动MapReduce就需要启动jvm,用完了在释放资源,而打开jvm也很耗时间,第二,MapReduce 的运算有分多个步骤,有map阶段,有reduce阶段。有shuffle阶段。每个步骤都会涉及到网络的数据传输,同时每个步骤都会涉及到数据落入磁盘。相当于会增加一个系统的io。我们优化主要就是优化 io读写,网络带宽,尽量减少传输数据。
- Impala独特地方:数据可以本地执行 ,如果impala访问一个很小的表,那么就没有必要去各个节点去做分布式的查询,只需要在一个几点上做。 这就是impala data locality,这样就尽量减少网络传输【这个功能需要开启】
功能
- Impala可以根据Apache许可证作为开源免费提供。
- Impala支持内存中数据处理,它访问/分析存储在Hadoop数据节点上的数据,而无需数据移动。 [2]
- 使用类SQL查询访问数据。
- Impala为HDFS中的数据提供了更快的访问。
- 可以将数据存储在Impala存储系统中,如Apache HBase和Amazon s3。
- Impala支持各种文件格式,如LZO,序列文件,Avro,RCFile和Parquet。
差异
Impala使用类似于SQL和HiveQL的Query语言。 下表描述了SQL和Impala查询语言之间的一些关键差异
Impala | 关系型数据库 |
---|---|
Impala使用类似于HiveQL的类似SQL的查询语言。 | 关系数据库使用SQL语言。 |
在Impala中,您无法更新或删除单个记录。 | 在关系数据库中,可以更新或删除单个记录。 |
Impala不支持事务。 | 关系数据库支持事务。 |
Impala不支持索引。 | 关系数据库支持索引。 |
Impala存储和管理大量数据(PB)。 | 与Impala相比,关系数据库处理的数据量较少(TB)。 |
Hive,Hbase和Impala
虽然Cloudera Impala使用与Hive相同的查询语言,元数据和用户界面,但在某些方面它与Hive和HBase不同。 下表介绍了HBase,Hive和Impala之间的比较分析。