大数据学习(61)-Impala与Hive计算引擎

&&大数据学习&&
🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门

💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞


一、impala与yarn资源管理

YARN 是 Apache Hadoop 生态系统中的一个资源管理器,它采用了 master/slave 的架构,使得多个处理框架能够在同一集群上共享资源。Impala 作为 Hadoop 生态系统中的一个组件,可以与 YARN 集成,以便更好地管理和调度集群资源。

当 Impala 与 YARN 集成时,YARN 负责管理集群中的计算资源,如 CPU 和内存,并根据 Impala 的需求进行资源分配。这有助于提高 Impala 的查询性能和资源利用率。此外,YARN 还提供了容错机制,可以在节点故障时自动重新分配任务,从而确保 Impala 作业的可靠性。

不过,Impala 并不依赖于 YARN 来执行查询。即使没有 YARN,Impala 仍然可以在 Hadoop 集群上运行,只是资源管理和调度方面可能不如与 YARN 集成时高效。

二、Impala 与 Hive

  • 数据仓库工具:两者都是构建在 Hadoop 之上的数据仓库工具,用于查询和分析存储在 HDFS(Hadoop Distributed File System)中的大规模数据集。
  • SQL 支持:都提供了 SQL 查询语言支持,允许用户通过 SQL 语句来查询和分析数据。
  • 元数据管理都使用了 Hive Metastore 来管理数据库和表的元数据,使得数据定义和访问更加一致和方便。
  • 数据格式支持:都支持多种数据格式,如 Parquet、Avro、ORC 等,这些格式有助于优化查询性能和数据压缩。
  • 查询性能Impala 采用了内存并行处理架构,查询性能远高于 Hive(尤其是基于 MapReduce 的 Hive)。Impala 能够提供实时或接近实时的查询响应,而 Hive 则更适合于批处理查询。
  • 执行引擎 :Hive 的执行引擎是 MapReduce 或 Tez/Spark,而 Impala 有自己的查询执行引擎,能够直接在 HDFS 或 HBase 上执行 SQL 查询,无需转换为 MapReduce 任务。
  • 使用场景:Hive 更适合用于大规模数据仓库的建设和复杂的数据分析任务,而 Impala 则更适合用于交互式查询、实时报表生成和快速数据分析等场景。

三、Impala 与 Spark on Hive

  • 数据处理能力:Spark 是一个通用的大数据处理引擎,支持批处理、流处理、机器学习等多种数据处理模式,而 Impala 主要专注于交互式 SQL 查询。
  • 内存计算:虽然两者都支持内存计算以加速查询性能,但 Spark 的内存计算模型更加通用和灵活,可以应用于更多种类的数据处理任务。
  • 生态系统集成:Spark 生态系统丰富,包括 Spark SQL、Spark Streaming、MLlib 等多个组件,可以与 Hadoop、Kafka、Cassandra 等多种系统进行集成。而 Impala 则更专注于与 Hadoop 生态系统的集成。

四、impala架构组成

Impala 的架构主要由以下三个核心组件构成:

  1. Impalad

    • 作用 :Impalad 是 Impala 的守护进程,它运行在 Hadoop 集群的每个节点上,与 DataNode 运行在同一节点上。
    • 功能:接收客户端的查询请求,读写数据,并行执行查询,并将结果返回给客户端。
    • 模式:Impalad 可以作为 Coordinator(协调器)来解析 SQL 查询语句、生成执行计划,并调度查询执行计划;也可以作为 Executor(执行器)来具体执行数据查询操作,如数据扫描、聚合、排序等。
  2. State Store

    • 作用跟踪集群中所有 Impalad 的健康状态及位置信息。
    • 功能:通过创建多个线程来处理 Impalad 的注册订阅,并与各 Impalad 保持心跳连接,以确保集群中的 Impalad 正常运行。
  3. CLI(Command Line Interface)

    • 作用:提供给用户查询使用的命令行工具。
    • 功能 :用户可以通过 CLI 提交 SQL 查询请求,并查看查询结果。此外,Impala 还提供了Hue、JDBC、ODBC 等使用接口,方便用户以不同的方式访问 Impala。

五、Impala查询处理流程

当用户通过 CLI 或其他接口提交 SQL 查询请求时,Impala 的查询处理流程大致如下:

  1. 接收查询请求

    • 任意一个 Impalad 实例接收到客户端的查询请求后,如果它作为 Coordinator,则会负责解析该查询请求。
  2. 解析 SQL 查询语句

    • Coordinator 通过 JNI(Java Native Interface)调用 Java 前端对 SQL 查询语句进行解析,生成抽象语法树(AST)。
    • 然后,对 AST 进行语义分析,包括检查语法正确性、验证权限等。
  3. 生成执行计划

语义分析通过后,Coordinator 会根据查询语句和元数据信息生成执行计划树。执行计划树由多个 PlanFragment(计划片段)组成,每个 PlanFragment 表示执行计划树中的一个原子操作。

  1. 调度执行计划

    • Coordinator 会根据执行计划、数据存储信息(如 HDFS 中数据块的位置)以及集群的资源状况,通过调度器(如 simple-scheduler,使用 round-robin 算法)将执行计划分配给相应的后端执行器 Impalad 执行。
  2. 并行执行查询

    • 被分配了执行任务的 Impalad 实例会并行地执行查询操作,如数据扫描、聚合、排序等。这些操作会在内存中完成,以提高查询性能。
  3. 返回查询结果

    • 执行完成后,各 Impalad 实例会将查询结果通过网络流式地传送回给 Coordinator
    • Coordinator 会将汇总后的查询结果返回给客户端。

三、Impala核心特性

  1. 内存并行处理

    Impala 采用了内存并行处理架构,能够在多个节点上并行执行查询操作,从而显著提高查询性能。

  2. 与 Hadoop 生态系统的无缝集成

    Impala 可以直接与 HDFS 和 HBase 进行交互,无需将数据导出到其他系统中。 同时,Impala 还支持 Hive Metastore,使得用户能够重用 Hive 中的元数据。

  3. 低延迟的 SQL 查询

    Impala 提供了低延迟的 SQL 查询能力,使得用户能够更快速地进行大数据查询和分析。低延迟指的是查询从提交到返回结果的时间非常短,通常在秒级甚至毫秒级范围内。这对于需要实时或接近实时数据访问和分析的应用场景至关重要。

  4. 动态代码生成

    Impala 使用 LLVM(Low Level Virtual Machine)编译器框架来动态生成针对特定查询的优化代码,以进一步提高查询性能。(在Impala中,LLVM编译器框架被用于优化查询的执行过程。具体来说,Impala使用LLVM来动态生成针对特定查询的优化代码。这种动态代码生成技术能够显著提高查询的执行效率,因为生成的代码是专门为该查询定制的,能够充分利用底层硬件的特性。)

相关推荐
阿楠小波1 小时前
蓝桥杯嵌入式组第七届省赛题目解析+STM32G431RBT6实现源码
c语言·stm32·单片机·学习·蓝桥杯
阳光九叶草LXGZXJ1 小时前
Linux-学习-07-VMware配置共享存储
linux·运维·服务器·数据库·学习
陌上烟雨寒2 小时前
es6 尚硅谷 学习
前端·学习·es6
solomonzw2 小时前
linux学习(十六)(集装箱(ulimits,cgroups,容器运行时,Docker))
linux·学习·docker
Lowe-小码3 小时前
Hive-基础入门
数据仓库·hive·hadoop
Leo来编程4 小时前
Python学习第十三天
python·学习
网络工程小王4 小时前
【网络协议详解】——BGP/MPLS IP VPN技术(学习笔记)
网络·笔记·网络协议·学习·华为
飞奔的马里奥4 小时前
30天学习Java第四天——JVM规范
java·jvm·学习
武昌库里写JAVA5 小时前
微服务架构: SpringCloud实战经验总结
java·开发语言·spring boot·学习·课程设计