Apache Hive 通用调优featch抓取机制 mr本地模式
发布时间:2023-02-17 13:29:03 所属栏目:Apache 来源:互联网
导读:Apache Hive-通用优化-featch抓取机制 mr本地模式 Fetch抓取机制 功能:在执行sql的时候,能不走MapReduce程序处理就尽量不走MapReduce程序处理. 尽量直接去操作数据文件。 设置: hive.fetch.task.conversion= more。 --在下述3种情况下 sql不走mr程序 --全
#这个设置可以将顶层的部分聚合操作放在Map阶段执行,从而减轻清洗阶段数据传输和Reduce阶段的执行时间,提升总体性能。但是指标不治本。 方案二:实现随机分区 实现随机分区 select * from table distribute by rand(); 方案三:数据倾斜时==自动负载均衡==只使用group by hive.groupby.skewindata=true; #开启该参数以后,当前程序会自动通过两个MapReduce来运行 #第一个MapReduce自动进行随机分布到Reducer中,每个Reducer做部分聚合操作,输出结果 #第二个MapReduce将上一步聚合的结果再按照业务(group by key)进行处理,保证相同的分布到一起,最终聚合得到结果 join数据倾斜 方案一:提前过滤,将大数据变成小数据,实现Map Join 方案二:使用Bucket Join 方案三:使用Skew Join 数据单独使用Map Join来实现 #其他没有产生数据倾斜的数据由Reduce Join来实现,这样就避免了Reduce Join中产生数据倾斜的问题 #最终将Map Join的结果和Reduce Join的结果进行Union合并 #开启运行过程中skewjoin set 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个数调整 maptask个数 如果是在MapReduce中 maptask是通过==逻辑切片==机制决定的。 但是在hive中,影响的因素很多。比如逻辑切片机制,文件是否压缩、压缩之后是否支持切割。 因此在==Hive中,调整MapTask的个数,直接去HDFS调整文件的大小和个数,效率较高==。 合并的大小最好=block size 如果大文件多,就调整blocl size reducetask个数 如果在MapReduce中,通过代码可以直接指定 job.setNumReduceTasks(N) 在Hive中,reducetask个数受以下几个条件控制的 hive.exec.reducers.bytes.per.reducer=256000000 每个任务最大的 reduce 数,默认为 1009 hive.exec.reducsers.max=1009 mapreduce.job.reduces 该值默认为-1,由 hive 自己根据任务情况进行判断。 --如果用户用户不设置 hive将会根据数据量或者sql需求自己评估reducetask个数。 --用户可以自己通过参数设置reducetask的个数 set mapreduce.job.reduces = N --用户设置的不一定生效,如果用户设置的和sql执行逻辑有冲突,比如order by,在sql编译期间,hive又会将reducetask设置为合理的个数。 Number of reduce tasks determined at compile time: 1 通用优化-执行计划 通过执行计划可以看出==hive接下来是如何打算执行这条sql的==。 语法格式:explain + sql语句 通用优化-并行机制,推测执行机制 并行执行机制 如果hivesql的底层某些stage阶段可以并行执行,就可以提高执行效率。 前提是==stage之间没有依赖== 并行的弊端是瞬时服务器压力变大。 参数 set hive.exec.parallel=true; --是否并行执行作业。适用于可以并行运行的 MapReduce 作业,例如在多次插入期间移动文件以插入目标 set hive.exec.parallel.thread.number=16; --最多可以并行执行多少个作业。默认为8。 Hive的严格模式 注意。不要和动态分区的严格模式搞混淆。 这里的严格模式指的是开启之后 ==hive会禁止一些用户都影响不到的错误包括效率低下的操作==,不允许运行一些有风险的查询。 设置 1 set hive.mapred.mode = strict --默认是严格模式 nonstrict 解释 1、如果是分区表,没有where进行分区裁剪 禁止执行 2、order by语句必须+limit限制 推测执行机制 ==建议关闭==。 MapReduce中task的一个机制。 功能: 一个job底层可能有多个task执行,如果某些拖后腿的task执行慢,可能会导致最终job失败。 所谓的==推测执行机制就是通过算法找出拖后腿的task,为其启动备份的task==。 两个task同时处理一份数据,谁先处理完,谁的结果作为最终结果。 推测执行机制默认是开启的,但是在企业生产环境中==建议关闭==。 (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |