hive调优之map task数量

第一步:
1.当输入文件超过mapred.max.split.size大小时,以Math.max(minSize,Math,min(maxSize,blockSize))为单位(以他的倍数)切分成不大于mapred.max.split.size大小的split分片。其余的生成碎片文件如果大于nodeSize就生成split,否则待处理
2.当输入文件小于mapred.min.split.size大小时,进行合并文件生产split分片,但是合并的当前文件要小于maxSize。其余的生成碎片文件如果大于nodeSize就生成split,否则待处理
第二步:
1.合并同一个节点的碎片,合成条件满足不小于nodeSize(mapred.min.split.size.per.node)
2.合并同一个机架的碎片,合成条件满足不小于rackSize(mapred.min.split.size.per.rack)
3.合并不同机架的碎片,合成条件只要长度超过mapred.max.split.size就合并成一个split, 剩下的碎片无论长度, 合并成一个split
备注:如果设置mapred.combine.input.format.local.only=false时,在切分完之后,发现split小于maxSize时,就进行合并,并且是挂节点和挂机架的合并,这个要慎用

**例题1:**输入目录下五个文件,rack1下三个文件,长度为2050,1499,10, rack2下两个文件,长度为1010,80. 另外blockSize为500.
mapred.max.split.size=1000
mapred.min.split.size.per.node=300
mapred.min.split.size.per.rack=100
第一步:
rack1 split:1000 1000 1000 499 碎片:50 10
rack2 split: 1000 碎片:10 80
第二步:
rack1 split:1000 1000 1000 499 碎片:50+10
rack2 split: 1000 碎片:10+80
第三步:
rack1 split:1000 1000 1000 499
rack2 split: 1000
碎片(50+10)+(10+80)=150

以上例题是理想情况下,一般的话可能出现同一个文件在不同节点上出现,所以我们通过这种方式是计算的大概。
所以:
以上例题是理想情况下,一般的话可能出现同一个文件在不同节点上出现,所以我们通过这种方式是计算的大概。
所以:
增加map task数量时:
要尽量拆分文件,调小maxSize(如果文件大于maxSize时,就要切分)
要避免合并文件,调小minSize(默认就行,默认大小为1,如果文件小于minSize就要合并文件,而此时文件都不具备合并条件,所以切分出的split数量就多)
减小map task数量时:
要尽量合并文件,适量调大minSize(minSize < maxSize ,如果minSize大于文件时,就具有合并文件,需要合并多大文件还需要看maxSize的大小,当前合并的文件如果超过maxSize就不能合并了,比如文件,a=123,b=423,c=843,maxSize=500,当a,b合并后为546,在合并c时,发现已经大于500了,就不在合并了)
要避免拆分文件,调大maxSize

备注:
maxSize=mapred.max.split.size
minSize=mapred.min.split.size
nodeSize=mapred.min.split.size.per.node
rackSize=mapred.min.split.size.per.rack
设置:
#合并map的输入split文件
hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
dfs.block.size=默认

set mapred.combine.input.format.local.only=false;
这个参数默认为true,是合并同一个节点的数据,当设置为false时,就开启跨节点和跨机架合并文件。合并的文件不大于maxSize,建议不要开启这个参数,因为这样的话会大大消耗磁盘I/O。如果有非常大量的小文件时,可以开启这个参数,比如有200个小文件,都是在10m左右,每个计算逻辑又简单,这时可以开启这个参数。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Hive调优思路,可以从以下几个方面入手: 1. 数据存储和分区设计:合理的数据存储和分区设计可以提高查询性能。根据业务需求,将数据按照合适的列进行分区,这样可以减少数据扫描量。 2. 数据压缩:使用合适的压缩格式可以减小数据存储空间,并提高查询性能。例如,使用Snappy、LZO等压缩算法来减少磁盘IO和网络传输。 3. 数据倾斜处理:当某些列的值过于集中,导致某些Task处理的数据量远大于其他Task时,会导致任务执行时间不均衡。通过对倾斜键进行处理,如使用随机前缀或者进行拆分处理,可以解决数据倾斜问题。 4. 合理设置Hive参数:根据实际情况调整Hive的参数配置,以提高查询性能。常见的参数包括:hive.exec.parallel、hive.tez.container.size、hive.vectorized.execution.enabled等。 关于Hive的参数配置,下面是一些常用的参数: 1. hive.exec.parallel:设置并行执行任务的线程数,默认为1。可以根据集群资源情况适当调整,以提高任务执行效率。 2. hive.tez.container.size:设置每个Tez任务的容器大小,默认为1024(MB)。可以根据具体的任务需求和集群资源情况进行调整,以充分利用集群资源。 3. hive.vectorized.execution.enabled:启用向量化执行,可提高查询性能。默认为false,可以通过设置为true来开启向量化执行。 4. hive.optimize.sort.dynamic.partition:动态分区排序优化,默认为true。对于动态分区表,可以开启该参数以提高插入性能和查询性能。 5. hive.stats.autogather:自动收集统计信息,默认为true。开启该参数可以帮助优化查询计划,提高查询性能。 以上是一些常见的Hive调优思路和参数配置,具体的调优策略还需要根据实际情况进行调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值