impala是cloudera提供的一款高效率的sql查询工具,提供实时的查询效果,官方测试性能比hive快10到100倍,其sql查询比sparkSQL还要更加快速,号称是当前大数据领域最快的查询sql工具,
impala是参照谷歌的新三篇论文(Caffeine--网络搜索引擎、Pregel--分布式图计算、Dremel--交互式分析工具)当中的Dremel实现而来,其中旧三篇论文分别是(BigTable,GFS,MapReduce)分别对应我们即将学的HBase和已经学过的HDFS以及MapReduce。
impala是基于hive并使用内存进行计算,兼顾数据仓库,具有实时,批处理,多并发等优点

Kudu与Apache Impala (孵化)紧密集成,impala天然就支持兼容kudu,允许开发人员使用Impala的SQL语法从Kudu的tablets 插入,查询,更新和删除数据;
impala是基于hive的大数据分析查询引擎,直接使用hive的元数据库metadata,意味着impala元数据都存储在hive的metastore当中,并且impala兼容hive的绝大多数sql语法。所以需要安装impala的话,必须先安装hive,保证hive安装成功,并且还需要启动hive的metastore服务。
Hive元数据包含用Hive创建的database、table等元信息。元数据存储在关系型数据库中,如Derby、MySQL等。
客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可

Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询。可以先使用hive进行数据转换处理,之后使用Impala在Hive处理后的结果数据集上进行快速的数据分析。
Impala 与Hive都是构建在Hadoop之上的数据查询工具各有不同的侧重适应面,但从客户端使用来看Impala与Hive有很多的共同之处,如数据表元数据、ODBC/JDBC驱动、SQL语法、灵活的文件格式、存储资源池等。
但是Impala跟Hive最大的优化区别在于:没有使用 MapReduce进行并行计算,虽然MapReduce是非常好的并行计算框架,但它更多的面向批处理模式,而不是面向交互式的SQL执行。与 MapReduce相比,Impala把整个查询分成一执行计划树,而不是一连串的MapReduce任务,在分发执行计划后,Impala使用拉式获取数据的方式获取结果,把结果数据组成按执行树流式传递汇集,减少的了把中间结果写入磁盘的步骤,再从磁盘读取数据的开销。Impala使用服务的方式避免每次执行查询都需要启动的开销,即相比Hive没了MapReduce启动时间。


Impala可以对Hadoop中大多数格式的文件进行查询。它能通过create table和insert的方式将一部分格式的数据加载到table中,但值得注意的是,有一些格式的数据它是无法写入的(write to)。对于Impala无法写入的数据格式,我们只能通过Hive建表,通过Hive进行数据的写入,然后使用Impala来对这些保存好的数据执行查询操作。
文件类型 | 文件格式 | 压缩编码 | 能否Create? | 能否Insert? |
|---|---|---|---|---|
Parquet | 结构化 | Snappy、GZIP | 能 | 能 |
Text | 非结构化 | LZO | 能。 如果建表时没有指定存储类型,默认采用未压缩的text,字段由ASCII编码的0x01字符串分割 | 能 如果使用了LZO压缩,则只能通过Hive建表和插入数据。 |
Avro | 结构化 | Snappy GZIP Deflate BZIP2 | 在Impala 1.4.0 或者更高的版本上支持,之前的版本只能通过Hive来建表。 | 不能 只能通过LOAD DATA的方式将已经转换好格式的数据加载进去,或者使用Hive来插入数据 |
RCFile | 结构化 | Snappy GZIP Deflate BZIP2 | 能 | 不能 只能通过LOAD DATA的方式将已经转换好格式的数据加载进去,或者使用Hive来插入数据 |
SequenceFile | 结构化 | Snappy GZIP Deflate BZIP2 | 能 | 不能 只能通过LOAD DATA的方式将已经转换好格式的数据加载进去,或者使用Hive来插入数据 |
Impala支持以下压缩编码:
Impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具(实时SQL查询引擎Impala),通过使用与商用并行关系数据库中类似的分布式查询引擎(由Query Planner、Query Coordinator和Query ExecEngine三部分组成),可以直接从HDFS或HBase中用SELECT、JOIN和统计函数查询数据,从而大大降低了延迟。

Impala主要由Impalad、 State Store、Catalogd和CLI组成。

Impala执行的查询有以下几个步骤:
操作步骤 | 说明 |
|---|---|
1 | 客户端通过ODBC、JDBC、或者Impala shell向Impala集群中的任意节点发送SQL语句,这个节点的impalad实例作为这个查询的协调器(coordinator) |
编辑 | |
2 | Impala解析和分析这个查询语句来决定集群中的哪个impalad实例来执行某个任务,HDFS和HBase给本地的impalad实例提供数据访问 |
编辑 | |
3 | 各个impalad向协调器impalad返回数据,然后由协调器impalad向client发送结果集 |
编辑 |
访问impalad的管理界面http://node3:25000/

访问statestored的管理界面http://node3:25010/
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。