Sockets 通过Hadoop作业跟踪器的套接字更新reducer中的全局变量/资源

Sockets 通过Hadoop作业跟踪器的套接字更新reducer中的全局变量/资源,sockets,hadoop,Sockets,Hadoop,我需要一个全局变量,可以在减速机中同时读取/设置(我知道这种设计的瓶颈和性能问题)。我尝试使用Hadoop Configuration get()/set(),但是我发现在提交mapreduce作业之前需要设置配置属性,并且在reducer中使用Configuration.set()实际上不会更新全局属性的值 我能找到的最接近的东西是使用一个全局参数,而不是通过Hadoop作业跟踪器的套接字读取/设置的参数,但是我找不到任何说明如何做到这一点的资源 我的问题是: 如何通过套接字读取/设置Hado

我需要一个全局变量,可以在减速机中同时读取/设置(我知道这种设计的瓶颈和性能问题)。我尝试使用Hadoop Configuration get()/set(),但是我发现在提交mapreduce作业之前需要设置配置属性,并且在reducer中使用Configuration.set()实际上不会更新全局属性的值

我能找到的最接近的东西是使用一个全局参数,而不是通过Hadoop作业跟踪器的套接字读取/设置的参数,但是我找不到任何说明如何做到这一点的资源

我的问题是:

  • 如何通过套接字读取/设置Hadoop作业的全局变量 追踪器
  • 是否有另一种保存全局变量的方法 (不考虑性能下降)
  • 注:

    • Hadoop计数器不能为我工作,因为它们不支持set()函数
    • DistributedCache不起作用,因为它用于分发只读数据,而在我的例子中,我需要Reducer来更新全局变量的值,该值可以由其他正在运行的reduce任务同时读取

    通常,在Hadoop集群中存储可靠一致的全局变量的位置是


    也就是说,在MapReduce作业中很少需要可变的全局变量。如果您分享您的用例,很有可能会有一个更简单的解决方案。

    非常感谢Jeremy的回复。我的情况是,我在缩减阶段使用分布式分支定界算法。所以,我需要一个“bestSoFar”变量来保存迄今为止找到的最佳答案。如果一个减速器处的子问题的上界小于“bestSoFar”值,则此值用于停止执行多个减速器。总的来说,我试图使用MapReduce实现这篇关于分布式max-clique算法的论文: