简介

Impala是基于Hadoop数据处理环境形成的一个当代,开源的MPP SQL引擎。Impala提供低延迟,高并发的BI、分析类型的查询,这篇文章从用户的角度介绍Impala,Impala架构,主要的组件,以及与其他SQL-on-Hadoop系统的性能对比

介绍

Impala是一个开源的,完全集成的,最先进的MPP SQL查询引擎,能够很好的利用Hadoop的灵活性和伸缩性。Impala旨在融合传统分析数据的SQL支持和多用户性能,Hadoop的伸缩性和灵活性,生产级别的安全性。Impala的测试版本是在2012年发布,Impala2.0是在2014年发布,目前已经有相当大的下载量。
不像其他系统(Postgres的分支),Impala是一个全新的引擎,是用C++和Java编写的。利用标准组件(HDFS,HBase,Metastore,Yarn,Sentry)保持Hadoop的灵活性,能够读取许多文件格式(Parquet,Avro,RCFiles)。为了减少延迟,避免使用MapReduce或者远程读取数据。Impala实现一个基于后端进程的分布式架构,这些进程负责执行查询,运行在与Hadoop架构相同的机器上。依赖特定的应用场景,Impala的性能远超商业的MPP分析数据库。
这篇文章讨论Impala提供给用户的服务,Impala架构以及主要组件。Impala可获取的最高性能是使用HDFS作为底层存储,使用HBase作为底层存储会有一些显著的不同。
Impala是一个高性能的SQL-on-Hadoop系统,尤其是在多用户的情况下。在单用户情况下,Impala比其他查询系统快13倍,平均快6.7倍。在多用户情况下,Impala比其他查询系统快27.4倍,平均快18倍。所以多用户情况性能更好。
Impala白皮书

用户视角

Impala是一个查询引擎,能够集成Hadoop环境,利用一些标准的Hadoop组件(Metastore,HDFS,HBase,Yarn,Sentry),获取像关系型数据库的体验。但是Impala与关系型数据库有很大的区别。
Impala能够集成BI应用,客户能够通过ODBC或者JDBC连接,使用Kerberos或者LDAP完成认证,授权支持标准的SQL角色和权限。为了查询HDFS上的数据,用户使用create table语句创建表,这个语句提供数据的逻辑schema,也会暗示数据的物理布局,例如文件格式,HDFS上的目录结构,创建的表可以通过SQL进行查询。

物理schema设计

当创建表时,用户可以配置分区列,create table T(…) partitioned by(day int, month int) location ‘<hdfs_path>’ stored as parquet。
对于未分区表,数据文件默认存储在根目录。对于分区表,数据文件放在映射分区列值的子目录中。例如,表T的2月17号的数据文件会放在/day=17/month=2的目录中。一个分区中的数据文件快会随机的分布在HDFS的data nodes中。

相关文章: