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

2023-10-27

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

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

优点:

  • 支持SQL查询,快速查询大数据。
  • 可以对已有数据进行查询,减少数据的加载,转换。
  • 多种存储格式可以选择(Parquet, Text, Avro, RCFile, SequeenceFile)。
  • 可以与Hive配合使用。

缺点:

  • 不支持用户定义函数UDF。
  • 不支持text域的全文搜索。
  • 不支持Transforms。
  • 不支持查询期的容错。
  • 对内存要求高。

在Cloudera的测试中,Impala的查询效率比Hive有数量级的提升。从技术角度上来看,Impala之所以能有好的性能,主要有以下几方面的原因。

  • Impala不需要把中间结果写入磁盘,省掉了大量的I/O开销。
  • 省掉了MapReduce作业启动的开销。MapReduce启动task的速度很慢(默认每个心跳间隔是3秒钟),Impala直接通过相应的服务进程来进行作业调度,速度快了很多。
  • Impala完全抛弃了MapReduce这个不太适合做SQL查询的范式,而是像Dremel一样借鉴了MPP并行数据库的思想另起炉灶,因此可做更多的查询优化,从而省掉不必要的shuffle、sort等开销。
  • 通过使用LLVM来统一编译运行时代码,避免了为支持通用编译而带来的不必要开销。
  • 用C++实现,做了很多有针对性的硬件优化,例如使用SSE指令。
  • 使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销。

虽然Impala是参照Dremel来实现的,但它也有一些自己的特色,例如Impala不仅支持Parquet格式,同时也可以直接处理文本、SequenceFile等Hadoop中常用的文件格式。另外一个更关键的地方在于,Impala是开源的,再加上Cloudera在Hadoop领域的领导地位,其生态圈有很大可能会在将来快速成长。

原文地址:https://blog.csdn.net/gemini_two/article/details/78992484

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

impala与hive的比较以及impala的优缺点 的相关文章

  • Hive“ANALYZE TABLE”如何从java执行

    我需要计算配置单元表中的行数 为此 我正在使用查询 ANALYZE TABLE p 7 COMPUTE STATISTICS noscan 我想通过java获取结果 我正在尝试以下操作 代码并没有运气 我得到的错误是 Exception i
  • 如何从 hive cli 运行 hive 脚本

    我现在有 hive 脚本 custsales hql 我想从 hive cli 运行它 hive pract5 gt run user training hdfs location custsales hql 但它不执行 请指导 我知道我们
  • Presto 和 Impala 之间的基本架构、SQL 合规性和数据使用场景有哪些差异?

    有专家能从这些角度对Presto和Impala的区别给出一些简洁的答案吗 基础架构设计 SQL合规性 现实世界的延迟 任何 SPOF 或容错功能 结构化和非结构化数据使用场景表现 Apache Impala 是仅适用于 HDFS Hive
  • Hive 左外连接长期运行

    Hortonworks HDP 2 3 0 Hive 0 14 Table T1 partition on col1 no bucket ORC 应用程序 1 2 亿行和 6GB 数据大小Table T2 partition on col2
  • 如何将键值对加载到hive表中?

    以下是我的数据集 Jun name balaji id 101 Mar name kumar id 102 创建的表 create table sample month string name string id int row forma
  • 向将数组作为字段之一的 Hive 表插入行时出现错误 10293

    我使用以下查询创建了一个配置单元表 create table arraytbl id string model string cost int colors array
  • 将 Hive 表导出到 hdfs 中的 csv

    我知道在 Hive 中将表保存到 csv 或其他文本文件 时 分隔符存在一个已知问题 所以我想知道你们是否可以帮助我解决这个问题 我有一个现有的表 表 A 我想将其以 csv 格式保存到 hdfs 通过阅读其他回复 我相信我必须首先创建一个
  • HIVE JDBC ThriftHive$Client.sendBase

    我在 Hadoop hive 上工作 我已经安装了 hadoop 和 hive 它在命令提示符下运行良好 我还创建了 hive 的 MySQL 元存储 我在 hive site xml 文件中定义了 HIVE DB 数据库名称 MySQL
  • 是否可以直接从文件加载镶木地板表?

    如果我有一个二进制数据文件 可以转换为 csv 格式 有什么方法可以直接从中加载镶木地板表吗 许多教程显示将 csv 文件加载到文本表 然后从文本表加载到镶木地板表 从效率的角度来看 是否可以像我已有的那样直接从二进制文件加载镶木地板表 理
  • Google Dataproc 支持 Apache Impala 吗?

    我刚开始使用云服务 并且浏览 Google 的云平台相当令人生畏 当谈到 Google Dataproc 时 他们确实宣传 Hadoop Spark 和 Hive 我的问题是 Impala 是否可用 我想使用所有这四种工具来做一些基准测试项
  • Hive中group by后是否可以连接字符串字段

    我正在评估 Hive 需要在 group by 之后进行一些字符串字段连接 我找到了一个名为 concat ws 的函数 但看起来我必须显式列出所有要连接的值 我想知道是否可以在 Hive 中使用 concat ws 做这样的事情 这是一个
  • AWS Lambda 错误:无法导入模块“function_name”:没有名为“module._module”的模块

    阅读后请特别查看屏幕截图 我正在 AWS Lambda 上部署一个使用该包的 python 脚本impyla它依赖于包bitarray from impala dbapi import connect 我的Python文件名为authori
  • 将日期字符串转换为“MM/DD/YY”格式

    我刚刚看到这个例子 我该如何解决这个问题 Hive 元存储包含一个名为 Problem1 的数据库 其中包含一个名为 customer 的表 customer 表包含 9000 万条客户记录 90 000 000 每条记录都有一个生日字段
  • 通过 hive 访问 maxmind 的 GeoIP-country.mmdb 数据库时出现异常

    我有一个自定义 Hive UDF 来访问 MaxmindGeoIP 国家 mmdb通过 add file pqr mmdb 添加到 Hive 资源的数据库 编译好的 UDF 添加为 add jar abc jar 当我运行 hive 查询时
  • 如何将Hive数据表迁移到MySql?

    我想知道如何将日期从 Hive 转移到 MySQL 我看过有关如何将 Hive 数据移动到 Amazon DynamoDB 的示例 但没有看到有关如何将 Hive 数据移动到 MySQL 等 RDBMS 的示例 这是我在 DynamoDB
  • hive 从两个数组创建映射或键/值对

    我有两个具有相同数量值的数组 它们映射为 1 1 我需要从这两个数组创建一个键 值对或映射 键 值 任何想法或提示都会有帮助 当前表结构 USA WEST NUMBER Street City 135 Pacific Irvine USA
  • 使用 Hiveql 循环

    我正在尝试合并 2 个数据集 例如 A 和 B 数据集 A 有一个变量 Flag 它有 2 个值 我并没有只是将两个数据合并在一起 而是尝试根据 标志 变量合并两个数据集 合并代码如下 create table new data as se
  • 计算 pyspark df 列中子字符串列表的出现次数

    我想计算子字符串列表的出现次数 并根据 pyspark df 中包含长字符串的列创建一个列 Input ID History 1 USA UK IND DEN MAL SWE AUS 2 USA UK PAK NOR 3 NOR NZE 4
  • hive - 在值范围之间将一行拆分为多行

    我在下面有一张表 想按从开始列到结束列的范围拆分行 即 id 和 value 应该对开始和结束之间的每个值重复 包括两者 id value start end 1 5 1 4 2 8 5 9 所需输出 id value current
  • Hive:如何分解嵌入 CSV 文件中的 JSON 列?

    从 CSV 文件 带有标题和管道分隔符 中 我得到了以下两个内容 其中包含一个 JSON 列 内部有一个集合 如下所示 第一种情况 使用没有名称的 JSON 集合 ProductId IngestTime ProductOrders 918

随机推荐

  • 二进制补码运算

    二进制负数的在计算机中采用补码的方式表示 很多人很好奇为什么使用补码 直接使用原码表示多好 看上去更加直观和易于计算 然而事实告诉我们 这种直观只是我们人类的一厢情愿罢了 在计算机看来 补码才是它们最想要的 那么 为什么计算机使用补码更好
  • Flask对数据库的增删改查

    一 从数据库获取数据返回 在配置好连接数据库的文件后 编写类视图 定义get方法 使用marshal返回数据 class SubResorce Resource def get self ret Sub query all return m
  • IDEA上传项目提示Push rejected: Push to origin/master was rejected的解决办法

    idea中 发布项目到码云 push 提示 push to origin master war rejected 解决方案如下 切换到自己项目所在的目录 右键选择git bash here 在窗口中依次输入命令 git pull git p
  • DVWA靶场实战

    提示 本文主要讲解DVWA靶场的主要功能和用处 简单的了解并学习DVWA靶场实战 不断地更新 一 DVWA靶场的功能介绍 DVWA共有十个模块 分别是 Brute Force 暴力 破解 Command Injection 命令行注入 CS
  • 输出字符串的子串

    我们经常碰到这样一个问题 怎样快速输出一个字符串的子串 这种问题通常有两种形式 1 输出连续子串 例如 假设字符串的长度为n 其非空子串的数目为你n n 1 2个 例如字符串 abc 的连续子串有 a b c ab bc abc 利用代码实
  • Flink 1.10编译实战(CDH版本)

    Flink1 10增加了一些新的特性 Flink 1 10 0 正式宣告发布 作为 Flink 社区迄今为止规模最大的一次版本升级 Flink 1 10 容纳了超过 200 位贡献者对超过 1200 个 issue 的开发实现 包含对 Fl
  • mysql组内排序

    比如说要获取班级的前3名 oracle 可以用 over partition by 来做 mysql就可以用GROUP CONCAT GROUP BY substring index实现 考试表 DROP TABLE IF EXISTS t
  • NLP:nltk+stanfordNLP

    1 NLTK import nltk form nltk book import 2 NLTK中使用stanfordNLP http www zmonster me 2016 06 08 use stanford nlp package i
  • SpringCloud Alibaba史上最强详解与史上最系统框架搭建

    框架实现代码资源地址 springCloud dataservice bus zip springcloudalibaba搭建 Java文档类资源 CSDN下载 目录 一 官网集合 Springboot官网 中文文档 Mybatis官网 S
  • TCP与UDP(非常详细)

    笔记记录 目录 前言 TCP UDP TCP UDP 区别 总结 前言 TCP IP模型是一些列协议的总称 TCP UDP IP FTP HTTP ICMP SMTP 这些协议可以划分为四层 链路层 网络层 传输层 应用层 TCP和UDP都
  • Oracle 11g客户端连接Oracle 12c服务器错误 ORA-28040

    问题描述 oracle服务器端版本 oracle 12 2 0 1 0 oracle客户端版本 oracle 11 2 0 1 0 在客户端访问oracle 12c提示如下错误 sqlplus scott scott 192 168 100
  • JSON是什么?如何正确理解?

    1 背景介绍 什么是JSON JSON JavaScript Object Notation JS 对象标记 是一种轻量级的数据交换格式 它基于 ECMAScript w3c制定的js规范 的一个子集 采用完全独立于编程语言的文本格式来存储
  • 遗传算法解释

    遗传算法是一种基于自然遗传和进化规律的人工智能算法 它通过模拟生物进化的过程 来解决各种复杂问题 遗传算法的基本流程如下 初始化 随机生成一些解作为初始种群 评估 评估每个解的适应度 根据适应度的高低决定哪些解具有更好的进化前景 交叉 选择
  • 最大连续区间和C++

    在求连续区间的最大和是一种动态规划的常见例题 那么如何能快速求算得一个长度为n的数组的最大连续区间和 第一反应当然是 通过暴力计算每一个区间的和进而求其最大值 但时间复杂度到达了不可接受的O n 2 而比较好的算法如下 include
  • 软件质量属性:可测试性

    测试的目的 尽可能多地发现软件中存在的BUG 不符合需求的部分或者是未实现的需求 测试的意义 尽可能确保软件正式上线运行后不出现问题 减少潜在的风险和损失 可测试性定义 指软件测试的难易度和效率 如果测试结果越直观 测试效率越高 可测试性就
  • 【100天精通Python】Day55:Python 数据分析_Pandas数据选取和常用操作

    目录 Pandas数据选择和操作 1 选择列和行 2 过滤数据 3 添加 删除和修改数据 4 数据排序 Pandas数据选择和操作 Pandas是一个Python库 用于数据分析和操作 提供了丰富的功能来选择 过滤 添加 删除和修改数据 1
  • VUE element-ui之table表格内容样式(颜色)修改

    要求将表格中的负数显示为红色 实现步骤 定义样式方法
  • Motion Partition

    Object Boundary Based motion partition scheme e is the best approximate of foreground picture but wastes coding d is a t
  • qt打包生成exe_Qt-Installer-Framework使用(一)

    Qt Installer Framework 以下简称QIFW 是 Qt 官方出品的一款功能强大的打包工具 可以满足我们日常使用中大部分需求 环境说明 OS Qt MinGW QIFW Windows7 64 Qt 5 7 1 5 3 3
  • impala与hive的比较以及impala的优缺点

    Impala相对于Hive所使用的优化技术 没有使用MapReduce进行并行计算 虽然MapReduce是非常好的并行计算框架 但它更多的面向批处理模式 而不是面向交互式的SQL执行 与MapReduce相比 Impala把整个查询分成一