Hive引擎简介
Hive引擎包括:默认MR、Tez、Spark
不更换引擎hive默认的是MR。
Hive on Spark:Hive既作为存储元数据又负责SQL的解析优化,语法是HQL语法,执行引擎变成了Spark,Spark负责采用RDD执行。
Spark on Hive : Hive只作为存储元数据,Spark负责SQL解析优化,语法是Spark SQL语法,Spark负责采用RDD执行。
MapReduce
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。
Tez
Tez是Apache开源的支持DAG作业的计算框架,它直接源于MapReduce框架,核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,这样,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业
Spark
Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。
Tez和Mapreduce区别
核心思想:MapReduce将一个算法抽象成Map和Reduce两个阶段进行处理;Tez将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等依赖DAG:Mapreduce没有DAG一说,Tez将map和reduce阶段拆分成多个阶段,分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业落地磁盘:MapReduce会有多次落地磁盘;Tez可以将多个有依赖的作业转换为一个作业,这样只需写一次HDFS,且中间节点较少。
Tez和Spark区别
使用场景:spark更像是一个通用的计算引擎,提供内存计算,实时流处理,机器学习等多种计算方式,适合迭代计算;tez作为一个框架工具,特定为hive和pig提供批量计算运行模式:spark属于内存计算,支持多种运行模式,可以跑在standalone,yarn上;而tez只能跑在yarn上;虽然spark与yarn兼容,但是spark不适合和其他yarn应用跑在一起资源利用:tez能够及时的释放资源,重用container,节省调度时间,对内存的资源要求率不高; 而spark如果存在迭代计算时,container一直占用资源;
mr引擎在hive 2中将被弃用。官方推荐使用tez或spark等引擎。
选择
tez:使用有向无环图。内存式计算。
spark:可以同时作为批式和流式的处理引擎,减少学习成本。
-----------------------------------------------------------
Hive on Spark配置
在Hive所在节点部署Spark
在hive中创建spark配置文件
vim /opt/module/hive/conf/spark-defaults.conf
向HDFS上传Spark纯净版jar包
vim /opt/module/hive/conf/hive-site.xml
添加如下内容
<!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
<property>
<name>spark.yarn.jars</name>
<value>hdfs://hadoop102:8020/spark-jars/*</value>
</property>
<!--Hive执行引擎-->
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>
-----------------------------------------------------
tez:
在hive sql中使用了union 或 join操作
tez会将任务切分,每个小任务,同一个HDFS分区目录下会创建一个文件文件夹,这就会造成一个非常严重的问题,假如这张表的下文,使用这张表没有用tez,而是使用spark或者mr,这两种引擎是不会遍历子文件夹下的内容的。查出来的数据为0。而我们很难约束,其他人使用同一种引擎,
所以tez在使用中抛弃。我们最中选择了spark引擎。
-----------------------------------------
MapReduce: 是一种离线计算框架,将一个算法抽象成Map和Reduce两个阶段进行处理,每个阶段都是用键值对(key/value)作为输入和输出,非常适合数据密集型计算。Map/Reduce通过把对数据集的大规模操作分发给网络上的每个节点实现可靠性;每个节点会周期性地返回它所完成的工作和最新的状态。如果一个节点在设定的时间内没有进行心跳上报,主节点(可以理解为主服务器)就会认为这个节点down掉了,此时就会把分配给这个节点的数据发到别的节点上运算,这样可以保证系统的高可用性和稳定性。因此它是一个很好的计算框架。
TEZ:是基于Hadoop YARN之上的DAG(有向无环图,Directed Acyclic Graph)计算框架。核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等。这样,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业,从而可以减少Map/Reduce之间的文件存储,同时合理组合其子过程,也可以减少任务的运行时间。
Spark:Hive on Spark总体的设计思路是,尽可能重用Hive逻辑层面的功能;从生成物理计划开始,提供一整套针对Spark的实现,比如 SparkCompiler、SparkTask等,这样Hive的查询就可以作为Spark的任务来执行了
三者比较个人意见:
MR
计算,会对磁盘进行多次的读写操作,这样启动多轮job的代价略有些大,不仅占用资源,更耗费大量的时间
TEZ
计算,就会生成一个简洁的DAG作业,算子跑完不退出,下轮继续使用上一轮的算子,这样大大减少磁盘IO操作,从而计算速度更快。 TEZ比MR至少快5倍(约值,反正是快,不必较真0.0)
Spark
计算,DAG生成,Stage划分,比MR快10倍(约值,反正是快,不必较真0.0)与TEZ相比我选择Spark,一来快,二来奇葩问题比较少
三种引擎如何切换引擎?
1)、配置mapreduce计算引擎
set hive.execution.engine=mr;
2)、配置tez计算引擎
set hive.execution.engine=tez;
3)、配置spark计算引擎
set hive.execution.engine=spark;
hive on spark配置集群模式
set hive.execution.engine=spark;
set spark.master=yarn-cluster;
set mapreduce.job.queuename=xxx;
相关推荐
为了改善这种情况,后来的 Hive 版本引入了 Tez 和 Spark 作为执行引擎,以提高查询性能。 总之,Apache Hive 是一个强大的大数据分析工具,它通过提供 SQL 风格的语言简化了大数据处理,使得非编程背景的用户也能...
1. **源头上更换引擎**:最简单直接的方式是不在数据源端使用Tez引擎,而是选择使用Hive或Spark-SQL直接进行数据写入。这种方式避免了额外子目录的生成,从而消除了后续查询中的潜在问题。 2. **使用Tez引擎并进行二...
Hive错误之 Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask错误分析_xiaohu21的博客-CSDN博客.mht
Hive on Mr-Apache Ignite缓存 通过LLAP缓存(TODO)在MR上进行配置 在Tez上蜂巢 通过LLAP缓存(TODO)在Tez上进行配置 Spark SQL-具有HDFS的Spark独立集群 依存关系: 阿帕奇蜂巢 元商店: 蜂巢-> /data/...
为了解决这一问题,Hive引入了Tez和Spark作为替代的执行引擎,其中Hive on Spark因其内存计算的优势,显著提升了处理速度。 在本文中,我们将详细介绍如何在已有的Hadoop集群上安装配置Hive on Spark。首先,确保你...
Hive与传统数据仓库相比,具有存储HDFS、理论上有无限拓展的可能、执行引擎有MR/Tez/Spark多种引擎可供选择、使用方式使用HQL(类似SQL)、灵活性元数据存储独立于数据存储之外等特点。 Hive的优点包括:HiveServer...
为了提升性能,Hive提供了多种优化策略,如Joins的优化、Bucketing和Sorting、Tez或Spark作为执行引擎替代MapReduce,以及使用Hive的Explain命令来分析查询计划。 **7. 分布式缓存** Hive支持Hadoop的分布式缓存...
5. **执行引擎**:Hive可以使用多种执行引擎,如Tez和Spark,它们能提供比原生MapReduce更高的性能。 6. **元数据管理**:Hive元数据存储在MySQL或Derby等数据库中,包含了表结构、分区信息等,对查询至关重要。 ...
- **与Tez和Spark的交互**:更高效的执行引擎,提供更快的查询速度。 通过这个"HiveSQL使用考核题"的学习和练习,你可以加深对HiveSQL的理解,掌握如何有效地使用Hive进行大数据查询和分析,同时提升你在大数据...
- **使用Tez或Spark作为执行引擎**:相比MapReduce,Tez和Spark提供了更高的并行度和更低的延迟。 5. **Hive与其它大数据组件的集成** - **Hive与Pig**:两者都可以在Hadoop上进行数据处理,Pig提供更灵活的脚本...
对于大数据JOIN,考虑使用Spark SQL或Tez引擎。 4. **GROUP BY与ORDER BY的使用**:GROUP BY后跟ORDER BY会导致额外的排序,可能增加计算成本。若无特别需求,可尽量避免。 5. **使用子查询替换自连接**:某些情况...
3. **Hive Compiler**:将 HQL 转换为 MapReduce 任务或者 Tez、Spark 任务。 4. **Hive Execution Engine**:执行由 Compiler 生成的计划,利用 Hadoop 的分布式计算框架执行任务。 5. **Hive Client**:用户接口,...
8. **选择合适的执行引擎**:Tez和Spark相比MapReduce提供了更高的并行度和性能。对于实时分析和交互式查询,考虑使用Impala或Hawq。 9. **避免使用SELECT ***:明确指定需要的列可以减少数据处理和网络传输量,...
新增任务无“查重”检测机制,平台存在冗余或相似任务,存在没人使用(无价值)的任务,长期空跑,平台缺乏任务治理产品,数据倾斜等慢任务,缺乏诊断工具和优化工具,计算引擎以MR/Tez为主,Spark引擎使用占比不足5...
Hive优化:优化Hive作业可以通过多种方式,包括调整MapReduce参数、分区、小文件合并、使用Tez或Spark执行引擎等。 Spark相关知识点 Spark与MapReduce相比效率更高:Spark的效率高于MapReduce,原因在于它使用了...
其次,MapReduce(MR)在大数据处理中的局限性促使新的处理框架的出现,比如Tez和Spark。Tez是基于Hadoop YARN构建的,它对MR进行了优化,允许开发者构建更复杂的有向无环图(DAG),提高了处理效率。Spark是一个...
我们的生产集群由200多个slave节点组成,具有8PB的HDFS容量,每天执行30,000到50,000个作业,我们的用户账户有40多个,使用了多种类型的作业,例如MR、Hive、Tez、Spark、Pig、Sqoop、HBase、Slider等。 三、问题...
8. **Chap 8:Hadoop并行计算框架** - 可能会涵盖Spark、Tez等更高效的并行计算框架,它们在处理实时和交互式查询时表现出优越的性能。 9. **Chap 9:Hadoop数据存储与管理** - 这一章可能涉及到Hadoop与其他数据...