【作者主页】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 高出 330 倍。一、Impala 简介Impala 是由 Cloudera 开发的查询系统它提供了 SQL 语义能查询存储在 Hadoop 的 HDFS 和 HBase 上的 PB 级别海量数据。Hive 虽然也提供了 SQL 语义但是当采用 MapReduce 作为执行引擎时Hive 底层执行任务最终仍然需要借助于 MapReduce而 MapReduce 是一个面向批处理的非实时计算框架不能满足查询的实时交互性。Impala 最初是参照 Dremel 系统进行设计的Dremel 系统是 Google 开发的交互式数据分析系统可以在 23 秒内分析 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 三部分组成具体如下。1ImpaladImpalad 是 Impala 的一个进程负责协调客户端提交的查询的执行给其他 Impalad 分配任务以及收集其他 Impalad 的执行结果进行汇总。另外Impalad 也会执行其他 Impalad 给其分配的任务主要对本地 HDFS和 HBase里的部分数据进行操作。Impalad进程主要包含 Query Planner、Query Coordinator 和 Query Exec Engine 3 个模块与 HDFS 的数据节点HDFS DN运行在同一节点上并且完全分布运行在 MPP 架构上。2State Store负责收集分布在集群中各个 Impalad 进程的资源信息用于查询的调度。State Store 会创建一个 statestored 进程来跟踪集群中的 Impalad 的健康状态及位置信息。statestored 进程通过创建多个线程来处理 Impalad 的注册订阅以及与各个 Impalad 保持心跳连接。另外各Impalad 都会缓存一份 State Store 中的信息。当 State Store 离线后Impalad 一旦发现 State Store 处于离线状态时就会进入恢复模式并进行反复注册。当 State Store 重新加入集群后自动恢复正常更新缓存数据。3CLICLI 给用户提供了执行查询的命令行工具同时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 高 330 倍。Impala 由 Impalad、State Store 和 CLI 三部分组成查询执行经历注册订阅、提交查询、获取元数据与数据地址、分发任务、汇聚结果、返回结果六个步骤。Impala 与 Hive 共享存储数据池、元数据和相似的 SQL 解析方式但 Impala 适合实时交互式小数据量查询Hive 适合长时间批处理二者配合使用效果最佳。欢迎点赞 | 收藏⭐ | 评论✍ | 关注