阿帕奇E-通用优化-fetch抓取机制mr本地模式
Fetch捕获机制功能:在执行sql时,如果可以的话尽量不要经过MapReduce程序处理。尽量直接操作数据文件。set:hive . fetch . task . conversion = more。
--以下三种情况,sql不遵循mr程序--全局搜索select * from student要查找的--字段从学生中选择编号、姓名;--限制查找select num,name from student limit 2;
Mapreduce本地模式MapReduce程序可以提交给yarn cluster进行分布式执行,也可以在本地仿真环境下运行。当然此时还不是分布式执行程序,但是对于小文件和数据处理特别有效。用户可以将Hive.exec.mode.local.auto的值设置为true,这样Hive就可以在适当的时候自动启动这个优化。功能:如果必须执行==MapReduce程序,如果可以本地执行,尽量不要提交给yarn执行= =
默认情况下,它是关闭的。意思是只要取MapReduce,就会提交给yarn执行。
Mapreduce . framework . name = local local Mode MapReduce . framework . name = yarn Cluster Mode Hive提供一个参数,自动将MapReduce程序切换到本地模式,如果不满足条件,将执行yarn模式。
设置hive . exec . mode . local . auto = true;--3条件必须全部满足自动切换本地模式的要求作业的总输入大小小于:hive . exec . mode . local . auto . input bytes . max(默认为128 MB)--数据量小于128m map -任务总数小于:hive . exec . mode . local . auto . tasks . max(默认为4)--map tasks数小于4所需的reduce任务总数为1或0。--减少任务的数量为0或1。
切换配置单元的执行引擎警告:HIV E-ON-Mr已在配置单元2中弃用,可能在未来版本中不可用。考虑使用不同的执行引擎(如Spark、TEZ)或使用HIVE 1.x版本。
如果对Hive的调优仍然不能满足您的需求或者效率低下,请尝试使用spark计算引擎或Tez。
Apache E-泛优化-连接优化在理解连接优化的时候,我们需要知道一个前期知识点:map-side join和reduce-side join。
-减少侧连接
这个join的缺点是map阶段不承担太多的责任,所有的数据都是通过shuffle在reduce阶段实现的,这是影响性能的核心点。
-地图侧连接
首先,启动本地任务,以分布式方式缓存连接中的小表数据。启动mr程序(仅在map阶段)并行处理大数据,从自身缓存中读取小表数据加入。结果直接输出到文件中。没有洗牌过程或减少过程。缺点:缓存太小导致表数据太大。
缩减端连接优化适用于大型表连接大型表
Bucket Join--适合大表连接大表。
1: Bucktet映射连接桶表
语法:clustered by colName参数:set hive . optimize . bucket map join = true要求:bucket field = Join field,bucket个数等于或为倍数,且必须在map Join中。
2:排序合并存储桶连接(SMB)
有序数据连接语法:按列名聚集按(列名)参数排序set hive . optimize . bucketmapjoin = true;set hive . auto . convert . sort merge . join = true;set hive . optimize . bucketmapjoin . sorted merge = true;set hive . auto . convert . sort merge . join . noconditionaltask = true;要求:桶划分字段=连接字段=排序字段,桶数等于或为倍数。
映射连接优化配置单元。auto . convert . join . no conditional task hive . auto . convert . join = true hive旧版本#如果其中一个参与表的大小满足条件并转换为Map join hive . Map join . small table . filesize = 25000000 hive 2.0 #是否启用基于输入文件大小将reduce join转换为Map join的优化机制。假设有n个表(或分区)参与连接。如果此参数打开,并且N-1个表(或分区)的大小之和小于hive指定的值。auto . convert . join . no条件task.size参数,连接将直接转换为地图连接。hive . auto . convert . join . noconditionaltask = true hive . auto . convert . join . noconditionaltask . size = 512000000
阿帕奇E--通用调优--数据倾斜优化什么是数据倾斜优化?数据倾斜描述的数据的分布式处理是不均匀分布。数据倾斜的结果是任务数据太多,执行时间太长,导致整个job任务延迟,执行时间比bu长。g,风险概率增加。在占用计算资源的情况下,通常如何发现数据倾斜?当你在yarn或其他资源监控软件上发现卡在某个进度的工卡(注意不是错误),数据本身倾斜自定义分区,分组规则不合理,业务影响,数据短期高频波动,数据倾斜通用解决方案,1。资金和预警,增加物理资源,单独处理倾斜数据,2。没有警告的钱。倾斜数据是逐步分散的。首先将倾斜数据分散成多个干拷贝,然后最后将hive中倾斜数据的场景进行合并。场景1: group by,count(distinct)hive . map . aggr = true;映射预聚合手动分区数据从rand()分发的表中随机选择*;如果存在数据倾斜问题,请打开负载平衡。首先,启动第一个mr程序将倾斜数据随机分散到每个reduce中,然后第二个mr程序将最终汇总上一步的结果。hive . group by . skewin data = true;场景二:join提前筛选,把大数据变成小数据,实现地图Join。使用桶形连接和倾斜连接来合并地图连接和简化连接。如果某个值存在数据倾斜,那么存在数据倾斜的数据将被Map Join单独使用,最后Map Join的结果和reduce Join的结果将被Union合并。Hive通常指reduce阶段的数据不对称。
解决办法
群组数据倾斜方案1:开启地图聚合。
hive . map . aggr = true;#是否通过查询在配置单元组中使用映射端聚合。#该设置可以将一些顶级聚合操作放在Map阶段,从而减少清理阶段的数据传输时间和Reduce阶段的执行时间,提高整体性能。但指标不是根本原因。方案二:实现随机分区。
从rand()分配表中实现随机分区select *;方案三:数据倾斜时= =自动负载均衡= =只使用group by。
hive . group by . skewin data = true;#该参数开启后,当前程序会自动运行通过两个MapReduce #第一个MapReduce会自动随机分配给Reducer,每一个都进行部分聚合并输出结果#第二个MapReduce会根据业务(按键分组)处理上一步的聚合结果,保证一起分配相同,最后得到聚合结果。
连接数据倾斜方案一:提前过滤,把大数据变成小数据,实现地图连接方案二:使用桶连接方案三:使用倾斜连接数据单独实现地图连接。
#其他没有数据偏斜的数据通过Reduce Join实现,避免了Reduce Join的数据偏斜问题#最后,Map Join和Reduce Join的结果通过Union # SkewJoinsetHive合并。优化。在启动和运行期间SkewJoin = true#如果此键的出现次数超过此范围,则设置hive . skew join . key = 100000;#在编译时,判断是否会出现数据偏斜。Sethive。优化。SkewJoin。CompileTime = trueset hive . optimize . union . remove = true;#如果Hive的底层是MapReduce,则必须开启该属性才能实现set MapReduce . input . file input format . input . dir . recursive = true的不合并;
阿帕奇E--通用调优--MR程序任务号调整
如果maptasks的数量以MapReduce为单位,则maptasks由= =逻辑片= =机制确定。但是在hive中,影响因素很多。比如逻辑切片机制,文件是否压缩,压缩后是否支持切割。所以在==Hive中,调整MapTask的数量,直接去HDFS调整文件的大小和数量,效率更高= =合并后的大小最好=块大小。
如果有许多大文件,请调整blocl大小。
如果reducetask的编号在MapReduce中,可以直接用代码指定Hive中的job.setNumReduceTasks(N)。reducetasks的数量由以下条件控制:hive。执行。reducers . bytes . per . reducer = 25600000。reducetasks的最大数量为1009hive。执行。reducsers . max = 1009 MapReduce . job . reduce tables .这个值默认是-1,Hive可以根据任务情况来判断。
--如果用户没有设置hive,用户会根据数据量或者sql需求来评估reducetask的个数。--用户可以自己设置reducetasks的数量。set MapReduce . job . reduces = N---用户设置的设置可能不会生效。如果用户设置的设置与sql执行逻辑冲突,比如order by,hive会在sql编译时将reducetasks的数量设置为一个合理的数字。
编译时确定的reduce任务数:1
优化一般的-执行计划。通过执行计划,我们可以看到==hive计划如何执行这条sql next = =。
格式:解释+sql语句
优化一般-并行机制,推测并行执行机制。
如果hivesql底层的一些stage stages可以并行执行,那么执行效率是可以提高的。前提是= ==stage = =之间没有依赖关系,并行的缺点是瞬间服务器压力变大。参数
set hive . exec . parallel = true;--是否并行执行作业。适用于可以并行运行的MapReduce作业,比如在多次插入时移动文件以插入目标set hive . exec . parallel . thread . number = 16;--最多可以并行执行多少个作业。默认值为8。
Hive的严格模式注意。不要与动态分区的严格模式相混淆。这里的严格模式是指==hive开启后,一些用户无法影响的错误被禁止,包括低效操作= =,一些有风险的查询不允许运行。建立
Set hive.mapred.mode = strict --默认为严格模式非严格解释。
1.如果是分区表,禁止在没有where的情况下进行分区裁剪。
2.order by语句必须受限于+limit
推测执行机制= =建议关闭= =
MapReduce中的任务机制。功能:一个作业的底层可能会执行多个任务,如果一些延迟的任务执行的比较慢,最终的作业可能会失败。
所谓= =推测执行机制,就是通过算法找出滞后的任务,并为其启动备份任务= =。
两个任务同时处理一个数据,谁的结果就是最终结果。
推测执行机制默认开启,但建议在企业生产环境中关闭= = =。以上是Apache Hive通用调优featch抓取机制的mr local模式的细节。关于Apache Hive一般调优的更多信息,请关注主机频道zhujipindao中的其他相关文章。com!
评论前必须登录!
注册