很多用户在使用HDInsight的Pig功能时,发现有时很简单一个PigLatin的relation会花费很长时间执行,当HDI使用MR框架时,由于Pig会根据具体的relation拆分成相应的Map和Reduce任务。根据Hadoop的MR框架如下特点,针对Reduce并行度的优化,会对Pig的作业有很大的性能影响。
Hadoop的MR框架中有以下特点:
- Map的并行度个数是由输入文件来决定,而Reduce并行度的个数是由Parallel关键字来决定。
- 当不指定parallel关键字时, Reducer task仅有一个。
- Reduce的并行度依赖于cluster的规模,但是每次最多同时提交80个reduce。
当我们使用Get-AzureHDInsightJobOutput来进一步分析Pig作业的具体执行情况,
我们可以通过Pig作业执行的具体日志来查看Map和Reduce的效率。如下为当使用groupby的Pig作业的日志信息:
===================================================
测试1:默认一个Reduce的Pig作业,执行Pig作业花费了74分钟:
JobId Maps Reduces MaxMapTime MinMapTIme AvgMapTime MedianMapTime MaxReduceTime MinReduceTime AvgReduceTime MedianReducetime Alias Feature Outputs
job_1423547880282_0013 482 1 418 23 63 63 4314 4314 4314 4314 analyzed,grpd,outtupleGROUP_BY wasb:///home/ambertest1_32node,
测试2:优化为80个Reduce的Pig 作业,执行同样的Pig作业花费了6分钟:
JobId Maps Reduces MaxMapTime MinMapTIme AvgMapTime MedianMapTime MaxReduceTime MinReduceTime AvgReduceTime MedianReducetime Alias Feature Outputs
job_1423547880282_0049 482 80 134 19 57 61 204 70 153 155 analyzed,grpd,outtupleGROUP_BY wasb:///home/ambertest9_32node,
===================================================
以上PigLatin作业主要使用的是Group by来声明Pig的relation,此外针对其它等同样需要使用reduce关键字的Pig作业,有以下优化建议:
- 在具体执行的Pig Latin中指定所需的Reduce并行度,具体语句如下:
SET default_parallel 80; /*根据具体HDIcluster的规模设定Reduce的并行度*/
- 设定整个HDI cluster的MR框架的Reduce并行度,即为修改mapred-site.xml文件的reduces属性。