hive工作中的一些优化策略

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,当选项设定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中),最后完成最终的聚合操作。
 
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插槽的资源 

转载于:https://www.cnblogs.com/liufei-yes/p/11518338.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive查询变慢时,可以考虑以下几种优化方式: 1. 数据分区:对表进行合理的数据分区可以提高查询性能。通过将数据按照某个字段(如日期、地区等)进行分区,可以减少需要扫描的数据量,提高查询效率。 2. 数据压缩:使用适当的数据压缩格式(如ORC、Parquet)可以减少磁盘占用和I/O开销,提高查询速度。这些压缩格式可以在查询时只读取必要的列,减少不必要的数据读取。 3. 合理使用索引:在Hive,可以使用索引来加速查询。对于经常被使用作为查询条件的列,可以创建索引来提高查询性能。但需要注意,索引会增加写入的开销,所以需要根据实际情况权衡。 4. 数据倾斜处理:当某个字段的取值分布不均匀时,可能会导致查询性能下降。可以通过对数据进行采样、调整数据分桶等方式来处理数据倾斜问题,提高查询效率。 5. 调整Hive配置参数:根据实际情况,合理调整Hive的配置参数也可以提升查询性能。例如,增加内存限制、调整并行度等。 6. 使用Tez或Spark引擎:Hive支持多种执行引擎,如MapReduce、Tez、Spark等。根据实际情况选择合适的执行引擎,可以提高查询性能。 7. 数据预处理:在进行复杂计算之前,可以考虑对数据进行预处理,将计算结果缓存起来,以减少重复计算的开销。 以上是一些常见的Hive查询优化方式,具体的优化策略需要根据具体情况进行调整和实施。可以通过分析查询执行计划、查看日志等方式了解查询性能瓶颈,并根据实际情况选择合适的优化方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值