Impala - 高性能大数据查询引擎

发布网友 发布时间:2024-11-07 12:20

我来回答

1个回答

热心网友 时间:2024-11-07 13:08

Impala概述

Impala是一个开源高性能分布式SQL查询引擎,由Cloudera于2017年开源。它专为在Apache Hadoop集群中处理大规模数据集提供快速大数据查询和分析能力,与SQL兼容,适用于Hadoop生态系统。

Impala与Presto/Trino一样,是一个分布式并行处理(MPP)数据库引擎,作为Hadoop上的标准SQL查询引擎。

Doris与StarRocks基于Impala早期版本。

在Hadoop生态中的Impala位置

Impala的架构设计

在大数据领域,很多框架采用主从结构,如HDFS、Presto、YARN等,通过一个Master节点进行分布式控制、元数据管理及任务分发,而Slave节点只执行特定功能。然而,这样的架构存在Master节点单点问题及性能瓶颈。Presto的Master节点缺乏高可用方案,Master节点故障会导致集群完全不可用;在高并发和大量任务处理场景下,Presto的Master节点在解析阶段的耗时显著增加。

Impala采用去中心化架构,由StateStoreD、CatalogD和ImpalaD三个服务组成,没有主从概念,各司其职,相互配合。

StateStoreD负责状态同步,持续监控集群中所有ImpalaD的运行状况,并将其结果转发给每个ImpalaD。

StateStoreD在集群状态错误时提供帮助,对Impala集群运行不构成关键影响。如果StateStoreD停止运行,ImpalaD仍可继续运行,但如果其他ImpalaD脱机,集群的健壮性会受到影响。当StateStoreD重新上线时,它将重新建立与ImpalaD的通信并恢复监控功能。

StateStoreD只需在集群的某一个主机上运行。

CatalogD作为元数据访问网关,从Hive Metastore等外部Catalog获取元数据信息及统计信息,缓存在自己的catalog结构中。信息包括库表定义、列类型、统计信息(如表大小、行数、分区及各列信息),以及从NameNode获取的文件粒度信息(如文件存储位置、副本、文件块信息)。

ImpalaD请求CatalogD查询库表元数据信息。

ImpalaD执行DDL命令时通过CatalogD执行,更新由StateStoreD广播至集群其他ImpalaD。

同StateStoreD一样,一个集群只有一个CatalogD服务。

ImpalaD作为核心服务组件,分为三种运行模式:Coordinator、Executor和Executor And Coordinator(默认)。Coordinator模式下,ImpalaD仅作为查询协调者,负责解析SQL语句、生成执行计划、调度查询执行计划以及收集并返回查询结果。Executor负责具体的数据查询执行,包括数据扫描、聚合、排序等操作。Executor And Coordinator模式则包含两者功能。

生产环境一般建议ImpalaD做好角色分离,即要么是Executor,要么是Coordinator。

查询执行过程

在Impala中,查询处理的主要过程在ImpalaD中完成。ImpalaD可以进一步细分为Query Planner、Query Coordinator和Query Executor三个部分,其中Query Planner被称为FE端,主要用Java语言实现;Query Coordinator和Query Executor被称为BE端,由C++实现。

查询执行过程如下:

1、客户端(如JDBC、ODBC、Impala Shell)向Impala集群任意节点发送查询请求。

2、ImpalaD接收请求并通过JNI接口请求FE端。

3、FE端将查询解析生成抽象语法树(statementBase),加载元数据信息。

4、进行语义分析及权限校验(通过调用AnalysisContext.analyzeAndAuthorize方法),实际调用抽象语法树各StatementBase节点的analyze方法。

5、根据statementBase类型,进行不同处理,如DDL类型创建对应的catalog请求,普通query类型创建执行计划。

6、生成单节点执行计划(singleNodePlan),对plan进行小查询判断及优化,然后进行join重写,根据代价评估调整join类型及子节点顺序。

7、遍历单节点执行计划(singleNodePlan),生成PlanFragment,最终生成分布式执行计划,返回给Impala。

8、ImpalaD获得分布式执行计划,将查询状态设置为PENDING,创建线程执行查询请求。

9、提交查询并进行资源准入模块AdmissionControl判断,判断资源使用是否超限、是否满足条件、是否需要排队等待。

10、资源判断通过后,调用调度器scheler的Schele方法生成调度信息。

11、为查询创建Coordinator,执行Exec方法初始化fragment状态信息及BE端状态信息,然后分发任务。

12、在所有BE端并行启动查询执行,并阻塞直到启动完成。

13、所有BE端异步执行任务,如扫描、排序、聚合。

14、BE端执行完成后,查询结果在Coordinator中汇聚。

15、Coordinator将得到的查询结果传输给客户端。

Impala与Presto(Trino)对比

欢迎关注我的公众号“大数据小百科”,获取原创技术文章。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com