Hadoop - 通过套接字在Reducer之间共享数据

时间:2013-09-28 18:07:09

标签: java api sockets hadoop mapreduce

我正在研究Java MapReduce程序,我想知道是否可以使用套接字或任何其他方式在reducer之间共享数据。如果它是通过套接字,如何检索操作减速器的机器的IP地址和端口号为某个键?

提前致谢:)

1 个答案:

答案 0 :(得分:0)

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

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

有些事情需要考虑:

  • 如果所有的Reducer都不能并行运行(减速器比减速器插槽多,或者同时运行另一个作业)会发生什么?
  • 如果作业跟踪器安排两个或更多个Reducer在同一个任务节点上运行,那么如何分配端口号以确保它们都不会尝试侦听相同的数字(我猜你应该选择一个基本端口号,说21000,然后每个reducer将侦听一个端口,其数量加上减速器数量)。如果该端口已被其他进程使用,会发生什么?