1. pig.maxCombinedSplitSize 和 pig.splitCombination
用途:
- 当处理处理大批量的小文件时,默认设置情况下可能会遇到“命名空间超过配额限制”的错误。
- Pig脚本运行结果可能会产生数量巨大的输出文件(通常在没有reduce时),比如几万甚至几十万个文件输出。
Pig提供了能够合并多个输入文件生成一个split的功能:
- set pig.splitCombination true
- set pig.maxCombinedSplitSize 134217728; -- 134217728 = 128M
2. mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.execution
用途:
- Pig处理大批量数据时,当pig job被提交后,起初执行速度还不错,但是到了90%之后,job的执行速度就十分缓慢。原因是拖后腿的task大多数很早就被启动执行了,导致整个job在后期执行非常缓慢。
如果设置mapred的speculative开关为true,Map-Reduce框架就会侦测执行缓慢的task,启动新的task做相同的事情,最终把拖后腿的task都kill掉,从而有效的提高了pig job的执行速度。
- set mapred.map.tasks.speculative.execution true
- set mapred.reduce.tasks.speculative.execution true
3. mapreduce.map.output.compress
用途:
- 当mapreduce的输出文件较大时,则需要压缩时,从而减少存储量。
可以更改mapred.output.compress为true,可以压缩文件:
- set mapred.output.compress true
4. mapreduce.job.reduce.slowstart.completedmaps
用途:
- 当Map Task完成的比例达到该值后才会为Reduce Task申请资源。
mapreduce.job.reduce.slowstart.completedmaps参数如果设置的过低,那么reduce就会过早地申请资源,造成资源浪费;如果这个参数设置的过高,比如为1,那么只有当map全部完成后,才为reduce申请资源,开始进行reduce操作,实际上是串行执行,不能采用并行方式充分利用资源。
- set mapreduce.job.reduce.slowstart.completedmaps 1.0
5. mapreduce.map.memory.mb和mapreduce.reduce.memory.mb
用途:
- 设置每个Reduce Task需要的内存量和每个Map Tast需要的内存量
设置Reduce和Map任务的内存量:
- set mapreduce.map.memory.mb 20000
- set mapreduce.reduce.memory.mb 20000