3

什么时候应该使用 MultithreadedMapper?

如果我在我的应用程序是纯计算的地方使用 MultithreadedMapper,我的工作会更快吗?(无延迟类型映射器)

4

2 回答 2

6

这取决于但我会说避免使用 MultithreadedMapper 作为第一个解决方案。

因此,最好通过同时启动更多映射器来使用单线程映射器进行扩展,以便它们可以处理多个输入。您拥有的核心越多,您可以设置的 mapred.tasktracker.map.tasks.maximum 值就越高。当然,您将需要更强大的机器。

我的理解是,当您受 I/O 限制时,MultithreadedMapper 很有用,例如从 Web 获取页面的延迟比从本地 I/O 的延迟要长。在这种情况下,使用 MultithreadedMapper 会有所帮助,因为您不会在单个网络 I/O 调用上被阻塞,并且您可以在数据可供您使用时继续处理。

但是,如果您在 HDFS 中有大量数据要处理,那么它们很容易在数据本地化时获取,并且如果计算受 CPU 限制,那么多核、多进程解决方案会更有帮助。

此外,您必须确保您的映射器是线程安全的。

于 2012-07-03T06:19:02.317 回答
3

查看这篇文章12,了解何时在映射器中使用和不使用多个线程。建议增加每个节点上的映射槽数,而不是使用 MultithreadedMapper。

于 2012-07-03T06:17:48.070 回答