Hive map和reduce个数的设置

本文深入探讨Hive性能优化策略,包括减少小文件数量、调整map和reduce任务分配、设置合理的reduce个数等关键步骤,旨在提升大数据处理效率。

hive优化的几种情况

目标就是每个map,reduce数据处理量要适当
1.hive小文件很多,造成map个数很多,需要减少map个数
set mapred.max.split.size=100000000;
set mapred.min.split.size.per.node=100000000;
set mapred.min.split.size.per.rack=100000000;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
前面三个参数确定合并文件块的大小,大于文件块大小128m的,按照128m来分隔,小于128m,大于100m的,
按照100m来分隔,把那些小于100m的(包括小文件和分隔大文件剩下的)

2.文件小于128M,但是记录多,默认用一个map去算,增加map个数

块大小的计算方式
根据computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128M公式,
调整maxSize最大值。让maxSize最大值低于blocksize就可以增加map的个数。
set mapreduce.input.fileinputformat.split.maxsize=50000000(50M);
影响map个数,即split个数的因素主要有:
1)HDFS块的大小,即HDFS中dfs.block.size的值。如果有一个输入文件为1024m,当块为
256m时,会被划分为4个split;当块为128m时,会被划分为8个split。
2)文件的大小。当块为128m时,如果输入文件为128m,会被划分为1个split;当块为256m,
会被划分为2个split。
3)文件的个数。FileInputFormat按照文件分割split,并且只会分割大文件,即那些大小超过
HDFS块的大小的文件。如果HDFS中dfs.block.size设置为64m,而输入的目录中文件有100个,则
划分后的split个数至少为100个。
4)splitsize的大小。分片是按照splitszie的大小进行分割的,一个split的大小在没有设置的情况下,
默认等于hdfs block的大小。但应用程序可以通过两个参数来对splitsize进行调节。

3.设置reduce个数
1.设置每个reduce处理数据量,默认1G
set hive.exec.reducers.bytes.per.reducer=500000000; (500M)
2.直接调整reduce个数
set mapred.reduce.tasks = 15;
3.只有一个reduce;
a) 没有group by的汇总,比如把select pt,count(1) from tablea group by pt;
b) 用了Order by
c) 有笛卡尔积

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值