名词解释:
云霄飞车: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,跳出;如需要reduce操作,执行步骤(3);

本文介绍了Hive中针对reduce数为1的MapReduce任务(MR Job)进行性能优化的方法。通过分析云霄飞车项目,揭示了Hive在估算reduce数时的问题,提出了优化算法,包括判断reduce数是否编译时确定以及根据输入文件大小重新估算reduce数。通过实例展示,调整reduce任务数量显著提升了作业执行效率。
最低0.47元/天 解锁文章
9199

被折叠的 条评论
为什么被折叠?



