Хобрук: Ваш путь к мастерству в программировании

Apache Storm — Stateful Bolt — запуск метода планирования

Если к топологии подключен apache Storm Bolt с полным состоянием, скажем, это выглядит следующим образом:

 public class WordCountBolt extends BaseStatefulBolt<KeyValueState<String, Long>> {
     private KeyValueState<String, Long> wordCounts;
     private OutputCollector collector;
 ...
     @Override
     public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
       this.collector = collector;
     }
     @Override
     public void initState(KeyValueState<String, Long> state) {
       wordCounts = state;
     }
     @Override
     public void execute(Tuple tuple) {
       String word = tuple.getString(0);
       Integer count = wordCounts.get(word, 0);
       count++;
       wordCounts.put(word, count);
       collector.emit(tuple, new Values(word, count));
       collector.ack(tuple);
     }
 ...
 }

Мне нужно было бы вызвать метод для обновления состояния (wordCounts), скажем, каждые X секунд, независимо от получения события или нет. Возможно ли это в болтах Apache Storm с полным состоянием? Можно ли просто запланировать повторный запуск такого метода через определенный интервал?

public void updateState() {
      wordCounts.put("NewKey", 1);
}

Ответы:


1

Я не уверен, что понимаю, почему вам нужно периодически обновлять состояние, но если вам нужно время от времени запускать какой-то код, тиковые кортежи могут вам подойти. https://kitmenke.com/blog/2014/08/04/tick-tuples-within-storm/

23.02.2018
  • Эй, спасибо за ответ. Мой вариант использования - пересчитывать значения модели каждые X минут/предопределенный интервал времени. Итак, мой болт содержит модель, и я хочу выполнить логику, которая обновляет модель каждый раз, например. 30 минут. Знаете ли вы о лучшем подходе для достижения этой цели? 23.02.2018
  • Нет, тиковые кортежи должны подойти для этого. Единственное предостережение заключается в том, что если болт отстает (много кортежей в очереди), тиковый кортеж может немного задержаться. Если это неприемлемо, вы можете вместо этого выполнить обновление модели из другого потока. 27.02.2018
  • Новые материалы

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..

    Раскрытие возможностей НЛП: часть речевой маркировки и ее проблемы
    В сфере обработки естественного языка (NLP) маркировка частей речи (POS) выступает в качестве фундаментального метода, позволяющего компьютерам понимать и анализировать человеческий язык на..

    Под поверхностью: раскрытие деталей системы с помощью инструментов Linux CLI
    Чем больше вы изучаете Linux и продвигаетесь вперед, тем больше вам нужно проверять информацию о вашей системе. Эта информация может касаться аппаратного обеспечения, такого как процессор,..

    Как реализовать линейную регрессию в JavaScript
    Узнайте, как реализовать линейную регрессию в JavaScript с помощью ML.js Линейная регрессия — это метод машинного обучения, используемый для моделирования связи между зависимой переменной и..