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

时间:2015-02-19 12:38:06

标签: sockets hadoop

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

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

我的问题是:

  1. 如何通过套接字读取/设置全局变量到Hadoop作业 跟踪器。
  2. 是否有另一种保持全局变量的方法 (不论性能下降)
  3. 注意:

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

1 个答案:

答案 0 :(得分:1)

通常,在Hadoop集群中存储可靠一致的全局变量的地方是Apache ZooKeeper

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