我的程序遵循迭代映射/归约方法。如果满足某些条件,则需要停止。无论如何,我是否可以设置一个可以分布在所有映射/归约任务中的全局变量,并检查全局变量是否达到完成条件。
像这样的东西。
While(Condition != true){
Configuration conf = getConf();
Job job = new Job(conf, "Dijkstra Graph Search");
job.setJarByClass(GraphSearch.class);
job.setMapperClass(DijkstraMap.class);
job.setReducerClass(DijkstraReduce.class);
job.setOutputKeyClass(IntWritable.class);
job.setOutputValueClass(Text.class);
}
其中条件是一个全局变量,在每次映射/归约执行期间/之后修改。
每次运行 Map-Reduce 作业时,您都可以检查输出的状态、计数器中包含的值等,并在控制迭代的节点上决定是否需要再进行一次迭代。我想我不明白在你的场景中对全球状态的需求来自哪里。
更一般地说——在执行节点之间共享状态有两种主要方式(尽管应该注意的是共享状态是最好避免因为它限制了可扩展性)。
- 将文件写入其他节点可以读取的 HDFS(确保作业退出时文件被清理,并且推测执行不会导致奇怪的失败)。
- 使用ZooKeeper将一些数据存储在专用的ZK树节点中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)