Поток Apache Spark - длительный пакет времени ожидания

Я настраиваю долгосрочное потоковое задание Apache Spark для выполнения (не распараллеленного) потокового вещания с использованием InputDStream.

Я пытаюсь достичь того, что когда пакет в очереди занимает слишком много времени (на основе заданного пользователем тайм-аута), я хочу иметь возможность пропустить пакет и полностью отказаться от него - и продолжить оставшуюся часть выполнения.

Я не смог найти решение этой проблемы в API-интерфейсе spark или в Интернете - я искал использование StreamingContext awaitTerminationOrTimeout, но это убивает весь StreamingContext по таймауту, тогда как все, что я хочу сделать, это пропустить / убить текущий пакет.

Я также рассмотрел использование mapWithState, но это не относится к этому случаю использования. Наконец, я подумывал о настройке StreamingListener и запуске таймера при запуске пакета, а затем об остановке / пропуске / уничтожении пакета при достижении определенного порога времени ожидания, но, похоже, способа уничтожения пакета все еще нет.

Спасибо!

1 ответ

Я видел несколько документов от визга, но я сам этого не делал.

С помощью UpdateStateByKey(update_func) или же mapWithState(stateSpec),

  1. Прикрепите тайм-аут, когда события впервые видны и состояние инициализировано
  2. Отбросьте состояние, если оно истекает

    def update_function(new_events, current_state):
        if current_state is None:
            current_state = init_state()
            attach_expire_datetime(new_events)
            ......
        if is_expired(current_state):
            return None //current_state drops?
        if new_events:
            apply_business_logic(new_events, current_state)
    

Похоже, что структурированный водяной знак потоковой передачи также сбрасывает события, когда они истекают, если это может применяться к удалению времени ваших заданий / этапов.

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