5

クラスを次のように変更しまし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"));
    }
}

ここで、単語を file に書き込みますabc.txt

WordCountTopologyをローカル モードで実行したとき(を使用LocalCluster)、問題なく動作しました。しかし、(StormSubmitter.submitTopology()メソッドを使用した)分散モードで実行している場合、メソッドがまったく実行されていないかのように、WordCountクラスは単語を書き込みませんでした。誰か私にアイデアを教えてもらえますか?どうもありがとう!abc.txtexecute()

PSニンバス、スーパーバイザー、UI、飼育係は正常に動作していると確信しており、127.0.0.1:8080 でタスクを確認できます。

4

1 に答える 1

2

主な問題は、abc.txt ファイルの場所です。このファイルは、トポロジを送信しているシステムで作成されます。したがって、このファイルは他のクラスター マシンでは使用できません。ファイルが見つからないというエラーのスーパーバイザー ログを確認できます。この問題を解決するには、すべてのクラスタ マシンが共通の場所を共有できる NFS 構成が必要です。

于 2014-01-15T12:16:47.423 に答える