Apache Hive 通用调优featch抓取机制 mr本地模式
Apache Hive-通用优化-featch抓取机制 mr本地模式
抓取机构
功能:在执行sql的时候,能不走MapReduce程序处理就尽量不走MapReduce程序处理.尽量直接去操作数据文件。set:hive . fetch . task . conversion = more。
--在下述3种情况下 sql不走mr程序--全局查找select * from student;--字段查找select num,name from student;--limit 查找select num,name from student limit 2;Mapreduce本地模式
MapReduce程序除了可以提交到yarn集群分布式执行之外,还可以使用本地模拟环境运行,当然此时就不是分布式执行的程序,但是针对小文件小数据处理特别有效果。用户可以通过设置hive.exec.mode.local.auto的值为true,来让Hive在适当的时候自动启动这个 优化。功能:如果必须执行==MapReduce程序,如果可以本地执行,尽量不要提交给yarn执行= =
默认情况下,它是关闭的。意思是只要取MapReduce,就会提交给yarn执行。
mapreduce.framework.name = local 本地模式mapreduce.framework.name = yarn 集群模式Hive提供了一个参数来自动将MapReduce程序切换到本地模式。如果条件不满足,将执行纱线模式。
set hive.exec.mode.local.auto = true;--3个条件必须都满足 自动切换本地模式The total input size of the job is lower than: hive.exec.mode.local.auto.inputbytes.max (128MB by default) --数据量小于128MThe total number of map-tasks is less than: hive.exec.mode.local.auto.tasks.max (4 by default) --maptask个数少于4个The total number of reduce tasks required is 1 or 0. --reducetask个数是0 或者 1切换配置单元的执行引擎
警告:Hive-on-MR已在Hive 2中弃用,在未来版本中可能不可用。考虑使用不同的执行引擎(即spark、tez)或使用Hive 1。x版本。
如果对Hive的调优仍然不能满足您的需求或者效率低下,请尝试使用spark计算引擎或Tez。
Apache Hive-通用优化-join优化
在理解连接优化的时候,我们需要知道一个预知识点:map-side join和reduce-side join。
-减少侧面连接
这种join的弊端在于map阶段没有承担太多的责任,所有的数据在经过shuffle在reduce阶段实现的,而shuffle又是影响性能的核心点.-地图侧连接
首先启动本地任务将join中小表数据进行分布式缓存启动mr程序(只有map阶段)并行处理大数据,并且从自己的缓存中读取小表数据,进行join,结果直接输出到文件中没有shuffle过程 也没有reduce过程弊端:缓存太小导致表数据不能太大缩减端连接优化
适合大表加入大表
bucket Join——适合大型表连接大型表
1: Bucktet映射连接桶表
语法:clustered by colName
参数:set hive . optimize . bucket map join = true
要求:bucket field = Join field,bucket个数等于或为倍数,必须在map Join中。
2:排序合并存储桶连接(SMB)
基于数据的有序联接
语法:按colname分类按(colname)
参数
set hive . auto . convert . sort merge . join = true;
set hive . optimize . bucket mapjoin . sorted merge = true;
set hive . auto . convert . sort merge . join . noconditionaltask = true;
要求:桶划分字段=连接字段=排序字段,桶数等于或为倍数。
地图连接优化
hive.auto.convert.join.noconditionaltaskhive.auto.convert.join=trueHive老版本#如果参与的一个表大小满足条件 转换为map joinhive.mapjoin.smalltable.filesize=25000000 Hive2.0之后版本#是否启用基于输入文件的大小,将reduce join转化为Map join的优化机制。假设参与join的表(或分区)有N个,如果打开这个参数,并且有N-1个表(或分区)的大小总和小于hive.auto.convert.join.noconditionaltask.size参数指定的值,那么会直接将join转为Map join。hive.auto.convert.join.noconditionaltask=true hive.auto.convert.join.noconditionaltask.size=512000000Apache Hive--通用调优--数据倾斜优化
数据偏斜优化
一个任务的数据太多,执行时间太长,导致整个作业延迟完成[Div][/Div][Div][/Div]执行时间长[Div][/Div]出现bug和风险的概率增加
[Div][Div][/Div][Div]Div]长时间占用计算资源
通常如何发现数据偏斜
[Div][Div][/Div][Div][/Div][/Div][Div][/Div]在纱或其他地方?我发现了某个进度中某个工卡延迟的原因
[div][div]
1、金钱预警
[div]。[div]
2 .没钱[[/Div][Div][/Div][Div][/Div][Div][/Div]斜向数据散射[Div]
[Div][/Div][Div][/Div][Div][/Div]
[Div][Div]
[Div][/Div][Div][/Div][/Div][Div][/Div]处理的结果最终与
中数据倾斜的场景融合count(distinct)
hive . map . aggr = true;
[div]
[Div][/Div][Div][/Div][Div][/Div]场景二:Join
[Div][/Div][Div][/Div]将大数据转化为小数据,实现Map Join
[Div][/Div][Div][/Div][Div][/Div][/Div][Div][/Div][/Div][Div][/Div][/Div][/Div]使用桶Join
[Div][/Div][Div][/Div][/Div][/Div][/Div][/ 数据倾斜的数据会单独使用Map Join来实现
[div]
解决办法
群组数据倾斜
选项1:打开地图聚合。
hive.map.aggr=true;#是否在Hive Group By 查询中使用map端聚合。#这个设置可以将顶层的部分聚合操作放在Map阶段执行,从而减轻清洗阶段数据传输和Reduce阶段的执行时间,提升总体性能。但是指标不治本。方案二:实现随机分区。
实现随机分区select * from table distribute by rand();方案三:数据倾斜时= =自动负载均衡= =只使用group by。
hive.groupby.skewindata=true;#开启该参数以后,当前程序会自动通过两个MapReduce来运行#第一个MapReduce自动进行随机分布到Reducer中,每个Reducer做部分聚合操作,输出结果#第二个MapReduce将上一步聚合的结果再按照业务(group by key)进行处理,保证相同的分布到一起,最终聚合得到结果加入数据倾斜
方案一:提前过滤,将大数据变成小数据,实现Map Join方案二:使用Bucket Join方案三:使用Skew Join数据是通过单独使用地图连接实现的。
#其他没有产生数据倾斜的数据由Reduce Join来实现,这样就避免了Reduce Join中产生数据倾斜的问题#最终将Map Join的结果和Reduce Join的结果进行Union合并#开启运行过程中skewjoinset hive.optimize.skewjoin=true;#如果这个key的出现的次数超过这个范围set hive.skewjoin.key=100000;#在编译时判断是否会产生数据倾斜set hive.optimize.skewjoin.compiletime=true;set hive.optimize.union.remove=true;#如果Hive的底层走的是MapReduce,必须开启这个属性,才能实现不合并set mapreduce.input.fileinputformat.input.dir.recursive=true;Apache Hive--通用调优--MR程序task个数调整
地图任务编号
如果是在MapReduce中 maptask是通过==逻辑切片==机制决定的。但是在hive中,影响的因素很多。比如逻辑切片机制,文件是否压缩、压缩之后是否支持切割。因此在==Hive中,调整MapTask的个数,直接去HDFS调整文件的大小和个数,效率较高==。合并后的大小最好=块大小。
如果有许多大文件,请调整blocl大小。
减少任务的数量
如果在MapReduce中,通过代码可以直接指定 job.setNumReduceTasks(N)在Hive中,reducetask个数受以下几个条件控制的hive . exec . reducers . bytes . per . reducer = 25600000
每个任务的最大缩减数,默认为1009
hive . exec . reducers . max = 1009
MapReduce . job . reductions[
-如果用户没有设置hive,用户将根据数据量或sql需求评估reducetask的数量。
-用户可以通过参数
-用户设置可能不会生效。如果用户设置与sql执行逻辑冲突,如order by,hive将在sql编译期间设置reducetask。[div][div]
编译时确定的reduce任务数:1
通用优化-执行计划
从执行计划中可以看出==hive计划接下来执行这个SQL = =
格式:解释+sql语句
通用优化-并行机制、推测执行机制
并行执行机制
如果hivesql的底层某些stage阶段可以并行执行,就可以提高执行效率。前提是==stage之间没有依赖== 并行的弊端是瞬时服务器压力变大。参数
set hive.exec.parallel=true; --是否并行执行作业。适用于可以并行运行的 MapReduce 作业,例如在多次插入期间移动文件以插入目标set hive.exec.parallel.thread.number=16; --最多可以并行执行多少个作业。默认为8。Hive的严格模型
注意。不要和动态分区的严格模式搞混淆。这里的严格模式指的是开启之后 ==hive会禁止一些用户都影响不到的错误包括效率低下的操作==,不允许运行一些有风险的查询。建立
set hive.mapred.mode = strict --默认是严格模式 nonstrict解释
1.如果是分区表,禁止在没有where的情况下进行分区裁剪。
2.order by语句必须受限于+limit
推测执行机制= =建议关闭= =
MapReduce中task的一个机制。功能:在一个作业的底层,可能会有多个任务在执行。如果某些延迟任务执行缓慢,最终作业可能会失败。
所谓= =推测执行机制,就是通过算法找出滞后的任务,并为其启动备份任务= =。
两个任务同时处理一个数据,谁的结果就是最终结果。
推测执行机制默认是开启的,但是在企业生产环境中==建议关闭==。以上是Apache Hive通用调优featch抓取机制的mr local模式的细节。关于Apache Hive一般调优的更多信息,请关注脚本之家的其他相关文章!
如果您的问题还未解决可以联系站长付费协助。
有问题可以加入技术QQ群一起交流学习
本站vip会员 请加入无忧模板网 VIP群(50604020) PS:加入时备注用户名或昵称
普通注册会员或访客 请加入无忧模板网 技术交流群(50604130)
客服微信号:15898888535
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若内容侵犯了原著者的合法权益,可联系站长删除。