Почему я не могу записать результат в файл в Bolt при использовании Storm в распределенном режиме? отлично работает в LocalCluster

Я изменил класс WordCount в WordCountTopology следующее:

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"));
    }
}

в котором я пишу слово в файл abc.txt,

Когда я побежал WordCountTopology в локальном режиме (который использовал LocalCluster), это просто отлично работает. Но при работе в распределенном режиме (который использовал StormSubmitter.submitTopology() метод), WordCount класс не написал слово abc.txt как будто execute() метод не работает вообще. Кто-нибудь может дать мне идею? Большое спасибо!

PS Я уверен, что мой nimbus, supervisor, пользовательский интерфейс, zookeeper работает нормально, и я вижу задачу в 127.0.0.1:8080.

1 ответ

Основная проблема заключается в расположении файла abc.txt. Этот файл будет создан в системе, из которой вы отправляете топологию. Так что этот файл не будет доступен на других компьютерах кластера. Вы можете проверить журнал супервизоров на наличие файла, который не найден. Чтобы решить эту проблему, вам потребуется некоторая конфигурация NFS, через которую общее местоположение может использоваться всеми компьютерами кластера. После настройки NFS создайте новый файл в общем расположении, чтобы этот файл был доступен для всех супервизоров.

Другие вопросы по тегам