大数据组件--Impala概述
Apache Impala是一个适用于实时交互的sql软件,是基于hive的大数据分析查询引擎,hive和impala有不同的侧重面,通常是两个互相配合工作,可以先用hive进行一个数据的预处理清洗转换,然后在用impala在hive的结果数据集上进行快速数据分析。
一、概述
1、impala是个实时的sql查询工具,类似hive的操作方式,只不过执行的效率更高,有种说法说他是大数据生态圈执行效率最高的sql类软件。
2、impala来自Cloudera,后来贡献给apache
3、impala工作底层执行依赖于hive,与hive公用一套元数据存储,所以在使用imaple的时候,必须保证hive服务是正常的,至少metastore开启
4、impala最大跟hive的不同在于不再将sql编译成mr程序执行,而是编译成执行计划树,流式的传递汇集。
5、impala的sql语法几乎兼容hive的sql语句。
简述架构特点:
1)大部分功能特性和Hive类似
2)基于MPP的查询引擎
3)较低的容错性
4)较高的内存需求
5)较高的查询效率
二、Impala组成
Impala集群部署,主要有以下几部分组成:
1、Impalad
impala服务端,可以部署在不同的节点机器上,一般与datanode部署的节点一致,方便本地化数据计算,减少网络io,每次客户端发送执行sql请求时,会选出一个节点上impalad接收请求,将sql解析成执行计划树,通过调度器发送执行计划树到sql涉及到的其他节点的impalad执行,这个impalad被称为Coordinator(协调者)。impalad中执行出结果后也是先发送到Coordinator,由Coordinator向客户端返回。除此之外,Impalad也与State Store保持连接,用于确定哪个impalad是健康可以执行工作的。
2、State Store
主要是跟踪集群中impalad的健康状态,由statestored进程表示,它通过创建多个线程来处理Impalad的注册订阅和与各Impalad保持心跳连接,各Impalad都会缓存一份State Store中的信息,Impalad发现State Store处于离线时,整个impala会进入recovery模式,这时如果有impalad失效了,缓存的信息无法更新,Coordinator将执行计划分配给了失效的Impalad,查询失败。当State Store重新加入集群后,会重新更新impalad中的缓存数据。
3、Impala Catalogd
老版本中没有,新版本中出现,主要作用是负责与hive元数据进行交互,同步hive的元数据到impala自己的元数据中。Catalogd进程通过Hive Metastore去缓存元数据信息,如查询需要用到的表信息、各种属性字段信息,以及每个查询需要用到的Parquet文件地址,将这些数据缓存起来,并且可以通过Statestore将这些缓存的元数据分发给各个Impalad节点,每个Impalad维护一份自己的缓存数据。
4、CLI
用户操作impala的方式(impala shell JDBC、hue等)
三、Impala查询树
Impala与Hive使用同一个元数据库,可以与Hive实现互访,并兼容大部分HQL语言。其基本原理是将一个查询根据数据所在位置分割成为子查询并在各个节点上运行,各个节点运行结果在汇总形成最终结果后返回给客户端。Impala的每个节点都直接读取本地数据,并在本地执行子查询。在执行子查询时,节点之间交换数据完成各自的查询。具体的查询树分布化过程为: a)Impala接收到SQL查询首先生成SQL查询树,由查询树得知哪些部分在本地运行,哪些部分可以在分布式系统上运行; b)各个节点直接从HDFS的本地文件读取数据,各个节点上分别进行Join和GroupBy聚合,由各个节点把处理后的数据汇总发送到接受查询的节点上,由该节点进行汇总聚合及最后的排序截取工作 c)Impala把 SQL语句拆散成碎片分配到各个节点上,达到高速查询的目的。
四、Impala查询处理流程
impalad分为两部分:Java前端(负责接受sql请求,并编译成sql执行计划树),c++后端(负责具体的执行计划树操作)
1、impala sql由客户端发送到impalad,这个impalad作为这个查询的协调器。
2、协调器解析语句后,根据执行计划树和与hdfs交互,得出数据所在节点及路径,决定集群中的哪个impalad实例来执行某个任务。
3、HDFS和HBase给本地的impalad实例提供数据访问,impalad获取数据后向协调器impalad返回数据,然后由协调器impalad向client发送结果集。