Impala和Hive的关系(详解)

article/2025/9/21 5:57:26

Impala和Hive的关系

Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。并且impala兼容Hive的sql解析,实现了Hive的SQL语义的子集,功能还在不断的完善中。

Hive

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。Hive支持HSQL,是一种类SQL。

也由于这种机制导致Hive最大的缺点是慢。Map/reduce调度本身只适合批量,长周期任务,类似查询这种要求短平快的业务,代价太高。

Impala

impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具,Impala没有再使用缓慢的Hive+MapReduce批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine三部分组成),可以直接从HDFS或HBase中用SELECT、JOIN和统计函数查询数据,从而大大降低了延迟。

hive和impala官网:

http://hive.apache.org/
http://impala.apache.org

 

Impala与Hive的关系

  Impala 与Hive都是构建在Hadoop之上的数据查询工具各有不同的侧重适应面,但从客户端使用来看Impala与Hive有很多的共同之处,如数据表元数 据、ODBC/JDBC驱动、SQL语法、灵活的文件格式、存储资源池等。Impala与Hive在Hadoop中的关系如下图所示。Hive适合于长时间的批处理查询分析而Impala适合于实时交互式SQL查询,Impala给数据分析人员提供了快速实验、验证想法的大数 据分析工具。可以先使用hive进行数据转换处理,之后使用Impala在Hive处理后的结果数据集上进行快速的数据分析。

 

            

 

 

 

Impala相对于Hive所使用的优化技术

  • 1、没有使用 MapReduce进行并行计算,虽然MapReduce是非常好的并行计算框架,但它更多的面向批处理模式,而不是面向交互式的SQL执行。与 MapReduce相比:Impala把整个查询分成一执行计划树,而不是一连串的MapReduce任务,在分发执行计划后,Impala使用拉式获取 数据的方式获取结果,把结果数据组成按执行树流式传递汇集,减少的了把中间结果写入磁盘的步骤,再从磁盘读取数据的开销。Impala使用服务的方式避免 每次执行查询都需要启动的开销,即相比Hive没了MapReduce启动时间。
  • 2、使用LLVM产生运行代码,针对特定查询生成特定代码,同时使用Inline的方式减少函数调用的开销,加快执行效率。
  • 3、充分利用可用的硬件指令(SSE4.2)。
  • 4、更好的IO调度,Impala知道数据块所在的磁盘位置能够更好的利用多磁盘的优势,同时Impala支持直接数据块读取和本地代码计算checksum。
  • 5、通过选择合适的数据存储格式可以得到最好的性能(Impala支持多种存储格式)。
  • 6、最大使用内存,中间结果不写磁盘,及时通过网络以stream的方式传递。

 

 

 

Impala与Hive的异同

  • 数据存储:使用相同的存储数据池都支持把数据存储于HDFS, HBase。
  • 元数据:两者使用相同的元数据。
  • SQL解释处理:比较相似都是通过词法分析生成执行计划。

 

  执行计划

  • Hive: 依赖于MapReduce执行框架,执行计划分成 map->shuffle->reduce->map->shuffle->reduce…的模型。如果一个Query会 被编译成多轮MapReduce,则会有更多的写中间结果。由于MapReduce执行框架本身的特点,过多的中间过程会增加整个Query的执行时间。
  • Impala: 把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个Impalad执行查询,而不用像Hive那样把它组合成管道型的 map->reduce模式,以此保证Impala有更好的并发性和避免不必要的中间sort与shuffle。

 

  数据流

  • Hive: 采用推的方式,每一个计算节点计算完成后将数据主动推给后续节点。
  • Impala: 采用拉的方式,后续节点通过getNext主动向前面节点要数据,以此方式数据可以流式的返回给客户端,且只要有1条数据被处理完,就可以立即展现出来,而不用等到全部处理完成,更符合SQL交互式查询使用。

 

  内存使用

  • Hive: 在执行过程中如果内存放不下所有数据,则会使用外存,以保证Query能顺序执行完。每一轮MapReduce结束,中间结果也会写入HDFS中,同样由于MapReduce执行架构的特性,shuffle过程也会有写本地磁盘的操作。
  • Impala: 在遇到内存放不下数据时,当前版本1.0.1是直接返回错误,而不会利用外存,以后版本应该会进行改进。这使用得Impala目前处理Query会受到一 定的限制,最好还是与Hive配合使用。Impala在多个阶段之间利用网络传输数据,在执行过程不会有写磁盘的操作(insert除外)。

 

  调度

  • Hive: 任务调度依赖于Hadoop的调度策略。
  • Impala: 调度由自己完成,目前只有一种调度器simple-schedule,它会尽量满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的物理机器。调度器 目前还比较简单,在SimpleScheduler::GetBackend中可以看到,现在还没有考虑负载,网络IO状况等因素进行调度。但目前 Impala已经有对执行过程的性能统计分析,应该以后版本会利用这些统计信息进行调度吧。

 

  容错

  • Hive: 依赖于Hadoop的容错能力。
  • Impala: 在查询过程中,没有容错逻辑,如果在执行过程中发生故障,则直接返回错误(这与Impala的设计有关,因为Impala定位于实时查询,一次查询失败, 再查一次就好了,再查一次的成本很低)。但从整体来看,Impala是能很好的容错,所有的Impalad是对等的结构,用户可以向任何一个 Impalad提交查询,如果一个Impalad失效,其上正在运行的所有Query都将失败,但用户可以重新提交查询由其它Impalad代替执行,不 会影响服务。对于State Store目前只有一个,但当State Store失效,也不会影响服务,每个Impalad都缓存了State Store的信息,只是不能再更新集群状态,有可能会把执行任务分配给已经失效的Impalad执行,导致本次Query失败。

 

  适用面

  • Hive: 复杂的批处理查询任务,数据转换任务。
  • Impala:实时数据分析,因为不支持UDF,能处理的问题域有一定的限制,与Hive配合使用,对Hive的结果数据集进行实时分析。

 

 

  Impala 与Hive都是构建在Hadoop之上的数据查询工具,但是各有不同侧重,那么我们为什么要同时使用这两个工具呢?单独使用Hive或者Impala不可以吗?

 

 

一、介绍Impala和Hive

  (1)Impala和Hive都是提供对HDFS/Hbase数据进行SQL查询的工具,Hive会转换成MapReduce,借助于YARN进行调度从而实现对HDFS的数据的访问,而Impala直接对HDFS进行数据查询。但是他们都是提供如下的标准SQL语句,在机身里运行。

            

 

  (2)Apache Hive是MapReduce的高级抽象,使用HiveQL,Hive可以生成运行在Hadoop集群的MapReduce或Spark作业。Hive最初由Facebook大约在2007年开发,现在是Apache的开源项目。

  Apache Impala是高性能的专用SQL引擎,使用Impala SQL,因为Impala无需借助任何的框架,直接实现对数据块的查询,所以查询延迟毫秒级。Impala受到Google的Dremel项目启发,2012年由Cloudera开发,现在是Apache开源项目。

 

 

 

 

二、Impala和Hive有什么不同?

  (1)Hive有很多的特性:

    1、对复杂数据类型(比如arrays和maps)和窗口分析更广泛的支持

    2、高扩展性

    3、通常用于批处理

  (2)Impala更快

    1、专业的SQL引擎,提供了5x到50x更好的性能

    2、理想的交互式查询和数据分析工具

    3、更多的特性正在添加进来

 

 

 

 

三、高级概述:

        

 

 

 

四、为什么要使用Hive和Impala?

  1、为数据分析人员带来了海量数据分析能力,不需要软件开发经验,运用已掌握的SQL知识进行数据的分析。

  2、比直接写MapReduce或Spark具有更好的生产力,5行HiveQL/Impala SQL等同于200行或更多的Java代码。

  3、提供了与其他系统良好的互操作性,比如通过Java和外部脚本扩展,而且很多商业智能工具支持Hive和Impala。

 

 

 

五、Hive和Impala使用案例

  (1)日志文件分析

  日志是普遍的数据类型,是当下大数据时代重要的数据源,结构不固定,可以通过Flume和kafka将日志采集放到HDFS,然后分析日志的结构,根据日志的分隔符去建立一个表,接下来运用Hive和Impala 进行数据的分析。例如:

      

 

 

 

  (2)情感分析

  很多组织使用Hive或Impala来分析社交媒体覆盖情况。例如:

          

 

 

 

 

  (3)商业智能

  很多领先的BI工具支持Hive和Impala

      

 

参考原文


http://chatgpt.dhexx.cn/article/H1mI6rxP.shtml

相关文章

impala理论篇之三:impala介绍

简介 Impala是Cloudera公司主导开发的新型查询系统,是Google Dremel的开源实现。它提供SQL语义,能够查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但是由于Hive底层执行使用的是MapReduce引擎&#xff…

Impala优化

作为铺垫,本文首先对Broadcast Join和Partitioned Join进行简要介绍。 Broadcast Join 顾名思义,Broadcast Join就是广播的方式进行Join。以下图为例,假设Join操作为SELECT A JOIN B ON A.idB.id,Broadcast Join就是将B表&#…

impala与hive的比较以及impala的有缺点

最近读的几篇关于impala的文章,这篇良心不错:https://www.biaodianfu.com/impala.html(本文截取部分内容) Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的…

impala命令

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 impala 前言一、impala是什么 ?二、使用步骤1.数据拼接2.exists()cast()regexp_like()nvl() 前言 提示:这里可以添加本文要记录的大概内容&#xff1…

Apache Impala(1):Impala简介

1 Impala 基本介绍 impala 是 cloudera 提供的一款高效率的 sql 查询工具,提供实时的查询效果,官方测试性能比 hive 快 10 到 100 倍,其 sql 查询比 sparkSQL 还要更加快速,号称是当前大数据领域最快的查询 sql 工具&#xff0c…

大数据Impala系列之初识Impala

一、impala 概述 1、什么是Impala? Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C 和Java编写的开源软件。 与其他Hadoop的SQL引擎相比,它提供了高性能和低延迟。 2、为什么选…

Impala 安装部署

文章目录 1. 安装前提2. 下载安装包,依赖包3. 虚拟机新增磁盘 (磁盘空间有余则跳过此步骤)3.1 关机新增磁盘3.2 开机挂载磁盘 4. 配置本地 yum 源4.1 上传安装包解压4.2 配置本地yum源信息 5. 安装Impala5.1 集群规划5.2 主节点安装5.3 从节点…

Apache Impala : Impala安装部署

Impala Impala安装部署安装前提下载安装包、依赖包虚拟机新增磁盘(可选)关机新增磁盘开机挂载磁盘 配置本地yum源上传安装包解压配置本地yum源信息 安装Impala集群规划主节点安装从节点安装 修改Hadoop、Hive配置修改hive配置修改hadoop配置复制hadoop、…

Impala的使用

Impala的核心开发语言是sql语句,Impala有shell命令行窗口,以及JDBC等方式来接收sql语句执行, 对于复杂类型分析可以使用C或者Java来编写UDF函数。 Impala的sql语法是高度集成了Apache Hive的sql语法,Impala支持Hive支持的数据类型…

impala shell

目录 一、impala shell内部命令 1.进入impala交互命令行 2.内部命令(同sql操作类似) 3.退出impala 4.连接到指定的机器impalad上去执行 5.增量刷新 6.全量刷新 7.帮助 8.查看sql语句的执行计划 9.打印出更加详细的执行步骤 10.设置显示级别&am…

Impala的简单入门

一、Impala概述 什么是Impala? Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C 和Java编写的开源软件。 与其他Hadoop的SQL引擎相比,它提供了高性能和低延迟。 换句话说&#x…

Impala 介绍

文章目录 1. Impala基本介绍2. Impala与Hive关系3. Impala与Hive异同3.1 Impala使用的优化技术3.2 执行计划3.3 数据流3.4 内存使用3.5 调度3.6 容错3.7 适用面 4. Impala架构4.1 Impalad4.2 Impala State Store4.3 CLI4.4 Catalogd(目录) 5. Impala查询…

Impala 安装

1、集群准备 1.1、安装Hadoop,Hive Impala的安装需要提前装好Hadoop,Hive这两个框架hive需要在所有的Impala安装的节点上面都要有,因为Impala需要引用Hive的依赖包hadoop的框架需要支持C程序访问接口,查看下图,如果有该路径有.s…

impala详解

0 简介 Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和**HBase**中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程&a…

Impala基础知识

概述 Impala是由Cloudera公司开发的新型查询系统,参照Dremel系统进行设计的。提供SQL语义,能查询存储在Hadoop的HDFS和HBase上的PB级大数据,在性能上比Hive高出3~30倍。 基于Hive的大数据实时分析查询引擎,其运行需要依赖于Hive…

大数据之 impala教程

一、什么是Impala? Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C 和Java编写的开源软件。 与其他Hadoop的SQL引擎相比,它提供了高性能和低延迟。 换句话说,Impala是…

impala入门(一篇就够了)

文章目录 01 引言02 impala概述2.1 简介2.2 架构2.2.1 Impalad(守护进程)2.2.2 Statestore(存储状态)2.2.3 metadata(元数据)/metastore(元存储) 03 impala 安装04 impala 接口05 im…

大数据——Impala工具使用

目录 一、Impala概述 二、Impala优点 三、Impala和Hive 3.1 Impala和Hive的关系 3.2 Impala和Hive的区别 五、Impala查询过程 六、Impala安装 七、impala-shell命令 八、数据库语句 数据库命令 数据表命令 视图操作 Impala数据导入 刷新Impala数据 九、Java API 一…

近端策略优化算法PPO

本文介绍近端策略优化算法(Proximal Policy Optimization)也就是PPO。 文章目录 前言一、on-policy和off-policy1.1 on-policy和off-policy的概念1.2 Importance Sampling的概念 二、TRPO、PPO算法2.1 Trust Region Algorithms2.2 Stochastic Gradient A…

【强化学习】PPO算法求解倒立摆问题 + Pytorch代码实战

文章目录 一、倒立摆问题介绍二、PPO算法简介三、详细资料四、Python代码实战4.1 运行前配置4.2 主要代码4.3 运行结果展示4.4 关于可视化的设置 一、倒立摆问题介绍 Agent 必须在两个动作之间做出决定 - 向左或向右移动推车 - 以使连接到它的杆保持直立。 二、PPO算法简介 …