Поток Apache Spark - длительный пакет времени ожидания
Я настраиваю долгосрочное потоковое задание Apache Spark для выполнения (не распараллеленного) потокового вещания с использованием InputDStream.
Я пытаюсь достичь того, что когда пакет в очереди занимает слишком много времени (на основе заданного пользователем тайм-аута), я хочу иметь возможность пропустить пакет и полностью отказаться от него - и продолжить оставшуюся часть выполнения.
Я не смог найти решение этой проблемы в API-интерфейсе spark или в Интернете - я искал использование StreamingContext awaitTerminationOrTimeout, но это убивает весь StreamingContext по таймауту, тогда как все, что я хочу сделать, это пропустить / убить текущий пакет.
Я также рассмотрел использование mapWithState, но это не относится к этому случаю использования. Наконец, я подумывал о настройке StreamingListener и запуске таймера при запуске пакета, а затем об остановке / пропуске / уничтожении пакета при достижении определенного порога времени ожидания, но, похоже, способа уничтожения пакета все еще нет.
Спасибо!
1 ответ
Я видел несколько документов от визга, но я сам этого не делал.
С помощью UpdateStateByKey(update_func)
или же mapWithState(stateSpec)
,
- Прикрепите тайм-аут, когда события впервые видны и состояние инициализировано
Отбросьте состояние, если оно истекает
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)
Похоже, что структурированный водяной знак потоковой передачи также сбрасывает события, когда они истекают, если это может применяться к удалению времени ваших заданий / этапов.