我正在开发一个javamapreduce程序,我想知道是否可以使用套接字或其他方式在简化程序之间共享数据。如果是通过套接字,如何检索操作某个密钥的机器的ip地址和端口号?提前感谢:)
njthzxwz1#
您可以通过自己的自定义套接字进行通信,要定位运行特定密钥的reducer的特定主机,可以使用jobclient api查询job tracker以获得正在运行的jobs reducer列表。要查找reducer主机,请通过作业分区器运行键(在大多数情况下是散列),确定reducer任务号(0到num reducers-1),然后查找reducer任务运行的计算机(通过jobclient api从作业跟踪器获取)。但有些事情需要考虑:如果所有的减速机都不能并行运行(减速机多于减速机插槽,或者另一个作业同时运行),会发生什么情况?如果job tracker计划两个或多个reducer在同一个任务节点上运行,那么您将如何分配端口号以确保它们都不尝试侦听同一个编号(我猜您应该选择一个基本端口号,比如21000,然后每个reducer将侦听其编号为该编号加上reducer编号的端口)。如果该端口已被另一个进程使用,会发生什么情况?
1条答案
按热度按时间njthzxwz1#
您可以通过自己的自定义套接字进行通信,要定位运行特定密钥的reducer的特定主机,可以使用jobclient api查询job tracker以获得正在运行的jobs reducer列表。
要查找reducer主机,请通过作业分区器运行键(在大多数情况下是散列),确定reducer任务号(0到num reducers-1),然后查找reducer任务运行的计算机(通过jobclient api从作业跟踪器获取)。
但有些事情需要考虑:
如果所有的减速机都不能并行运行(减速机多于减速机插槽,或者另一个作业同时运行),会发生什么情况?
如果job tracker计划两个或多个reducer在同一个任务节点上运行,那么您将如何分配端口号以确保它们都不尝试侦听同一个编号(我猜您应该选择一个基本端口号,比如21000,然后每个reducer将侦听其编号为该编号加上reducer编号的端口)。如果该端口已被另一个进程使用,会发生什么情况?