轻松入门大数据
第11章 入门到进阶:如何快速学会Hive调优
11.1 Hive调优
- 抓取策略
- 严格模式
- 本地模式
- 排序
- 推测执行
- Mapper和Reducer个数设置
- 数据倾斜
11.1.12 Hive如何设置合理的MapTask数量
【关于MapTask数量的合理设置问题】
在我们讲MR 的时候就已经学到了
MapTask 的数量 是在 FileInputFormat
中算出来的
看到我们的工程【因为重装过(忘记拿出来了),所以以前写过的东西,就没贴出来了,主要是看看源码】
就这个方法,计算切片数量的。
通常情况下,以128M 为例:
780 6个128 + 1个小的 == 7个MapTask
如果一个文件夹下有三个文件,那就是下面的分片总数【最大值】:
10m 1
20m 1
150m 2
总之,影响MapTask个数的因素:总文件个数、文件大小、block大小
MapTask ReduceTask都是以JVM进程的方式运行的
【问题】
-
MT 越多越好 ? x
-
一个MT接近128M就行了? x
一个大小120M的文件,但是业务非常复杂 ==> 增加MapTask数量
【总之都是一个相对问题】
演示:
现在的本地没开的情况下:
执行:select count(1) from emp;
OK, 一个mapper,一个reducer
如何增加?
设置参数:mapreduce.input.fileinputformat.split.maxsize
默认值是:
我们搞小一点,比如,直接给个100
OK, 再试一次
这次算出来就有7 个了
【当然一般在生产环境中,mapper 的数量一般我们都不会动的,知道怎么调就OK了】