通过套接字更新 Reducers 中的全局变量/资源到 Hadoop 作业跟踪器
Updating a global variable / resource in Reducers via a socket to the Hadoop job tracker
我需要一个可以在减速器中同时读取/设置的全局变量(我知道这种设计的瓶颈和性能问题)。我尝试使用 Hadoop Configuration get()/set(),但我发现在提交 mapreduce 作业之前需要设置配置属性,并且在 reducer 中使用 Configuration.set() 实际上不会更新全局属性的价值。
我能找到的最接近的方法是使用一个全局参数,而不是 read/set 通过套接字连接到 Hadoop 作业跟踪器,但我找不到任何说明如何完成此操作的资源。
我的问题是:
- 如何 read/set 通过套接字将全局变量传递给 Hadoop 作业
跟踪器。
- 是否有另一种方法来保存全局变量
(不考虑性能下降)
备注:
- Hadoop 计数器无法为我工作,因为它们不支持 set() 函数
- DistributedCache 将无法工作,因为它用于分发只读数据,而在我的例子中,我需要 reducers 来更新全局变量的值,该变量可以被其他 运行 reduce 任务同时读取.
一般来说,在Hadoop集群中存储可靠一致的全局变量的地方是Apache ZooKeeper。
也就是说,在 MapReduce 作业中很少需要可变全局变量。如果您分享您的用例,则很有可能会有更简单的解决方案。
我需要一个可以在减速器中同时读取/设置的全局变量(我知道这种设计的瓶颈和性能问题)。我尝试使用 Hadoop Configuration get()/set(),但我发现在提交 mapreduce 作业之前需要设置配置属性,并且在 reducer 中使用 Configuration.set() 实际上不会更新全局属性的价值。
我能找到的最接近的方法是使用一个全局参数,而不是 read/set 通过套接字连接到 Hadoop 作业跟踪器,但我找不到任何说明如何完成此操作的资源。
我的问题是:
- 如何 read/set 通过套接字将全局变量传递给 Hadoop 作业 跟踪器。
- 是否有另一种方法来保存全局变量 (不考虑性能下降)
备注:
- Hadoop 计数器无法为我工作,因为它们不支持 set() 函数
- DistributedCache 将无法工作,因为它用于分发只读数据,而在我的例子中,我需要 reducers 来更新全局变量的值,该变量可以被其他 运行 reduce 任务同时读取.
一般来说,在Hadoop集群中存储可靠一致的全局变量的地方是Apache ZooKeeper。
也就是说,在 MapReduce 作业中很少需要可变全局变量。如果您分享您的用例,则很有可能会有更简单的解决方案。