impala基础

说明:

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系统中任务执行节点

上一篇:Python学习day5作业


下一篇:Java使用JDBC连接Impala