天下武功,唯快不破。
一、Impala概述
准实时分析系统Impala,提供SQL语义,能够为存储在Hadoop的HDFS和Hbase中的PB级大数据提供快速、交互式的SQL查询。传统仓库查询工具Hive底层是基于MapReduce引擎处理,是一个批处理过程,难以满足快速响应的查询,而Impala是基于MPP的查询系统,最大特点就是快速。
二、Impala组件构成
Impala由以下的组件组成:
1、Clients:Hue、ODBC clients、JDBC clients和Impala Shell都可以与Impala进行交互,这些接口都可以用在Impala的数据查询以及对Impala的管理。
2、Hive Metastore: 存储Impala可访问数据的元数据。例如,这些元数据可以让Impala知道哪些数据库以及数据库的结构是可以访问的,当你创建、删除、修改数据库对象或者加载数据到数据表里面,相关的元数据变化会自动通过广播的形式通知所有的Impala节点,这个通知过程由catalog service完成。
3、Cloudera Impala: Impala的进程运行在各个数据节点(Datanode)上面。每一个Impala的实例都可以从Impala client端接收查询,进而产生执行计划、协调执行任务。数据查询分布在各个Impala节点上,这些节点作为worker,并行执行查询。
4、HBase和HDFS: 存储用于查询的数据。
三、Impala 系统架构
Impala整体分为两部分 StateStore 和 Impalad。
StateStore是Impala的子服务,用来监控集群中各个节点的健康状况,提供节点注册,错误检测等功能。
Impalad是运行在集群每个节点的守护进程,主要有两个作用,一个是协调Client提交的Query的执行,给其他Impalad分配任务,收集其他Impalad的执行结果进行汇总,二是这个Impalad也会执行其他Impalad给分配的任务,执行这部分任务主要就是对本地HDFS和Hbase里的部分数据进行操作。
四、Impala 查询处理流程
1、三类客户端可与Impala进行交互:
基于驱动程序客户端ODBC driver 和 JDBC driver
Hue接口,可以通过Hue Beeswax接口来与Impala进行交互
Impala shell 命令行
2、Impala使用Hive Metastore来存在元数据,Impala会在HDFS集群的DataNode上启动进程,协调位于集群上的多个Impala进程(即Impalad)执行查询,在Impala架构中,每个Impala节点都可以接收来自客户端的查询请求,然后负责解析查询,生产查询计划,并进行优化,协调查询请求在多个impalad上并行处理,最终有负责接收请求的impala节点汇总结果,响应客户端。
五、Impala和Hive的关系和对比
1、Hive适合长时间的批处理查询分析,而Impala适合于实时交互式SQL查询。
2、Hive是基于MapReduce进行并行计算,而Impala把整个查询分析成一个执行计划树,而不是一连串的MapReduce任务,他使用与商用并行关系数据库MPP中类似的查询机制。
3、Impala速度快于Hive,原因在于Impala不需要把中间结果写入磁盘,省掉了大量的I/O开销,Impala省掉了MapReduce作业启动的开销。
4、Impala适合用来处理输出数据适中或比较小的且对响应时间有要求的查询,而对于大数据量的批处理任务,MapReduce依然是更好的选择。
5、Impala可以与Hive配合使用,比如先使用Hive对数据进行转换处理,然后使用Impala对处理后的数据进行快速数据分析。
六、Impala与Presto 比较
共同点就是吃内存,当然在内存充足的情况下,并且有规模适当的集群,性能应该会更可观,Impala性能稍领先于presto,但是presto在数据源支持上非常丰富,包括hive、图数据库、传统关系型数据库、Redis等。
七、impala presto SparkSql性能测试对比
impala与presto性能相当,SparkSql逊色不少