MapReduce算法中如何使用setup()和cleanup()进行优化

参考[Hadoop] setup & cleanup 方法

Mapper类的setup()函数在Mapper类的run()函数中被调用。

向hadoop提交job后,hadoop会在MapTask的runNewMapper()或者runOldMapper()函数中使用反馈机制 实例化具体的Mapper子类,然后调用这个对象的run()函数,其中setup()函数就在这个函数的开始被调用,因为hadoop会向 setup()函数中传递Configuration等一些变量,所以我们可以通过重载setup()函数来获得系统变量实现自己的功能。

setup()
此方法被MapReduce框架仅且执行一次,在执行Map任务前,进行相关变量或者资源的集中初始化工作。若是将资源初始化工作放在方法map()中,导致Mapper任务在解析每一行输入时都会进行资源初始化工作,导致重复,程序运行效率不高!
cleanup()
此方法被MapReduce框架仅且执行一次,在执行完毕Map任务后,进行相关变量或资源的释放工作。若是将释放资源工作放入方法map()中,也会导致Mapper任务在解析、处理每一行文本后释放资源,而且在下一行文本解析前还要重复初始化,导致反复重复,程序运行效率不高!

所以,建议资源初始化及释放工作,分别放入方法setup()和cleanup()中进行。

参考 【转】MapReduce编程模式原理及其算法设计(里面包括了Setup的说明)

觉得有帮助的话,不妨加个鸡腿,O(∩_∩)O哈哈~