名词解释:
云霄飞车:hive本身对MR Job的 reduce数估算不合理,导致reduce分配过少,任务运行很慢,云霄飞车项目主要对hive本身reduce数的估算进行优化。
map_input_bytes:map输入文件大小,单位:bytes
map_output_bytes:map输出文件大小,单位:bytes
优化背景:
云霄飞车一期存在如下问题:只能优化reduce数>1的MR Job。原因在于无法确定reduce数为1是编译时确定还是根据map输入估算的结果。对于编译时确定,不能进行优化,否则导致结果错误;对于后者,需要进行优化,特别是对于map_output_bytes远大于map_input_bytes的情况,不进行优化将导致reduce执行过慢。
解决方法:
确定reduce数为1是编译时确定还是根据map_input_bytes估算得到的。具体实现方式:编译完成后,收集编译时确定的reduce数为1的Job;云霄飞车优化时,如果此Job的reduce数为1不在收集的Job集合里面,则此Job不是编译时确定的reduce,则进行优化,否则不优化。
优化算法:
hive估算reduce的逻辑如下:
- 判断Job是否需要reduce操作,如不需要reduce操作,reduce数设置为0,跳出;如需要reduce操作,执行步骤(2);
- 判断Job是否在编译时确定reduce数为1,如编译确定为1,reduce数设置为1