为什么在分布式模式下使用storm时不能用bolt将结果写入文件?在localcluster中运行良好

wlp8pajw  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(256)

我换了班 WordCountWordCountTopology 具体如下:

public static class WordCount extends BaseBasicBolt {
    Map<String, Integer> counts = new HashMap<String, Integer>();

    @Override
    public void execute(Tuple tuple, BasicOutputCollector collector) {
        String word = tuple.getString(0);
        Integer count = counts.get(word);
        if(count==null) count = 0;
        count++;
        counts.put(word, count);
        OutputStream o;
        try {
            o = new FileOutputStream("~/abc.txt", true);
            o.write(word.getBytes());
            o.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        collector.emit(new Values(word, count));
    }

    @Override
    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        declarer.declare(new Fields("word", "count"));
    }
}

我把单词写进文件里 .txt .
当我运行 WordCountTopology 在本地模式下(使用 LocalCluster ),效果不错。但是在分布式模式下运行时(使用 StormSubmitter.submitTopology() 方法) WordCount 班上没有写这个词 .txt 好像 execute() 方法根本没有运行。谁能给我一些建议吗?谢谢!
p、 我确信我的nimbus,supervisor,ui,zookeeper运行正常,我可以在127.0.0.1:8080中看到这个任务。

dbf7pr2w

dbf7pr2w1#

主要问题是.txt文件的位置。此文件将在您提交拓扑的系统中创建。因此此文件在其他群集计算机中不可用。您可以检查“未找到文件”错误的主管日志。要解决此问题,您需要一些nfs配置,通过这些配置,所有人都可以共享公共位置群集计算机。配置nfs后,在公共位置创建新文件,以便此文件可供所有主管使用。

相关问题