hive 调优----参数

1、分区设置

set hive.exec.dynamic.partition = False

设置 True 表示开启动态分区功能。

set hive.exec.dynamic.partition.mode = strict ;

设置成 nonstrict 表示允许所有分区都是动态的。

set hive.exec.max.dynamic.partitions.pernode = 100 ;

每个mapper 或reducer 可以创建的最大动态分区个数。如果每个mapper或reducer 尝试创建大于这个值的分区的话则会跑出一个致命错误信息。

2、job设置

set hive.exec.parallel = False;

控制在同一个sql中的不同job是否可以同时运行,默认为FALSE,当参数为false的时候,job是按照顺序执行。

当为True时,子查询中并无关系的sql可以并行。 在资源充足的时候hive.exec.parallel会让那些存在并发job的sql运行得更快,但同时消耗更多的资源

在共享集群中,需要注意下,如果 job 中并行阶段增多,那么集群利用率就会增加。

set hive.exec.parallel.thread.number = 8;

控制对于同一个sql来说同时可以运行的job的最大值,该参数默认为8.此时最大可以同时运行8个job.

set hive.map.aggr=True;

 在mapper端部分聚合,相当于Combiner, Map-Side聚合(一般在聚合函数sum,count时使用)。

set hive.groupby.skewindata=True; 

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

set hive.groupby.mapaggr.checkinterval=100000;

这个是group的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置。

set hive.merge.mapfiles = true;

是否和并 Map 输出文件,默认为 True

set hive.merge.mapredfiles = False;

是否合并 Reduce 输出文件,默认为 False

set hive.merge.size.per.task = 256*1000*1000;

合并文件的大小

set hive.mapred.reduce.tasks.speculative.execution = True;

reducer阶段是否开启推测执行

所谓的推测执行,就是当所有task都开始运行之后,Job Tracker会统计所有任务的平均进度,如果某个task所在的task node机器配置比较低或者CPU load很高(原因很多),导致任务执行比总体任务的平均执行要慢,此时Job Tracker会启动一个新的任务(duplicate task),原有任务和新任务哪个先执行完就把另外一个kill掉,这也是我们经常在Job Tracker页面看到任务执行成功,但是总有些任务被kill,就是这个原因。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Hive on MapReduce的性能调优,可以采取以下几个方面的优化策略: 1. 数据倾斜处理:在数据倾斜的情况下,可以使用Hive提供的一些技术来解决,如使用倾斜连接优化(Skew Join Optimization)或者使用动态分区(Dynamic Partitioning)来解决数据倾斜问题。 2. 数据压缩:Hive支持对数据进行压缩存储,可以通过设置适当的压缩算法和参数来减少磁盘IO,提高作业执行速度。 3. 数据分区和分桶:合理使用数据分区(Partition)和分桶(Bucketing)机制,可以减少数据扫描量,提高查询效率。 4. 动态分区:对于动态增长的表,可以使用动态分区(Dynamic Partitioning)来避免全表扫描,提高查询性能。 5. 调整MapReduce参数:根据作业的特性和集群的资源情况,可以调整MapReduce相关参数,如mapreduce.tasktracker.map.tasks.maximum、mapreduce.tasktracker.reduce.tasks.maximum等来优化作业的执行效率。 6. 使用索引:Hive支持创建索引,在查询频繁的列上创建索引可以加速查询操作。 7. 数据格式选择:选择合适的数据格式,如ORC、Parquet等,这些格式在存储和查询方面有较好的性能表现。 8. 并行度调整:根据集群资源和作业特性,调整任务的并行度,如mapred.map.tasks、mapred.reduce.tasks等,以充分利用集群资源。 9. 数据倾斜检测:使用Hive提供的一些工具,如Hive Explain、Hive Profile等来检测和分析作业中的数据倾斜问题,并针对性地进行优化。 总之,通过合理使用数据倾斜处理、数据压缩、数据分区和分桶、调整MapReduce参数等优化策略,可以提高Hive on MapReduce的性能和执行效率。根据具体的业务需求和数据特点,选择合适的优化策略,并结合实际情况进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值