Hive优化学习

(一)hive的参数设置优化

(1)读取零拷贝优化

set hive.exec.orc.zerocopy=true;
注:依旧是开启功能,能否用上,看hive的判断

概念:尽量减少在读取的时候读取的数据量的大小。
条件:
1.ORC存储(列存储)
2.查询只用到的部分的列
一般情况下,我们写SQL是有一部分的SQL是只会用到表中的部分的列,并不是要全部的列。
这种场景下,就可以只加载用到的列即可。不用到的不去加载(必须是列式存储)。

(2)推测执行 策略(Speculative Execution)

set mapred.map.tasks.speculative.execution = true  #默认是 true

推测执行是指当Hadoop集群中某个任务的进度较慢时,集群会启动一个新的任务来运行相同的任务。当其中一个任务完成后,集群会终止其他运行相同任务的任务。这种并行执行的机制可以提高整体作业的执行速度。

推测执行的目标是尽快完成作业,但在某些情况下,推测执行可能导致不必要的资源浪费。例如,如果一个任务运行缓慢是由于网络或存储问题而不是计算资源问题导致的,启动一个额外的任务只会浪费更多的资源而不会加速任务的完成。

如何关闭推测执行? 在Hive中,可以通过设置以下参数来关闭推测执行:

set hive.mapred.reduce.tasks.speculative.execution=false;
set hive.mapred.map.tasks.speculative.execution=false;

解决的实际问题:
假设我们有一个Hive表,包含了大量的数据,我们需要对这个表进行一次复杂的查询操作。由于数据量很大,查询可能需要较长的时间来完成。在这种情况下,我们可以考虑开启Hive的推测执行,以加速查询的执行。

有分享资料指出:如果用户因为输入数据量很大而需要执行长时间的map或者Reduce task的话,那么启动推测执行造成的浪费也是非常巨大大。

(3)合并小文件的配置项

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
----
set mapred.max.split.size=256000000;  #每个Map最大输入大小
set mapred.min.split.size.per.node=100000000; #一个节点上split的至少的大小 
set mapred.min.split.size.per.rack=100000000; #一个交换机下split的至少的大小
set hive.input.format=org.apache.Hadoop.hive.ql.io.CombineHiveInputFormat;  #执行Map前进行小文件合并

输入合并:当有大量小文件时,启动合并,减少map数。防止map端输入合并小文件(当文件体积很小但是行数很多时)

执行Map前进行小文件合并,在开启了org.apache.hadoop.hive.ql.io.CombineHiveInputFormat后,一个data node节点上多个小文件会进行合并,合并文件数由mapred.max.split.size限制的大小决定。
mapred.min.split.size.per.node决定了多个data node上的文件是否需要合并;
mapred.min.split.size.per.rack决定了多个交换机上的文件是否需要合并;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值