hive工作中的一些优化策略

liufei-yes      2022-02-13     143

关键词:

1、hive抓取策略
    hive.fetch.task.conversion = more/none
    more不走mr,none走mr
 
2、explain 显示执行计划
 
3、设置本地运行模式
    set hive.exec.mode.local.auto = true
    hive.exec.mode.local.inputbytes.max 默认128M,表示加载文件的最大值,若大于该配置仍会以集群方式运行
 
4、并行计算
    Set hive.exec.parallel = true/falses
    Set hive.exec.parallel.thread.number    默认8个
 
5、严格模式
    set hive.mapred.mode = strict/nonstrict
    限制查询:
  • 对于分区表,必须添加where对于分区字段的过滤条件
  • order by语句必须包含limit输出限制
  • 限制执行笛卡尔积的查询
 
6、hive排序
  • order by:对于查询结果做全排序,只允许一个reduce处理(当数据量较大时,慎用。严格模式下,必须结合limit来使用)
  • sort by:对于单个reduce的数据进行排序
  • distribute by:分区排序,经常和sort by结合使用
  • cluster by:相当于sort by+distribute by
    •   cluster by不能通过asc、desc的方式指定排序顺序,可通过distribute by column sort by column asc|desc的方式
 
7、hive join
  • join计算时,将小表(驱动表)放在join的左边
  • Map join:在map端完成join
    •   SQL方式:在sql语句中添加map join的标记(mapjoin hint)
      •   语法:select /* MAPJOIN(b) */ a.key, a.value from a join b on a.key = b.key
    •   自动的mapjion

      •       通过以后配置启用自动的mapjion
          •   set hive.auto.convert.join = true (为true时,hive自动对左边的表统计量,如果时小表就加入内存,即对小表启动mapjion)
          •   hive.mapjion.smalltable.filesize 默认25M
          •   Hive.ignore.mapjion.hint 是否忽略maojoin hint的标
  • 尽可能使用相同的连接键(转化为一个mr)
  • 大表join大表 (不一定有用)
    • 空key过滤:有时join超时是因为某些key对应的数据太多,而相同key对应的数据都会发送到相同的reducer上,从而导致内存不够。此时我们应该仔细分析这些异常的key,很多情况下,这些key对应的数据是异常数据,我们需要在SQL语句中进行过滤。
    • 空key转换:有时虽然某个key为空对应的数据很多,但是相应的数据不是异常数据,必须要包含在join的结果中,此时我们可以表a中key为空的字段赋一个随机的值,使得数据随机均匀地分不到不同的reducer上
 
8、map-side聚合
  • 通过设置参数开启map端的聚合:set hive.map.aggr=true
  • hive.groupby.mapaggr.checkinterval  —map端gourp by执行聚合时处理的多少行数据(默认100000)
  • hive.map.aggr.hash.min.reduction  —进行聚合的最小比例(预先对100000条数据做聚合,若聚合之后的数据量/100000的值大于配置的0.5,则不会聚合)
  • hive.map.aggr.hash.percentmemory —map端聚合使用的内存最大值
  • hive.map.aggr.hash.force.flush.memory.threshold —map端做聚合操作时hash表的最大可用内容,大于该值出发flush
  • hive.groupby.skewindata — 是否对groupby产生的数据倾斜做优化。默认false
 
9、合并小文件 文件数据小,容易在文件存储端造成压力,给hdfs造成压力,影响效率
  • 设置合并属性
    • 是否合并map输出文件:hive.merge.mapfiles=true
    • 是否合并reduce输出文件:hive.merge.mapredfiles=true
    • 合并文件的大小:hive.merge.size.per.task=256*1000*1000
 
10、去重统计:数据量小的时候无所谓,数据量大的情况下,由于COUNT DISTINCT操作需要用一个Reduce Task来完成,这一个Reduce需要处理的数据量太大,就会导致整个Job很难完成,一般COUNT DISTINCT使用先GROUP BY再COUNT的方式替换
 
11、控制hive中map以及reduce的数量
  • Map数量相关的参数
    • mapred.max.split.size 每个split的最大值,即每个map处理文件的最大值
    • mapred.min.split.size.per.node 一个节点上split的最小值
    • mapred.min.split.size.per.rack 一个机架上split的最小值
  • reduce数量相关的参数
    • mapred.reduce.tasks 强制指定reduce任务的数量
    • hive.exec.reducers.bytes.per.reduce 每个reduce任务处理的数据量
    • hive.exec.reduce.max 每个任务最大的reduce书
 
12、hive-JVM重用
    • 适用场景
      • 小文件个数过多
      • task个数过多
    • 通过set mapred.job.reuse.jvm.num.tasks=n来设置
      •   缺陷:设置开启之后,task插槽会一直占用资源,无论是否有task运行,直到所有的task即整个job全部执行完成时,才会释放所有的task插槽的资源 

hive优化策略

Hive的优化策略大致分为:配置优化(hive-site.xml和hive-cli执行前配置)、表优化、hive数据倾斜解决方案。回答的时候需要,需要准确的说出具体的配置参数,准确的说出具体的配置参数,这是一个深刻的教训。配置优化1-Fetch抓取配... 查看详情

hive在工作中的调优总结(代码片段)

总结了一下在以往工作中,对于HiveSQL调优的一些实际应用,是日常积累的一些优化技巧,如有出入,欢迎在评论区留言探讨~EXPLAIN查看执行计划建表优化分区分区表基本操作,partitioned二级分区动态分区分桶分... 查看详情

hive性能优化(全面)

...问题,我们能有哪些有效的优化手段呢?下面列出一些在工作有效可行的优化手段:而接下来,我们心中应该会有一些疑问,影响性能的根源是什么?2.性能低下的根源hive性能优化时,把HiveQL当做M/R程序来读,即从M/R的运行角度... 查看详情

hive的数据倾斜以及优化策略(代码片段)

...过程中出现数据分布不均匀。比如:在MR编程中reducetask阶中的数据的大小不一致,即很多的数据集中到了一个reducetask中,hive的数据倾斜就是mapreduce的数据倾斜maptaskreducetask最后就是reducetask阶段的数据倾斜。 不会产生数据倾... 查看详情

hive优化(代码片段)

...用Hive踩过的坑》一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题。下面开始本篇文章的优化介绍。2.介绍  首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问... 查看详情

hive性能优化(代码片段)

...用Hive踩过的坑》一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题。下面开始本篇文章的优化介绍。2.介绍  首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问... 查看详情

hive优化之hive的配置参数优化

...用于大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的一个点,因此掌握一些Hive调优是必不可少的一项技能。影响Hive效率的主要因素有数据倾斜、数据冗余、job的IO以及不同底层引擎配置情况和Hive本... 查看详情

关于运维监控实践中的一些tips

...补充完善,推动监控系统功能建设,推动监控持续优化的工作落地。运维团队需要关注监控,开发、 查看详情

gc优化策略-下篇

 出处http://www.cnblogs.com/zblade/翻译Unity中的GC优化,英文链接在下:英文地址 造成不必要的堆内存分配的因素  我们已经知道值类型变量在堆栈上分配,其他的变量在堆内存上分配,但是任然有一些情况下的堆内存分配... 查看详情

hive里的优化和高级功能

...需求都要获取表内的所有的数据。有些只需要读取所有列中的几列,而忽略其他列的的数据。例如,表Ta 查看详情

hive性能优化之计算job执行优化(代码片段)

...的job。大多数情况下,用户不需要了解Hive内部是如何工作的,不过,当用户对于Hive具有越来越多的经验后,尤其是需要在做性能优化的场景下,就要学习下Hive背后的理论知识以及底层的一些实现细节,会... 查看详情

在 Hadoop Hive 中优化几 GB 的数据

...已经非常广泛地使用Hive,我想知道是否有办法改进以下工作流程。每天晚上,我们的Oracle集群中的一个制表符分隔的未压缩文本文件转储被写入HDFS,由Hive处理。我这样加载表格:CREATEEXTERNALTABLEACCOUNTINGTABL 查看详情

优化 HIVE 查询中的连接:c

】优化HIVE查询中的连接:c【英文标题】:OptimizejoininHIVEquery:c【发布时间】:2014-10-1612:34:12【问题描述】:我想知道哪一个是优化连接这三个可能候选者中的两个表的HIVE(0.12)查询的最佳方法(并且可能理解为什么):SELECT*FROMajo... 查看详情

多线程synchronized中的锁优化的机制(偏向锁-;轻量级锁-;重量级锁)(代码片段)

...们就可以总结出Synchronized具有以下特性(只考虑JDK1.8):加锁工作过程1.偏向锁举个栗子理解偏向锁:文里的偏向锁,和懒汉模式也有点像,思路都是一致的,只是在必要的时候,才进行操作,如果不必要,则能省就省2.轻量级锁其他... 查看详情

你可能不知道的9条webpack优化策略(代码片段)

...大家分享如何通过一些分析工具、插件以及webpack新版本中的一些新特性来显著提升webpack的打包速度和改善包体积,学会分析打包的瓶颈以及问题所在。本文演示代码,仓库地址速度分析 查看详情

hive与优化方法(代码片段)

...、Hive概念二、Hive架构三、Hive与数据库的比较四、Hive中一些重要的概念4.1内部表和外部表4.2分区表4.3Hive排序关键字4.4Hive分桶4.5三种排序窗函数的区别4.6Hive解析MR的Reduce数量的确定4.7Hive的存储格式五、Hive调优5.1部分场景下尽可... 查看详情

a/btest基础使用

...使用情况,看哪个方案更符合设计目标(1)(客户端的工作):app启动,会请求abtest服务后台,获得所有的实验的以及命中的策略缓存在app中。(2) (abtest后台的工作):abtest接收一个uuid+ci+pt的请求,返回给app所有的实验... 查看详情

大数据开发工程师hive(hive如何进行优化)

...谓词下推:sethive.optimize.ppd=true,默认是true:a.将Sql语句中的where谓词逻辑都尽可能提前执行,减少下游处理的数据量;4)大表join小表:a.开启MapJoin:sethive.auto.convert.join=true:b.MapJoin是将Join双方比较小的那个表 查看详情