Impala之概念及架构

概述

Impala服务器是一个分布式,大规模并行处理(MPP)数据库引擎。它包括运行在CDH集群主机上的不同后台进程。


1,客户端
有三类客户端可以与Impala进行交互:

基于驱动程序的客户端(ODBC Driver和JDBC Driver,其中JDBC Driver支持Hive1与Hive2风格的驱动形式);

Hue接口,可以通过Hue Beeswax接口来与Impala进行交互;

Impala Shell命令行接口,类似关系数据库提供一些命令行即可,可以直接使用SQL语句与Impala交互。
2,Hive Metastore
Impala和Hive共享 Metastore,来存储元数据。
3,Cloudera Impala
Impala会在HDFS集群的Datanode上启动进程,协调位于集群上的多个Impala进程(impalad),以及执行查询。在Impala架构中,每个Impala节点都可以接收来自客户端的查询请求,然后负责解析查询,生成查询计划,并进行优化,协调查询请求在其他的多个Impala节点上并行执行,最后有负责接收查询请求的Impala节点来汇总结果,响应客户端。
4,HBase和HDFS
HBase和HDFS存储着实际需要查询的大数据。

ImpalaDaemon

1,Impala Daemon进程是运行在集群每个节点上的守护进程,是Impala的核心组件之一。每个节点上这个进程名称为impalad。

2,impalad 负责读写数据文件,接收来自impala-shell、Hue、JDBC或者ODBC的查询请求,与集群中的其他节点分布式并行地工作,并将本节点的查询结果返回给中心协调者节点。

3,用户可以向集群节点中的任何一个节点提交查询请求,提交查询的这个节点将作为这个查询的“协调者节点(coordinator node )”,其他节点的运算结果会被传输到协调者节点,协调者节点将最终运算结果返回。运行在生产环境上的Impala集群,我们必须考虑到各个节点的负载均衡,建议使用JDBC/ODBC接口以round-robin的方式将每个查询提交到不同节点的impalad进程上。

4,下面是Impala的架构图:


上面可以看出,位于Datanode上的每个impalad进程,都具有Query Planner、Query Coordinator、Query Exec Engine这几个组件,每个Impala节点在功能集合上是对等的,也就是说,任何一个节点都能接收外部查询请求。

5,impalad 进程通过持续地和statestore 通信来确认自己所在的节点是否健康,是否可以接受新的任务请求。

6,当Impala集群中创建,修改或者删除了对象,或者进行了Insert/Load Data操作,catalogd进程要向所有节点广播消息,以保证所有impalad节点都能够及时地了解整个集群中对象元数据的最新状态。

Impala Statestore

1,impala  的另一个核心组件statestore,负责检测整个集群中所有节点上进程的健康状况,并不断地将监控状况的结果转发给集群的Impalad进程节点。Statstore 进程名称为 statestored。

2,一个impala 集群上仅需要一个statestored进程节点。当impala 集群中有节点因硬件故障,网络错误,软件问题或是其他的原因导致节点不可用,statestore讲确保这一信息及时地传达到所有的impalad进程节点上,当有新的查询请求时,impalad进程节点将不会把查询请求发送到不可用的节点上。

3,Statestore的目的是在集群故障时对impalad进程节点同步信息,所以对于一个正常运行的impala集群来说,它并不是一个关键进程。如果statestore不可用,impalad进程节点之间仍然可以相互协调正常对外提供分布式查询。在statestore不可用的情况下,impalad进程节点失败,只是让集群不再那么强劲。当statestore恢复正常时,它将重新与impalad进程节点建立通信,恢复对集群的监控功能。

Impala Catalog

1,当Impala集群中执行的SQL语句会引起元数据变化时,catalog服务负责将这些变化推送到其他impalad进程节点上。Catalog服务对应的进程名称为catalogd。
2,一个Impala集群只需要一个catalogd进程。因为所有的请求都是通过statestored进程发送过来,所以让statestored和catalogd运作在同一个节点是一个很不错的选择。
3,通常情况下,如果在一个impalad进程节点上执行了Create Database,Drop Database,Create Table,Alter Table,Drop Table等语句时,在其他impalad进程节点运行一个查询之前总是要执行Invalidate Metadata语句来同步对象的元数据信息。同理,如果在一个impalad进程节点执行了Insert语句,其他节点在运行一个查询之前需要执行Refresh table_name,以便让这个节点知道这个表有新增的数据文件。当通过impala执行可能引起元数据变化的语句时,catalog服务确保不必再执行Refresh/Invalidate Metadata的元数据同步语句。但是通过Hive进程创建表,加载数据等类似的操作时,还是需要在impalad进程节点上执行Refresh/Invalidate Metadata语句。

impala元数据

1,impala的每一个节点都cache有元数据,避免每次请求都直接去公共的元数据存储库中查询。如果每次都去元数据的存储库中查询,则当表的体积特别大,含有的分区和列特别多的时候会耗费大量的时间。 如果表的schema或是数据被更改了,则所有的impalad都需要重新更新metastore去替换老的metastore,应用REFRESH命令去更新元数据。
默认为自动的执行REFRESH,如果我们知道某一个表被改变了则我们也可以手动的执行REFRESH table_name,主动更新元数据。
2,对于通过Hive创建、删除、修改或者其他类型的操作,Impala都无法自动识别Hive中的元数据的变更情况。这时需要连接到impala-shell后,执行invalidate metadata语句,改语句会使所有的Impala元数据失效并重新从元数据库同步元数据信息。
3,对于通过Hive加载、插入的数据操作,或者通过hdfs命令对数据文件进行的变更操作,Impala都无法自动识别数据的变更情况。这时需要连接到impala-shell后,执行refresh table_name语句,使Impala识别数据的变更。

支持特性

Impala支持的特性,主要包括如下几点:
1,对 ANSI-92 SQL标准的支持
Impala支持ANSI-92 SQL所有子集,包括CREATE、ALTER、SELECT、INSERT、JOIN、GROUP BY以及子查询。它还支持分区JOIN、常用的聚合函数(SUM、COUNT、MAX、MIN、AVG等等)。你使用这些语句时,可以像使用关系数据库中使用的SQL语句一样去设计,很容易上手。
2,数据来源与数据格式
Impala可以操作HDFS、HBase中存储的数据,支持如下HDFS的支持文件格式:Text file、SequenceFile、RCFile、Avro file、Parquet,支持的压缩格式有:Snappy、GZIP、Deflate、BZIP,其中Snappy压缩格式的性能更好一些。
3,支持的数据访问接口
主要包括Hive所支持的如下接口:JDBC Driver、ODBC Driver、Hue Beeswax、Cloudera Impala Query UI.,另外,还可以通过CLI接口(也就是Impala Shell)访问。

你可能感兴趣的:(impala)