首页
学习
活动
专区
圈层
工具
发布

Hive执行引擎深度解析:从MapReduce到Tez再到Spark的演进与调优指南

在Hive的架构中,执行引擎负责将HiveQL编译生成的逻辑执行计划转化为具体的物理执行计划,并调度计算资源完成数据处理任务。...理解执行引擎的关键作用,还需要认识到其在查询优化中的基础性地位。执行引擎的特性直接决定了优化器的优化策略是否有效。...在Hive中,当用户提交一条HQL(Hive Query Language)语句后,Hive首先将其解析为逻辑执行计划,然后通过编译器生成基于MapReduce的物理执行计划。...在后续章节中,我们将深入探讨Spark执行引擎如何进一步推动大数据处理的现代化,以及如何在这些引擎之间做出权衡决策。...例如,Hive UDF(用户自定义函数)可能需要适配Spark的API规范,部分Hive特性(如事务表ACID支持)在Spark中的行为略有差异。

35210

大数据工程师必读:Hive性能优化第一步——正确认识Hive的三大执行引擎

本文深入剖析Hive三大执行引擎(MapReduce, Tez, Spark)的底层机制与性能差异,并教你如何根据业务场景选择最优引擎,轻松实现查询效率数倍乃至百倍提升!...通用 DAG 引擎:不再局限于 Map 和 Reduce 阶段,可以表达任意复杂的任务依赖关系图(DAG)。 运行时优化:在运行时动态优化物理执行计划(例如,决定任务的并行度、连接顺序等)。...复杂查询高效执行:一个复杂的多阶段 Hive SQL 查询可以被编译成一个大的 Tez DAG,在一个 Application 中执行完成,避免了多个 MR Job 串联的开销和中间落盘。...运行时优化潜力:Tez 的运行时优化器可以在实际执行时根据数据统计信息等做出更优的决策。 适用场景: Tez 是替代 MR 的首选引擎,对大多数 Hive SQL 性能提升非常明显。...有向无环图:同样使用 DAG 描述执行计划,但 Spark DAG 在 Driver 端构建(逻辑计划 -> 物理计划)。

73400
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    深入剖析Tez原理

    2.3 Runtime优化 任务运行时,程序知晓更多任务相关的信息,通过这些信息,我们可以动态修改修改执行计划,比如:修改mapper或reducer数量,决定何时启动reducer等。...在Tez中,不同组件通过不同事件类型,进行通信。...2.5 其他优化措施 Tez Session: 与数据库session相似,在同一个Tez Session中,可串行执行多个Tez Dag。...这也是为什么在Tez-UI中,一个HQL任务,只有一个Application,却有多个DAG(MR中一个HQL任务,有多个Application)。 ? Tez相关参数: ? ?...优点: 减少作业执行过程中JVM的创建与销毁带来的开销 减小对RM的请求压力 运行在同一container上task之间的数据共享。比如,MapJoin中可以通过共享小表数据的方式,减少资源消耗。

    5K31

    大数据开发:Hive on Spark设计原则及架构

    总的来说,Hive on Spark的设计思路,是重用Hive逻辑层面的功能,从生成物理计划开始,提供一整套针对Spark的实现,比如SparkCompiler、SparkTask等,最终实现Hive查询作为...Hive on Spark设计原则 ①尽可能少改动Hive的代码,从而不影响Hive目前对MapReduce和Tez的支持。...同时,Hive on Spark保证对现有的MapReduce和Tez模式在功能和性能方面不会有任何影响。 ②对于选择Spark的用户,应使其能够自动的获取Hive现有的和未来新增的功能。...不同于MapReduce中Map+Reduce的两阶段执行模式,Spark采用DAG执行模式,因此一个SparkTask包含了一个表示RDD转换的DAG,我们将这个DAG包装为SparkWork。...我们可以使用Spark提供的Accumulator来实现该功能。 ⑦测试 除了一般的单元测试以外,Hive还提供了Qfile Test,即运行一些事先定义的查询,并根据结果判断测试是否通过。

    1.1K20

    当我们在学习Hive的时候在学习什么?「硬刚Hive续集」

    我上面讲的HiveSQL转化为MR任务的过程只适用于Hive3.0以下版本。在Hive3.0+版本中这个默认执行引擎被替换成了Tez。 为什么抛弃MR任务?...举个栗子看优势,直接看下图,Tez可以将多个有依赖的作业转换为一个作业(这样只需写一次HDFS,且中间节点较少),从而大大提升DAG作业的性能。...Tez很早就已被Hortonworks用于Hive引擎的优化,经测试,性能提升约100倍。 ? 在Hive3.0中,Hive终于将执行引擎切换到了Tez。Hive终于不在那么慢了。...Spark on Hive的支持 Spark通过Spark-SQL使用Hive 语句,操作Hive,底层运行的还是Spark rdd。在很多大公司,都实现了对Spark on Hive的支持。...来操作Hive表中的数据 详细可以参考:《Spark on Hive & Hive on Spark,傻傻分不清楚》 另外,还有Hive3.0中更多的特性,我们在后面再一一解答。

    89040

    Hive计算引擎大PK,万字长文解析MapRuce、Tez、Spark三大引擎

    ,该元数据用于对查询树中的表达式进行类型检查,以及基于查询谓词修建分区; 步骤5:编译器生成的计划是分阶段的DAG,每个阶段要么是 map/reduce 作业,要么是一个元数据或者HDFS上的操作。...Tez可以允许小数据集完全在内存中处理,而MapReduce中没有这样的优化。仓库查询经常需要在处理完大量的数据后对小型数据集进行排序或聚合,Tez的优化也能极大地提升效率。...再举一例,一般来说尽可能的先实施聚合操作(Aggregate)然后再join 这种优化自动完成,在调优时不需要考虑。...如果客户端需要使用更一般的SparkContext的功能,可以自定义一个任务并通过SparkClient发送到RemoteDriver上执 行。...这可能会进一步影响第一个查询的性能。 在用户较长期会话中,这个额外时间不会导致任何问题,因为它只在第一次查询执行时发生。然而,诸如Oozie发起的Hive工作之类的短期绘画可能无法实现最佳性能。

    4.5K43

    Hive计算引擎大PK,万字长文解析MapRuce、Tez、Spark三大引擎

    ,该元数据用于对查询树中的表达式进行类型检查,以及基于查询谓词修建分区; 步骤5:编译器生成的计划是分阶段的DAG,每个阶段要么是 map/reduce 作业,要么是一个元数据或者HDFS上的操作。...Tez可以允许小数据集完全在内存中处理,而MapReduce中没有这样的优化。仓库查询经常需要在处理完大量的数据后对小型数据集进行排序或聚合,Tez的优化也能极大地提升效率。...再举一例,一般来说尽可能的先实施聚合操作(Aggregate)然后再join 这种优化自动完成,在调优时不需要考虑。...如果客户端需要使用更一般的SparkContext的功能,可以自定义一个任务并通过SparkClient发送到RemoteDriver上执 行。...这可能会进一步影响第一个查询的性能。 在用户较长期会话中,这个额外时间不会导致任何问题,因为它只在第一次查询执行时发生。然而,诸如Oozie发起的Hive工作之类的短期绘画可能无法实现最佳性能。

    3.7K52

    0889-7.1.7-Hive on Tez解析以及日志分析

    从本质上讲,Tez 组成非常简单,只有两个组成部分: 数据处理管道引擎,其中一个引擎可以输入,处理和输出实现以执行任意数据处理 数据处理应用程序的主机,通过它可以将上述任意数据处理“任务”组合到任务 DAG...(混洗),为了用户使用方便,它还提供了多种Input、Output、Task和Sort的实现 本文对于这些组件不着重介绍,接下来看执行Hive  On Tez 时可以如下图划分: 当我们使用beeline...1个application 里会有1个或者多个DAG ,1个DAG 对应一个queryid 也对应一条SQL 1个SQL 中可能会生成多个Container 执行,而一个1Map Vertex或者Reduce...CDP集群中默认开启日志聚合,可以在CM>YARN>配置中搜索 yarn.log-aggregation-enable 检查该参数是否有开启。..._0002 第一个生成dag 计算的SQL,注意:部分简单的SQL并不生成dag,在日志。

    4.9K42

    Hive on Tez 的安装配置

    起源 Hortonworks在2014年左右发布了Stinger Initiative,并进行社区分享,为的是让Hive支持更多SQL,并实现更好的性能。 让Hive的查询功能更强大。...Tez通过消除不必要的task、障碍同步和对HDFS的读写作业来优化Hive job; 2....它源于MapReduce框架,核心思想是将Map和Reduce两个操作进一步拆分,分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业。...如下图: Tez可以将多个有依赖的作业转换为一个作业(只需写一次HDFS,中间环节较 少),从而大大提升DAG作业的性能。...安装部署 ❝前置芝士 ❞ 官方推荐使用 Tez 和包中包含的预打包 Hadoop 库 的安装方式。包含所有依赖项的完整 tarball 是确保现有作业在集群滚动升级期间继续运行的更好方法。

    1.2K10

    大数据时代的利器:Apache Hive 全面解析

    例如,如果选择MapReduce,Hive会生成多个Map和Reduce任务,并通过Hadoop YARN进行资源调度和任务执行;如果选择Tez或Spark,则会生成相应的DAG或Spark作业。...理解这一架构,有助于我们更深入地把握Hive如何处理海量数据并实现高效查询。...接着,语义分析器检查语法的正确性,并引用Metastore中的元数据验证表名、列名是否存在以及数据类型是否匹配。例如,如果用户查询一个不存在的列,编译器会在此阶段报错。...优化后的物理计划会被进一步转换为面向MapReduce、Tez或Spark的DAG(有向无环图)或作业序列。...首先,驱动调用查询编译器对SQL进行解析和优化,生成物理执行计划。在此过程中,编译器频繁访问Metastore,获取元数据信息以验证和优化查询。 接着,驱动将物理执行计划交给执行引擎。

    49210

    EMR(弹性MapReduce)入门之数据仓库工具Hive组件使用(十一)

    Hive产生背景 Apache Hive数据仓库软件可以使用SQL方便地阅读、编写和管理分布在分布式存储中的大型数据集。结构可以投射到已经存储的数据上。...3、它可以分析处理直接存储在hdfs中的数据或者是别的数据存储系统中的数据,如hbase。4、查询的执行经由mapreduce完成。...生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行 Hive 的核心是驱动引擎, 驱动引擎由四部分组成: (1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树...,以及Hive提供的函数和用户自定义的函数(UDF/UAF) 3.逻辑计划生产:生成逻辑计划-算子树 4.逻辑计划优化:对算子树进行优化,包括列剪枝,分区剪枝,谓词下推等 5.物理计划生成:将逻辑计划生产包含由...MapReduce任务组成的DAG的物理计划 6.物理计划执行:将DAG发送到Hadoop集群进行执行 7.将查询结果返回 Hive常见故障 1、所有Hive无法登陆,显示404 排查步骤:看各个节点组件是否异常

    2.3K20

    在Kubernetes上运行Airflow两年后的收获

    此外,对每个 DAG 进行静态检查,以验证正确的所有者分配和标签的存在,捕获可能的导入错误等。...通过这样做,我们可以使用原生 Airflow 角色来强制访问控制,并且每个 DAG 必须通过最低的治理检查清单才能提交。 但是,如何将 DAG 同步到 Airflow 中呢?...然而,我们选择了更倾向于具有高可用性的 Airflow 部署 —— 通过使用不同可用区的节点。 动态生成 DAG 时要小心 如果您想要大规模生成 DAG,就需要利用 DAG 模板化和编程生成。...在这里,我们从 BaseNotifier 类创建了自己的自定义通知器,这样我们就可以根据需要定制通知模板并嵌入自定义行为。例如,在开发环境中运行任务时,默认仅将失败通知发送到 Slack。...在 prd 环境中,通知将发送到我们的在线工具 Opsgenie。 一个通知器,多个目标和定制 自定义通知也是可模板化的,因此团队可以使用标准格式在 Slack 中创建信息消息,例如。

    2.5K10

    Hive2.1.0集成Tez

    Tez是什么? Tez是Hontonworks开源的支持DAG作业的计算框架,它可以将多个有依赖的作业转换为一个作业从而大幅提升MapReduce作业的性能。...tar包,但是大部分情况下是针对特定的Hadoop版本,如果和我们的Hadoop版本不一致,可能某个时刻会出现一些未知的问题,所以为了稳定,还是建议和自己使用的Hadoop版本匹配,所以就需要编译了。...机器最好能下载东西,如果不能就把根目录下的pom.xml中tez-ui也注释掉,因为不管是tez-ui还是tez-ui2都需要下载nodejs相关的东西,默认的是在墙外的,不能fan出去80%的几率会编译失败...,所以如果是nodejs相关的编译失败,就把tez-ui相关的子项目都注释掉不让参与编译,这个ui没什么大的作用,就是看下job的计划,没有它也能使用Tez优化DAG依赖。...: 如何与Hive集成 (1)编译成功后,进入下面的目录 /root/apache-tez-0.8.4-src/tez-dist/target 可以看到tez编译的相关的jar包都在这里,有一个mini

    1.6K30

    【学习】开源大数据查询分析引擎现状

    4) Stinger Initiative(Tez optimized Hive):Hortonworks开源了一个DAG计算框架Tez,Tez可以理解为Google Pregel的开源实现,该框架可以像...Map-Reduce一样,可以用来设计DAG应用程序,但需要注意的是,Tez只能运行在YARN上。...同时,Shark通过UDF用户自定义函数实现特定的数据分析学习算法,使得SQL数据查询 和运算分析能结合在一起,最大化RDD的重复使用; 5) Driver:Shark在Hive的CliDriver基础上进行了一个封装...而Tez是 Hortonworks开源的一个DAG计算框架,Tez可以理解为Google Pregel的开源实现,该框架可以像Map-Reduce一样,用来设计DAG应用程序,但需要注意的是,Tez只能运行在...举个例子,如果读者注意过下一代Hadoop(YARN)的发展的话就会发现, 其实YARN已经支持Map-Reduce之外的计算范式(例如Shark,Impala等),因此将来Hadoop将可能作为一个兼容并包的大平台存

    3.5K70

    盘点:SQL on Hadoop中用到的主要技术

    但是,经过不断的发展,Hive也能跑在DAG框架上了,不仅有Tez,还有Spark。...对AST进行语义分析,比如类型检查,表是否存在,字段是否存在,SQL语义是否有误(比如select中被判定为聚合的字段在group by中有没有出现)。...生成逻辑执行计划,这是一个由逻辑操作符组成的DAG。...逻辑计划 上面的SQL语句生成的逻辑执行计划Plan如上图所示。那么Presto是如何对上面的逻辑执行计划进行拆分,以较高的并行度去执行完这个计划呢,我们来看看物理执行计划。...这种情况可能出现在判断数据的类型(是string还是int),或者在判断某一列是否因为其他字段的过滤条件导致本行不需要被读取(列存储情况下)。

    1.6K10

    与 Hadoop 对比,大厂技术栈们是如何看待 Spark 技术?

    用MapReduce统计一个文本文件中单词出现的频率的示例WordCount请参见:WordCount - Hadoop Wiki,如果对MapReduce不恨熟悉,通过该示例对MapReduce进行一些了解对理解下文有帮助...RDD就是一个分布式的数据集合(Collection),对这个集合的任何操作都可以像函数式编程中操作内存中的集合一样直观、简便,但集合操作的实现确是在后台分解成一系列Task发送到几十台上百台服务器组成的集群上完成的...由RDD组成的有向无环图(DAG)的执行是调度程序将其生成物理计划并进行优化,然后在Spark集群上执行的。...=>一个Job可以包含RDD的多个转换操作,在调度时可以生成多个阶段(Stage),而且如果多个map操作的RDD的分区不变,是可以放在同一个Task中进行。...处理逻辑隐藏在代码细节中,没有整体逻辑 =>在Scala中,通过匿名函数和高阶函数,RDD的转换支持流式API,可以提供处理逻辑的整体视图。代码不包含具体操作的实现细节,逻辑更清晰。

    1K20

    Hive重点难点:Hive原理&优化&面试(下)

    Tez计算引擎 Apache Tez是进行大规模数据处理且支持DAG作业的计算框架,它直接源于MapReduce框架,除了能够支持MapReduce特性,还支持新的作业形式,并允许不同类型的作业能够在一个集群中运行...通过允许Apache Hive运行复杂的DAG任务,Tez可以用来处理数据,之前需要多个MR jobs,现在一个Tez任务中。...Tez还允许一次发送整个查询计划,实现应用程序动态规划,从而使框架能够更智能地分配资源,并通过各个阶段流水线传输数据。...Tez可以允许小数据集完全在内存中处理,而MapReduce中没有这样的优化。仓库查询经常需要在处理完大量的数据后对小型数据集进行排序或聚合,Tez的优化也能极大地提升效率。...1.高效性 Spark会将作业构成一个DAG,优化了大型作业一些重复且浪费资源的操作,对查询进行了优化,重新编写了物理执行引擎,如可以实现MRR模式。

    2K21

    大数据框架学习:从 Hadoop 到 Spark

    Metastore中的云数据进行类型检测和语法分析,生成一个逻辑方案(logicalplan),然后通过简单的优化处理,产生一个以有向无环图DAG数据结构形式展现的map-reduce任务 整个编译过程分为六个阶段...,翻译为MapReduce任务; 6、物理层优化器进行MapReduce任务的变换,生成最终的执行计划。...SQL的执行计划,每个Stage都是由一个MapReduce组成,当然,一个Stage也可能没有Reduce。...6、DAG计算框架 Tez 对于需要多个MapReduce作业迭代计算的场景,因为每个MapReduce都要读写HDFS会造成磁盘和网络IO的浪费,而Tez作为一个DAG框架,可以将多个有依赖的MapReduce...[1502783999155_6619_1502783998991.png] 可以看到 Spark的stage思想跟 Tez的很像,不像MapReduce那样必须成对的MapReduce一起出现,可以在

    8.6K22

    大规模运行 Apache Airflow 的经验和教训

    我们编写了一个自定义脚本,使该卷的状态与 GCS 同步,因此,当 DAG 被上传或者管理时,用户可以与 GCS 进行交互。这个脚本在同一个集群内的单独 pod 中运行。...作为自定义 DAG 的另一种方法,Airflow 最近增加了对 db clean 命令的支持,可以用来删除旧的元数据。这个命令在 Airflow 2.3 版本中可用。...很难确保负载的一致分布 对你的 DAG 的计划间隔中使用一个绝对的间隔是很有吸引力的:简单地设置 DAG 每运行一次 timedelta(hours=1),你就可以放心地离开,因为你知道 DAG 将大约每小时运行一次...然而,这可能会导致规模上的问题。 当用户合并大量自动生成的 DAG,或者编写一个 Python 文件,在解析时生成许多 DAG,所有的 DAGRuns 将在同一时间被创建。...一个集中的元数据存储库可以用来跟踪 DAG 的来源和所有权。 DAG 策略对于执行作业的标准和限制是非常好的。 标准化的计划生成可以减少或消除流量的激增。

    4.3K20

    深入解析Hive SQL转MapReduce的编译原理:从AST抽象语法树到Operator执行树

    查询优化器会对逻辑计划进行重写,应用谓词下推、列裁剪等优化规则,最终生成物理执行计划。 在物理执行阶段,Hive将操作符树分解为MapReduce任务的有向无环图(DAG)。...对于我们的案例,生成的逻辑计划可能包含以下关键操作符: 1. TableScanOperator:扫描employees和departments表 2....Join优化:根据表大小决定使用Common Join还是Map Join 在我们的例子中,优化器可能会: • 将e.join_date > '2020-01-01'下推到TableScan阶段 • 如果...排序实现: • ORDER BY通过MapReduce的二次排序实现 • 在最后一个Reduce阶段对所有数据进行全局排序 通过这个案例,我们可以看到Hive如何将一个复杂的SQL查询分解为多个MapReduce...Tez引擎可能遇到DAG提交失败,需检查tez.am.resource.memory.mb配置是否足够。

    46310
    领券