背景:任务topic#report_hw_page_uv_stat#v1凌晨5点高峰期消耗vcore80000+ 执行时间1100+s
调试:下午4点 较空闲时段
尝试1:reduce个数
跟案例1一样,设置了set mapred.reduce.tasks=200,现在注释掉。对比结果,vcore减少70%,但时间增加了。还是vcore优先吧。
before
*********************TASK RESOURCE INFO*********************
* applicationIds:['application_1537022799650_6294348'] *
* vcoreSecondsSum:5274 *
* memorySecondsSum:8128009 *
* mapCntSum:39 *
* reduceCntSum:4600 *
* containerCntSum:4639 *
* numFilesSum:1 *
* numRowsSum:3670 *
* totalSizeSum:179339 *
* rawDataSizeSum:175669 *
* hiveExecuteTime:63 *
************************************************************
after
*********************TASK RESOURCE INFO*********************
* applicationIds:['application_1537022799650_6294785'] *
* vcoreSecondsSum:1995 *
* memorySecondsSum:3025414 *
* mapCntSum:39 *
* reduceCntSum:46 *
* containerCntSum:85 *
* numFilesSum:1 *
* numRowsSum:3670 *
* totalSizeSum:179339 *
* rawDataSizeSum:175669 *
* hiveExecuteTime:110 *
************************************************************
尝试2:调整hive.exec.reducers.bytes.per.reducer
默认是600M,依次调整为300M,1G 对比效果。
300M
*********************TASK RESOURCE INFO*********************
* applicationIds:['application_1537022799650_6295502'] *
* vcoreSecondsSum:1925 *
* memorySecondsSum:2901075 *
* mapCntSum:39 *
* reduceCntSum:46 *
* containerCntSum:85 *
* numFilesSum:1 *
* numRowsSum:3670 *
* totalSizeSum:179339 *
* rawDataSizeSum:175669 *
* hiveExecuteTime:148 *
************************************************************
1G
*********************TASK RESOURCE INFO*********************
* applicationIds:['application_1537022799650_6295538'] *
* vcoreSecondsSum:1223 *
* memorySecondsSum:1860971 *
* mapCntSum:39 *
* reduceCntSum:46 *
* containerCntSum:85 *
* numFilesSum:1 *
* numRowsSum:3670 *
* totalSizeSum:179339 *
* rawDataSizeSum:175669 *
* hiveExecuteTime:63 *
************************************************************
决定调整为1G
尝试3: mapjoin
在reducer=1G的基础上,set hive.auto.convert.join = true启用mapjoin。可是结果变坏了。。。
mapjoin
*********************TASK RESOURCE INFO*********************
* applicationIds:['application_1537022799650_6295650'] *
* vcoreSecondsSum:1497 *
* memorySecondsSum:2280312 *
* mapCntSum:39 *
* reduceCntSum:36 *
* containerCntSum:75 *
* numFilesSum:6 *
* numRowsSum:0 *
* totalSizeSum:179339 *
* rawDataSizeSum:0 *
* hiveExecuteTime:75 *
************************************************************
分析原因,left join的大表可能不算大(比如未达到千万级),导致小表复制的代价 > 大表shuffle的代价。通常当大表比较大时,提升效果会很明显。决定不启用mapjoin。
总结:
1.mapjoin不一定会提升。
2.