☰
【大数据处理与分析】数据仓库Hive:08 Impala
2026/10/23 3:04:13 网站建设 项目流程

【作者主页】Francek Chen
【专栏介绍】⌈ ⌈⌈大数据技术原理与应用⌋ ⌋⌋专栏系统介绍大数据的相关知识,分为大数据基础篇、大数据存储与管理篇、大数据处理与分析篇、大数据应用篇。内容包含大数据概述、大数据处理架构Hadoop、分布式文件系统HDFS、分布式数据库HBase、NoSQL数据库、云数据库、MapReduce、Hadoop再探讨、数据仓库Hive、Spark、流计算、Flink、图计算、数据可视化,以及大数据在互联网领域、生物医学领域的应用和大数据的其他应用。
【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/BigData_principle_application。

文章目录

    • 一、Impala 简介
    • 二、Impala 系统架构
    • 三、Impala 查询执行过程
    • 四、Impala 与 Hive 的比较
    • 小结

Hive 作为现有比较流行的数据仓库分析工具之一,得到了广泛的应用。但是由于 Hive 采用 MapReduce 来完成批量数据处理,因此,实时性不好,查询延迟较高。Impala 作为开源大数据分析引擎,支持实时计算,它提供了与 Hive 类似的功能,并在性能上比 Hive 高出 3~30 倍。

一、Impala 简介

Impala 是由 Cloudera 开发的查询系统,它提供了 SQL 语义,能查询存储在 Hadoop 的 HDFS 和 HBase 上的 PB 级别海量数据。Hive 虽然也提供了 SQL 语义,但是,当采用 MapReduce 作为执行引擎时,Hive 底层执行任务最终仍然需要借助于 MapReduce,而 MapReduce 是一个面向批处理的非实时计算框架,不能满足查询的实时交互性。Impala 最初是参照 Dremel 系统进行设计的,Dremel 系统是 Google 开发的交互式数据分析系统,可以在 2~3 秒内分析 PB 级别的海量数据。所以,Impala 也可以实现大数据的快速查询。

需要指出的是,虽然 Impala 的实时查询性能要比 Hive 好很多,但是,Impala 的目的并不在于替换现有的包括 Hive 在内的 MapReduce 工具,而是提供一个统一的平台用于实时查询。事实上,Impala 的运行依然需要依赖于 Hive 的元数据。总体而言,Impala 与其他组件的关系如图1所示。

图1 Impala与其他组件的关系

与 Hive 类似,Impala 也可以直接与 HDFS 和 HBase 进行交互。当采用 MapReduce 作为执行引擎时,Hive 底层执行使用的是 MapReduce,所以主要用于处理长时间运行的批处理任务,例如批量抽取、转换、加载任务。而 Impala 采用了与商用 MPP 并行关系数据库类似的分布式查询引擎,可以直接从 HDFS 或者 HBase 中用 SQL 语句查询数据,而不需要把 SQL 语句转换成 MapReduce 作业来执行,从而大大降低了延迟,可以很好地满足实时查询的要求。另外,Impala 和 Hive 采用相同的 SQL 语法、ODBC 驱动程序和用户接口。

二、Impala 系统架构

Impala 的系统架构如图2所示,图中的虚线模块是属于 Impala 的组件。从图中可以看出,Impala 和 Hive、HDFS、HBase 等工具是统一部署在一个 Hadoop 平台上的。Impala 主要由 Impalad、State Store 和 CLI 三部分组成,具体如下。

(1)Impalad:Impalad 是 Impala 的一个进程,负责协调客户端提交的查询的执行,给其他 Impalad 分配任务以及收集其他 Impalad 的执行结果进行汇总。另外,Impalad 也会执行其他 Impalad 给其分配的任务,主要对本地 HDFS和 HBase里的部分数据进行操作。Impalad进程主要包含 Query Planner、Query Coordinator 和 Query Exec Engine 3 个模块,与 HDFS 的数据节点(HDFS DN)运行在同一节点上,并且完全分布运行在 MPP 架构上。

(2)State Store:负责收集分布在集群中各个 Impalad 进程的资源信息,用于查询的调度。State Store 会创建一个 statestored 进程,来跟踪集群中的 Impalad 的健康状态及位置信息。statestored 进程通过创建多个线程来处理 Impalad 的注册订阅以及与各个 Impalad 保持心跳连接。另外,各Impalad 都会缓存一份 State Store 中的信息。当 State Store 离线后,Impalad 一旦发现 State Store 处于离线状态时,就会进入恢复模式,并进行反复注册。当 State Store 重新加入集群后,自动恢复正常,更新缓存数据。

(3)CLI:CLI 给用户提供了执行查询的命令行工具,同时,Impala 提供了 Hue、JDBC 及 ODBC 使用接口。

图2 Impala的系统架构

Impala 中的元数据直接存储在 Hive 中。Impala 采用与 Hive 相同的元数据、SQL 语法、ODBC 驱动程序和用户接口,从而使得在一个 Hadoop 平台上,可以统一部署 Hive 和 Impala 等分析工具,同时支持批处理和实时查询。

三、Impala 查询执行过程

如图3所示,Impala 查询的执行过程具体如下。

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

第 2 步:提交查询。用户通过CLI客户端提交一个查询到Impalad进程,Impalad的Query Planner 对 SQL 语句进行解析,生成解析树。然后,Planner 把这个查询的解析树变成若干 PlanFragment,发送到 Query Coordinator。其中,PlanFragment 由 PlanNode 组成的,能被分发到单独的节点上执行。每个 PlanNode 表示一个关系操作和对其执行优化需要的信息。

第 3 步:获取元数据与数据地址。Query Coordinator 从 MySQL 元数据库中获取元数据(即查询需要用到哪些数据),从 HDFS 的名称节点中获取数据地址(即数据被保存在哪个数据节点上),从而得到存储这个查询相关数据的所有数据节点。

第 4 步:分发查询任务。Query Coordinator 初始化相应 Impalad 上的任务,即把查询任务分配给所有存储这个查询相关数据的数据节点。

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

第 6 步:返回结果。Query Coordinator 把汇总后的结果返回给 CLI 客户端。

图3 Impala查询的执行过程

四、Impala 与 Hive 的比较

Impala 作为开源大数据分析引擎,与 Hive 相比,既有相同点,又有不同点,它们的区别与联系可以通过图4进行展现。

图4 Impala与Hive的对比

Hive 与 Impala 的不同点总结如下。第一,由于架构在 Hadoop 之上,Hive 也继承了其批处理的方式,在作业提交和调度的时候会涉及大量的开销,这就意味着 Hive 不能在大规模数据集上实现低延迟的快速查询。因此,Hive 比较适合进行长时间的批处理查询分析,而 Impala 适合进行实时交互式 SQL 查询。第二,当采用 MapReduce 作为执行引擎时,Hive 依赖于 MapReduce 计算框架,执行计划组合成管道型的 MapReduce 任务模式进行执行,Impala 则把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个 Impalad 执行查询。第三,Hive 在执行过程中,如果内存放不下所有数据,则会使用外存,以保证查询能顺序执行完成,而 Impala 在遇到内存放不下数据时,不会利用外存。所以,Impala 目前处理查询时会受到一定的限制,使得 Impala 更适合处理输出数据较小的查询请求,而对于大数据量的批量处理,Hive 依然是更好的选择。

Hive 与 Impala 的相同点总结如下。第一,Hive 与 Impala 使用相同的存储数据池,都支持把数据存储于 HDFS 和 HBase 中,其中,HDFS 支持存储 TEXT、RCFILE、PARQUET、AVRO、ETC 等格式的数据,HBase 存储表中记录。第二,Hive 与 Impala 使用相同的元数据。第三,Hive 与 Impala 中对 SQL 的解释处理比较相似,都是通过词法分析生成执行计划。

总之,Impala 的目的不在于替换现有的 MapReduce 工具。事实上,把 Hive 与 Impala 配合使用效果最佳,可以先使用 Hive 进行数据转换处理,再使用 Impala 对 Hive 处理后的结果数据集进行快速的数据分析。

小结

Hive 基于 MapReduce 实现批量数据处理,实时性差、查询延迟高;Impala 作为开源实时大数据分析引擎,采用类似 MPP 的分布式查询引擎,直接从 HDFS/HBase 用 SQL 查询数据,无需转换为 MapReduce 作业,性能比 Hive 高 3~30 倍。Impala 由 Impalad、State Store 和 CLI 三部分组成,查询执行经历注册订阅、提交查询、获取元数据与数据地址、分发任务、汇聚结果、返回结果六个步骤。Impala 与 Hive 共享存储数据池、元数据和相似的 SQL 解析方式,但 Impala 适合实时交互式小数据量查询,Hive 适合长时间批处理;二者配合使用效果最佳。

欢迎点赞👍 | 收藏⭐ | 评论✍ | 关注🤗

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询