说明:
impala能够对存储在hdfs,hbase上的数据进行快速的交互式sql查询
impala与hive使用了统一的存储系统,同样的元数据库,sql语法(hive-sql),odbc驱动和用户交互接口(Hue)
impala对实时的或者面向批处理的查询提供了一个统一的平台,impala在性能上比hive高出3-30倍
核心组件
impala daemon impala的核心组件是运行在各个节点上面的impalad这个守护进程(Impala daemon),它负责读写数据文件,接收从impala-shell,Hue,JDBC,ODBC等接口发送的查询语句,并进行查询语句和分发工作任务到impala集群的各个节点上,同时负责将本地计算好的查询结果发送给协调节点
impala Statestore 检查集群各个节点上impala daemon的健康状态,同时不间断的将结果反馈给各个impala daemon
impala catalog 将sql语句做出的元数据变化通知给集群的各个节点
hive与impala对比
相同点
1.使用相同的存储数据池,都支持把数据存储于HDFS和hbase中
2.都是用相同的元数据
3.对sql的解释处理比较相似,都是通过词法分析生成执行计划
不同点
1. hive 适合于长时间的批处理查询操作,而impala适合于实时交互式sql查询
2. hive依赖于mapreduce计算框架,impala把执行计划表现为一颗完整的执行计划,直接分发执行计划到各个impalad执行查询,在执行sql语句的时候,impala不会把中间数据写入到磁盘,而是在内存中完成了所有的处理
3, hive在执行过程中,如果内存放不下所有数据,则会使用外存以保证查询 能顺利完成,而impala在遇到内存放不下数据时,不会利用外存
4, 使用impala的时候,查询任务会马上执行而不是生成MapReduce任务,这会节约大量时间
劣势
对内存依赖大
分区超过1W时,性能下降严重
不提供对序列号和反序列化的支持
impala执行查询的具体过程:
1 当用户提交查询前,impala先创建一个负责协调客户端提交的查询的impalad进程 ,该进程会想impalad stata store提交注册订阅信息,state store会创建一个statestored进程,statestored进程通过创建 多个线程来处理impalad的注册订阅信息.
2 用户通过cli客户端提交一个查询到impalad进程,impalad的query planner对sql语句进行解析,生成解析树;然后planner把这个查询的解析树变成若干个planFragment,发送到query coordinator
3 coordinator 通过mysql元数据库中获取元数据,从hdfs的名称节点中获取数据 地址,以得到存储这个查询相关数据的数据节点
4 query executor 通过流式交换中间输出,并由query coordinator汇聚来自各个impalad的结果
5 coordinator把汇总的结果返回给cli客户端
coordinator:impalad节点中的协调者模块
catalog:impala系统中的元数据服务节点
statestored:impala系统中的消息同步节点
impalad:impala系统中任务执行节点