HIVE 使用中调整MAP 和 REDUCE 数量
本次经过参考很多文档,和在集群中的实践,我把最后的成功结果整理了下。
最后能够明显改变计划的MAP 和 REDUCE数量的方法
调整如下两个参数
**set hive.exec.reducers.bytes.per.reducer = 52428800; – 每个reduce 可以处理的字节长度
set mapred.max.split.size=52428800; – 每个切片可以处理的字节长度 **
- 还有两个比较直接的方法
- set mapred.reduce.tasks=10; – 设置reduce的数量
- set mapred.map.tasks =10 ; – 设置map的数量
但是这两个方法通用性比较差,无法适用其他数据处理场景。
- 实际适用记录
- 输入文件,三个文件,总大小1G。
默认下 按hdfs block大小划分,dfs.blocksize = 256M
每个文件 Size/256≈1.4 则分两个切片 2 。 总共需要 2*3 =6 个map
设置后数量为 20个 set hive.exec.reducers.bytes.per.reducer = 52428800;
set mapred.max.split.size=52428800;
切片数量计算:400047393/52428800 ≈ 7.63
按这个算法其实应该算出来有24个,但是为什么最后是20个,我还没想明白 但是调高map数量目的已经达到,以后有机会再研究
- Reduce数量调整
- 这个就相对简单了
- set hive.exec.reducers.bytes.per.reducer = 52428800
设置每个reduce 处理文件最大字节长度,可以增加或减少Reduce数量。
设置后数量
默认数量