加入收藏 | 设为首页 | 会员中心 | 我要投稿 甘南站长网 (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程序 --全
  Apache Hive-通用优化-featch抓取机制 mr本地模式
 
  Fetch抓取机制
  功能:在执行sql的时候,能不走MapReduce程序处理就尽量不走MapReduce程序处理.
  尽量直接去操作数据文件。
  设置: 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程序为本地模式,如果不满足条件,就执行yarn模式。
 
  
  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)  --数据量小于128M
  The 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的执行引擎
  WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
 
  如果针对Hive的调优依然无法满足你的需求 还是效率低, 尝试使用spark计算引擎 或者Tez.
 
 
  Apache Hive-通用优化-join优化
  在了解join优化的时候,我们需要了解一个前置知识点:map端join 和reduce端join
 
 
  - reduce端join
 
 
  这种join的弊端在于map阶段没有承担太多的责任,所有的数据在经过shuffle在reduce阶段实现的,而shuffle又是影响性能的核心点.
 
  -map端join
 
 
  首先启动本地任务将join中小表数据进行分布式缓存
  启动mr程序(只有map阶段)并行处理大数据,并且从自己的缓存中读取小表数据,进行join,结果直接输出到文件中
  没有shuffle过程 也没有reduce过程
  弊端:缓存太小导致表数据不能太大
 
  reduce 端 join 优化
  适合于大表Join大表
 
  bucket join-- 适合于大表Join大表
 
  方式1:Bucktet Map Join 分桶表
 
  语法: clustered by colName(参与join的字段)
  参数: set hive.optimize.bucketmapjoin = true
  要求: 分桶字段 = Join字段 ,分桶的个数相等或者成倍数,必须是在map join中
 
  方式2:Sort Merge Bucket Join(SMB)
 
  基于有序的数据Join
  语法:clustered by colName sorted by (colName)
  参数
      set hive.optimize.bucketmapjoin = true;
      set hive.auto.convert.sortmerge.join=true;
      set hive.optimize.bucketmapjoin.sortedmerge = true;
      set hive.auto.convert.sortmerge.join.noconditionaltask=true;
  要求: 分桶字段 = Join字段 = 排序字段,分桶的个数相等或者成倍数
 
 
  map 端 join 优化
  hive.auto.convert.join.noconditionaltask
  
  hive.auto.convert.join=true
  Hive老版本
  #如果参与的一个表大小满足条件 转换为map join
  hive.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=512000000
 
  Apache Hive--通用调优--数据倾斜优化
  数据倾斜优化
      什么是数据倾斜
          描述的数据进行分布式处理  分配不平均的现象
      数据倾斜的后果
          某个task数据量过大 执行时间过长  导致整体job任务迟迟不结束
              执行时间长  出bug及风险几率提高
              霸占运算资源 迟迟不释放
      通常如何发现数据倾斜
          在yarn或者其他资源监控软件上  发现某个job作业 卡在某个进度迟迟不动 (注意 倒不是报错)
      造成数据倾斜的原因
          数据本身就倾斜
          自定义分区、分组规则不合理
          业务影响 造成数据短期高频波动
      数据倾斜的通用解决方案
          1、有钱  有预警  
              增加物理资源  单独处理倾斜的数据
          2、没钱  没有预警
              倾斜数据打散  分步执行
                  先将倾斜数据打散成多干份
                  处理的结果再最终合并
      hive中数据倾斜的场景
          场景一:group by  、count(distinct)
              hive.map.aggr=true;  map端预聚合
              手动将数据随机分区  select * from table distribute by rand();
              如果有数据倾斜问题  开启负载均衡
                  先启动第一个mr程序 把倾斜的数据随机打散分散到各个reduce中
                  然后第二个mr程序把上一步结果进行最终汇总
                  hive.groupby.skewindata=true;
          场景二:join
              提前过滤,将大数据变成小数据,实现Map Join
              使用Bucket Join
              使用Skew Join
                  将Map Join和Reduce Join进行合并,如果某个值出现了数据倾斜,就会将产生数据倾斜的数据单独使用Map Join来实现
                  最终将Map Join的结果和Reduce Join的结果进行Union合并
          Hive中通常指的是在reduce阶段数据倾斜
 
  解决方法
 
 
  group by数据倾斜
  方案一:开启Map端聚合
 

  hive.map.aggr=true;
  #是否在Hive Group By 查询中使用map端聚合。

(编辑:甘南站长网)

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

推荐文章
    热点阅读