加入收藏 | 设为首页 | 会员中心 | 我要投稿 甘南站长网 (https://www.0941zz.com/)- 科技、行业物联网、开发、云计算、云管理!
当前位置: 首页 > 运营中心 > Apache > 正文

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同时处理一份数据,谁先处理完,谁的结果作为最终结果。
 
  推测执行机制默认是开启的,但是在企业生产环境中==建议关闭==。

(编辑:甘南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读