0

我正在开发一个 Java MapReduce 程序,我想知道是否可以使用套接字或任何其他方式在减速器之间共享数据。如果是通过sockets,如何获取某个key的reducer操作机器的ip地址和端口号?

提前致谢 :)

4

1 回答 1

0

您可以通过您自己的自定义套接字进行通信,并找到正在运行特定密钥的减速器的特定主机,您可以使用 JobClient API 查询作业跟踪器以获取正在运行的作业减速器列表。

要找到 reducer 主机,请通过作业 Partitioner 运行密钥(大多数情况下为哈希),确定 reducer 任务编号(0 到 num reducers-1),然后找到运行 reducer 任务的机器(从 JOb Tracker 获取通过 JobClient API)。

不过有些事情需要考虑:

  • 如果你的所有 reducer 不能全部并行运行(reducer 多于 reducer 插槽,或者另一个作业同时运行),会发生什么?
  • 如果作业跟踪器安排两个或多个减速器在同一个任务节点上运行,您将如何分配端口号以确保它们都不会尝试侦听相同的编号(我想您应该选择一个基本端口号,例如 21000,然后每个reducer将监听一个端口号是那个加上reducer号的端口)。如果该端口已被另一个进程使用会怎样?
于 2013-09-28T20:32:38.777 回答