我需要一个在reduce任务之间共享的变量,并且每个reduce任务都可以自动地读写它。我需要这样一个变量的原因是给reduce任务创建的每个文件一个唯一的标识符(由reduce任务创建的文件数量是不确定的)。
谢谢
在我的理解中,ZooKeeper是专门为维护对集群范围内变量的原子访问而构建的。
我推荐使用FileSystem.createNewFile()
。
看这里:
http://hadoop.apache.org/common/docs/r0.20.2/api/org/apache/hadoop/fs/FileSystem.html createNewFile % 28 org.apache.hadoop.fs.path % 29日
reducer生成的所有输出文件已经具有唯一的名称part-r-00001等。如果您需要从代码中读取分区号,您可以读取分区号。
必须保证唯一的集中式计数器破坏了Hadoop的许多可伸缩性。
所以如果你需要一些不同的东西,那么我会使用类似于Sha1的减速机的任务id来获得在多个作业中唯一的东西。