我什么时候应该使用MultithreadedMapper?
如果我使用MultithreadedMapper,我的应用程序是纯计算,我会更快地完成我的工作。 (没有延迟型映射器)
答案 0 :(得分:6)
这取决于但我会说避免使用MultithreadedMapper作为第一个解决方案。
因此,最好使用单线程Mapper进行扩展,同时启动更多映射器,以便它们可以处理多个输入。您拥有的核心越多,您设置的mapred.tasktracker.map.tasks.maximum值就越高。当然,你需要更强大的机器。
我的理解是,如果您的I / O绑定类似于来自Web的获取页面,那么MultithreadedMapper非常有用,它具有比本地i / o更多的延迟。在这种情况下,使用MultithreadedMapper会有所帮助,因为您没有在单个网络I / O调用上被阻止,并且您可以在数据可供您使用时继续处理。
但是如果您要处理HDFS中的大数据,那么随着数据的本地化,它们很容易获取,如果计算是CPU绑定的,那么多核,多进程解决方案会更有帮助。
此外,您必须确保您的映射器是线程安全的。
答案 1 :(得分:3)