概述介绍-和 Hive 关系、异同 | 学习笔记

简介: 快速学习 概述介绍-和 Hive 关系、异同

开发者学堂课程【大数据Impala教程概述介绍-和 Hive 关系、异同学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/722/detail/12884


概述介绍-和 Hive 关系、异同


内容介绍:

一、 Impala 基本介绍

二、 Impala Hive 关系

三、 Impala Hive 异同

 

一、Impala 基本介绍

说到 Impala 这款软件,就不得不介绍 Apache Hive Hive 是大数据里的一款速成公式软件,提供了用户编写 sql ,它帮助转换成 Impala 处理数据的一种能力。但是 Hive 有一个致命的缺点,就是当它转化成 Impala 的时候,提交执行的过程非常慢,所以在 Hive 中很难做一个实时的查询,基本上都要等待几分钟或者十几分钟,数据较大时等几十分钟甚至半个小时都有可能。这个时候就会猜想,在进行大数据分析的时候,数据大时一定的,那么能不能有一种工具也可以也可以进行 sql 查询,相当于关系型数据库,这时候 Impala 就出现了。 Impala 是由 Cloudera 这家公司提供的,非常著名的大数据商业公司,后来它把这款软件贡献给 Apache ,所以叫做 Apache  Impala Impala 就是所谓的 sql 查询工具,与 Hive 非常相似,但是它比 Hive 的查询效果、查询效率要高很多,是一种类似于实时的查询效果,官方测试性能比 Hive 10100倍,是当下数据领域中最快的 sql 查询工具, Impala 这款软件与 Hive 比较的原因是它工作时所依赖的环境、依赖的数据与 Hive 紧密吻合,更直白一点就是如何没有 Hive Impala 也不会单独存在, Hive Impala 在企业当中是一个相辅相成的关系,一个作为简单的数据预处理工作,另一个作为接近实时的查询。 Impala 是参照谷歌的新三篇论文( Caffeine —网络搜索引擎、 Pregel —分布式图计算、 Dremel —交互式分析工具)当中的 Dremel 实现而来,其中旧三篇论文分别是( BigTable GFS ManReduce )分别对应即将学的 HBase 和已经学习过的 HDFS 以及 MapReduce 。说到 Impala ,刚才已经提到它来源于 Hive ,工作的时候与 Hive 紧密结合,原因在于 Impala 的原数据就是用 Hive 的原数据,所共用一套, Impala 是一种基于 Hive 并使用内存进行计算,兼顾数据仓库,具有实时,批处理,多并发等优点。

 

二、 Impala Hive 关系

image.png

上图当中, Impala Hive  90% 的地方都是相同的,左边是 Hive 的接口,右边是 Impala 的接口,这两种都提供一种方式给用户去输入 sql ,在最下面是成熟数据 Storge 的地方,比如通常把数据放在 HDFS 上,上边是统一的资源管理( Resource  Management ),最大的区别在于中间计算这一部分叫做 Computer  Framework Hive 回想一下,所敲的 Hive  SQL  Syntax 一张表, SQL 会给它进行解析,编译成 mr 程序,通过 mr 程序来计算结果,在一个 SQL 当中,可能会进行多个 mr 程序计算,会有很多阶段,这时效率会非常高,而 Impala 做出的优化就在此处,那么 Impala Hive 最大的区别就在于它所写的 SQL 不在转换成 mr 程序来执行,而是执行计划数的方式。不转化成 mr 程序,意味着减少了提交申请资源的时间,减少了申请资源执行 mr 程序的时间,也避免了多个 mr 程序之间数据传递的时间,此处直接优化了执行效率,所以 Impala 执行速度很快。 Impala Hive 最大的关系在于它们使用同一套元数据,就是 Impala 直接使用 Hive 的元数据库。在 Hive 当中,把表、数据和文件之外这些映射关系统称为元数据,通常把它们保存在第三方 MySQL 中,在这个元数据中,它记录下库表、文件、字段和列的对应关系, Impala Hive 是共用同一套,这就意味着在使用 Impala 时,必须保证 Hive 的服务时正常的。 Hive 的其他服务暂时不说,但是 metastore 服务必须开启,如果不开启, Impala 就不会访问到元数据,虽然它是 Hive 的元数据,但是并不妨碍 Impala 正常使用,还可以对它进行相关的修改。在 SQL 语言层面,在 Hive 中能够执行的几乎在 Impala 中也可以执行,或者说 Impala 有一种趋势,逐渐发展为把 Hive SQL 都接种,现在还不能说百分之百接种。因此从这一点,明确了 Impala 是一种类似于 Hive SQL 查询工具,还对 Hive 做了一种优化,用 mr 程序执行效率极高,接近于实时的查询,另外要明确 Impala 的工具依赖于 Hive 的元数据存储服务,共用一套。

小结:

1. Impala 是一个实时的 sql 查询工具,类似于 Hive 的操作方式,只不过执行的的效率极高,号称当下大数据生态圈中执行效率最高的 sql 类软件。

2. Impala 来自于 Cloudera ,后来贡献给了 Apache

3. Impala 工作底层执行依赖于 Hive ,与 Hive 共用一套元数据存储,在使用 Impala 的时候,必须保证服务是正常可靠的,至少 metastore 开启。

4. Impala Hive 最大的不同在于不再把 sql 编译成 mr 程序执行,编译成执行计划数,它是类似于传统数据库的计算。

5. Impala sql 语法,几乎兼容 Hive sql 语句。

Impala 是一个适用于实时交互查询的 sql 软件, Hive 适合于批处理的 sql 软件,通常是两个互相配合工作。

 

三、Impala Hive 异同

Impala Hive 有很多的共同之处,如数据表元数据、 OOBC / JDBC 驱动、 SQL 语法、灵活的文件格式、存储资源池等,可以说 Impala 除了 SQL 执行之外,其余都是套用 Hive ,这是最大的一个相同点。

Impala Hive 最大的优化区别在于:没有使用 MapReduce 进行并计算,虽然 MapReduce 号称大数据中分布式计算的鼻祖,但也是相对于传统计算方式,传统计算方式处理效率极慢, mr 码可以进行数据的拆分,分布式计算,但是分布式计算不一定效率快,比如数据非常大,它也必须先 MapReduce ,所以 mr 码也不适合交互式, Impala 直接把这一块执行逻辑将它修改。

image.png

上图中,从上面开始,都是同一个 SQL ,不管是 Hive  SQL 或是 Impala  SQL ,都完全可以解析,因为它们语法几乎都一样。两个都对 SQL 进行解析,解析后制定一个执行计划开始执行,但是执行时出现了偏差, Hive 把执行计划编译成 mr 码程序去提交工作,执行的快慢都取决于 mr 码程序,而 Impala 是将执行计划变成执行计划树,而且最底层是 C 语言来实现的,此时效率非常高。

1. Impala 使用的优化技术

Impala 的最终实现分为前端和后端,前端是 Java 语言,后端是 C 语言来编写的,在它底层进行具体数据查询执行的过程中是使用 C 语言查询的,此时效率极高。

更好的 I O 调度, Impala 知道数据块所在的磁盘位置能够更好的利用多磁盘的优势,同时 Impala 支持直接数据块读取和本地代码计算 checksum

通过选择合适数据存储格式可以得到最好性能( Impala 支持多种存储格式)。

最大使用内存,中间结果不写磁盘,及时通过网络以 stream 的方式传递。

2. 执行计划

Hive 依赖于 MapReduce 执行框架,当编写了一个 sql 语句,执行 map > shuffle > reduce ,问题在于如果有下一个 MapReduce 程序,比如此个 sql 语句比较复杂,需要两个 mr 码数据执行,那就不可以执行, reduce 执行完之后传给下一个 MapReduce map ,在进行 shuffle reduce ,这样执行的效果费率非常低,一个查询会编译成多个 mr 码程序,中间结果传递各种方式,影响执行效率。但是 Impala 表现为一个执行计划树,也相当于一个执行过程,在此过程中,有一个执行片段的概念,这些阶段有的需要并行执行,有的需要顺序执行,它避免了像 Hive 的管道执行,必须按照 map > shuffle > reduce ,而是可以既兼顾了并发,又避免了中间数据在内存和磁盘之间进行变换位置,这也是 Impala 优点最重要的地方,完全将 mr 码摒弃了。

3. 数据流

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

4. 内存使用

Hive 在执行过程中如果内存放不下所有数据,则会使用外存也就是磁盘,以保证 Query 能顺序执行完,而 Impala 在内存放不下的时候会直接报错,版本1.0.1优先使用内存,以后版本应该会进行改进,从这一点也能看出来 Impala 也不能单独存在,当下适合与 Hive 做辅助,做一个配合。

5. 调度

Hive 的任务调度依赖于 Hadoop 的调度策略,而 Impala 调度由自己完成,目前有一种调度器 simple - schedule ,它会尽量满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的物理机器。

6. 容错

Hive 依赖于 Hadoop 的容错能力,相当于只做了 sql 的执行编译,如果在 Hadoop 当中没有容错能力,那么 Hive 也没有容错能力。 Impala 在执行过程中没有容错逻辑,如果在执行过程中发生故障,则直接返回错误(这与 Impala 的设计有关,因为 Impala 定位于实时查询,一次查询失败,再查一次就好了,再查一次的成本很低)。

7. 适用面

Hive 面向于批处理的查询任务,数据转换任务。 Impala 是实时数据分析,因为不支持 UDF,能处理的问题有一定的限制,与 Hive 配合使用,对 Hive 的结果数据集进行实时分析。 在当下企业当中,虽然 Impala 是针对于 Hive 所做的一种优化,极大的提高了它的计算速度,但是最好两者配合使用效率是最高的。针对一批复杂的数据,首先使用 Hive 的批处理,做一个简单的预处理相关操作,再进行提取结果使用 Impala 快速的查询分析,这样两个都可以互相配合使用,进一步提高了处理数据、查询数据的能力。

总结上述, Impala 在使用时不能够单独运行,这就是 Apache 的一款软件 Impala,一种实时查询的工具。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
28天前
|
SQL JSON 算法
hive学习笔记
hive学习笔记
|
4月前
|
存储 SQL 分布式计算
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
249 0
|
4月前
|
SQL 分布式计算 Hadoop
Hadoop学习笔记(HDP)-Part.15 安装HIVE
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
100 1
Hadoop学习笔记(HDP)-Part.15 安装HIVE
|
SQL 分布式计算 Oracle
CDH 搭建_Hive_安装和创建用户|学习笔记
快速学习 CDH 搭建_Hive_安装和创建用户
759 0
|
SQL 存储 边缘计算
HBase&Hive 2(三)|学习笔记
快速学习 HBase&Hive 2(三)
107 0
HBase&Hive 2(三)|学习笔记
|
SQL 存储 分布式计算
HBase&Hive 2(二)|学习笔记
快速学习 HBase&Hive 2(二)
77 0
HBase&Hive 2(二)|学习笔记
|
SQL JSON 数据库
Json 内容转换为 Hive 所支持的文本格式1 | 学习笔记
快速学习 Json 内容转换为 Hive 所支持的文本格式1
161 0
Json 内容转换为 Hive 所支持的文本格式1  |  学习笔记
|
SQL 缓存 NoSQL
实时同步 Mysql 到 Hive-1 | 学习笔记
快速学习实时同步 Mysql 到 Hive-1
443 0
|
SQL 存储 分布式计算
SparkSQL 读写_Hive_整合 | 学习笔记
快速学习 SparkSQL 读写_Hive_整合
120 0
SparkSQL 读写_Hive_整合 | 学习笔记
|
SQL 分布式计算 Java
SparkSQL 读写_Hive_写入数据_配置 | 学习笔记
快速学习 SparkSQL 读写_Hive_写入数据_配置
186 0