Impala快速入门——Impala的组件和架构介绍

目录

一、概述

1.1简介

1.2优势

1.3主要特点

二、Impala架构

2.1Impala Daemon

2.2Impala Statestore

2.3Impala Catalog Service

三、Impala查询的执行过程

3.1Impala查询过程图

3.2Impala执行查询的具体过程

四、Impala与Hive的比较

4.1Impala与Hive对比图

4.2Hive与Impala的相同点

4.3Hive与Impala的不同点

4.4总结


一、概述

1.1简介

Impala是由Cloudera公司开发的新型查询系统,能够对存储在HDFS、HBase以及S3上的数据进行快速的交互式SQL查询。另外,impala与Hive使用了统一的存储系统、同样的元数据库、SQL语法(Hive SQL)、ODBC驱动和用户交互接口(Hue),Impala对实时的或者面向批处理的查询提供了一个统一的平台,Impala在性能上比Hive高出3~30倍。

Impala是用于查询大数据的工具的补充,Impala不是取代构建在MapReduce之上的批处理框架,比如Hive。Hive和其他的基于MapReduce的框架适合处理长时间运行的批处理作业,比如涉及到批处理的ETL类型的作业。

注意:Impala于2017年11月15日从Apache的孵化器毕业。

1.2优势

(1)使用的是数据科学家和分析师熟悉的SQL接口
           (2)能查询大数据集
           (3)是集群环境中的分布式查询,便于扩展和使用廉价商用硬件

           (4)能够在不同的分析引擎之前共享数据,比如可以通过pig写数据,使用Hive转换数据,再使用impala查询数据。impala能够读写hive中的表,使用impala对Hive生成的数据进行分析,实现简单的数据交换。

           (5)单一系统用于大数据处理和分析,因此可以避免成本高昂的建模和ETL.

1.3主要特点

(1)支持Hive查询语言(HiveQL)最常见的SQL-92功能,包括 SELECT, JOIN和聚合函数
           (2)支持HDFS, HBase和S3存储, 包括:
                       • HDFS 文件格式: delimited text files, Parquet, Avro, SequenceFile,和 RCFile.
                       • 压缩: Snappy, GZIP, Deflate, BZIP.
           (3)常见的数据访问接口,包括JDBC driver、ODBC driver
           (4)支持impala-shell命令行接口
           (5)Kerberos授权

二、Impala架构

为了避免延迟,impala绕过MapReduce,采用了与商用并行关系数据库类似的分布式查询引擎,可以直接与HDFS和HBase进行交互查询,性能上比Hive要快。

Impala server 是一个分布式的大规模并行处理(MPP)的数据库引擎, 它由运行在集群中特定主机上的不同守护进程组成。其架构图如下图所示:

2.1Impala Daemon

这个进程是运行在集群每个DataNode节点上的守护进程,是impala的核心组件。在每个节点上这个进程的名字称为impalad。主要负责读写数据,接受  impala-shell,Hue, JDBC或者ODBC的查询请求,与集群中的其他节点分布式并行工作,并将本节点的查询结果返回给中心协调者节点(central coordinator)。

我们可以向运行在DataNode上的任何impalad进程提交一个查询,提交查询的这个节点将作为这个查询的“协调者节点”(coordinator)为这个查询提供服务。其他节点的运算结果会被传输到协调者节点,协调者节点将最终的运算结果返回。当使用
mpala-shell命令进行功能性测试的时候,为了方便起见,我们总是会连接到同一个节点上的impalad。但是对于生产环境中的impala集群而言,必须要考虑到各个节点的负载均衡,建议使用JDBC/ODBC接口以轮询(round-robin)的方式提交到不同的impalad进程上。

为了了解其他节点的健康状况和负载,Impalad进程会一直与 statestore保持通信,用以确保哪个节点是健康的并且可以接受任务的。 

当impala集群中创建,修改或者删除了对象,或者进行了INSERT/LOAD DATAT操作,catalogd进程会向所有的节点广播消息,以保证每个impalad节点都能够及时地了解整个集群中对象元数据的最新状态。后台进程间的通信最大限度的降低了对 REFRESH/INVALIDATE METADATA命令的依赖。(但是对于和impala1.2版本之前的节点通信,还是需要显示指定)

对impala 2.9或者更高版本,可以控制哪一个节点为查询协调器( query coordinators ),也可以控制哪一个节点为查询协调器(query executors), 能够提高大型集群上高并发工作负载的可扩展性。

2.2Impala Statestore

statestore检查集群中impalad进程节点的健康状况,并不断地将健康状况结果转发给所有的impalad进程节点。statestore进程的名称为statestored。一个impala集群只需要一个statestored进程,如果impala节点由于硬件故障、网络错误、软件问题或者其他的原因导致节点不可用,statestore将确保这条信息及时地传达到所有的impalad进程节点上,当有新的查询请求时,           impalad进程节点将不会把查询请求放松到不可用的节点上。
         由于statestore的目的是在集群故障时对impalad进程节点同步信息,所以对于一个正常运行的impala集群来说,它并不是一个关键进程。如果statestore不可用,impalad进程节点之间仍然可以相互协调正常对外提供分布式查询。在statestore不可用的情况下,impalad进程节点失败,只是会让集群不再那么强健。当statestore恢复正常时,它重新与impalad进程节点建立通信,恢复对集群的监控功能。

        对于负载平衡和高可用性都适用于impalad守护进程。statestore和catalog进程对高可用性没有特殊要求,因为即便这些守护进程存在问题,也不会导致数据丢失。如果这些守护进程因中断而变得不可用,则可以停止impala服务,删除impala StateStore和impala Catalog角色,将角色添加到不同的主机上,并重新启动impala服务。

2.3Impala Catalog Service

当impala集群中执行的SQL语句会引起元数据变化时,catalog服务会将这些变化推送到其他的impalad进程节点上。catalog服务对应的进程名称为catalogd,一个impala集群只需要一个catalogd进程 。由于所有的请求都是通过statestore进程发送过来的,所以建议让statestore和catalog运行在同一个节点上。
        catalog服务大大地减少了对 REFRESH / INVALIDATE METADATA 语句的元数据同步的需求。在创建和删除表的过程中,catalogd进程负责连接元数据库并进行元数据更新操作,从而确保不必执行REFRESH / INVALIDATE METADATA这样的元数据同步语句。但是,如果通过Hive执行了创建表 、加载数据等操作,则在impala中执行查询之前需要先执行 REFRESH或者INVALIDATE METADATA 命令。

三、Impala查询的执行过程

3.1Impala查询过程图

3.2Impala执行查询的具体过程

第0步,当用户提交查询前,Impala先创建一个负责协调客户端提交的查询的Impalad进程,该进程会向Impala State Store提交注册订阅信息,State Store会创建一个statestored进程,statestored进程通过创建多个线程来处理Impalad的注册订阅信息。

第1步,用户通过CLI客户端提交一个查询到impalad进程,Impalad的Query Planner对SQL语句进行解析,生成解析树;然后,Planner把这个查询的解析树变成若干PlanFragment,发送到Query Coordinator

第2步,Coordinator通过从MySQL元数据库中获取元数据,从HDFS的名称节点中获取数据地址,以得到存储这个查询相关数据的所有数据节点。

第3步,Coordinator初始化相应impalad上的任务执行,即把查询任务分配给所有存储这个查询相关数据的数据节点。

第4步,Query Executor通过流式交换中间输出,并由Query Coordinator汇聚来自各个impalad的结果。

第5步,Coordinator把汇总后的结果返回给CLI客户端。

四、Impala与Hive的比较

4.1Impala与Hive对比图

4.2Hive与Impala的相同点

(1)Hive与Impala使用相同的存储数据池,都支持把数据存储于HDFS和HBase中

(2)Hive与Impala使用相同的元数据

(3)Hive与Impala中对SQL的解释处理比较相似,都是通过词法分析生成执行计划

4.3Hive与Impala的不同点

(1)Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询

(2)Hive依赖于MapReduce计算框架,Impala把执行计划表现为一棵完整的执行计划树,直接分发执行计划到各个Impalad执行查询

(3)Hive在执行过程中,如果内存放不下所有数据,则会使用外存,以保证查询能顺序执行完成,而Impala在遇到内存放不下数据时,不会利用外存,所以Impala目前处理查询时会受到一定的限制

4.4总结

(1)Impala的目的不在于替换现有的MapReduce工具

(2)把HiveImpala配合使用效果最佳

(3)可以先使用Hive进行数据转换处理,之后再使用ImpalaHive处理后的结果数据集上进行快速的数据分析

参考:

1.http://impala.apache.org/overview.html

2.厦门大学林子雨编著大数据技术原理与应用

3.http://impala.apache.org/docs/build/impala-2.12.pdf

posted @ 2019-03-03 18:10  大数据技术与数仓  阅读(594)  评论(0编辑  收藏  举报