Рассчитать скорость обработки данных из Spark (структурированного) потокового приложения - PullRequest
0 голосов
/ 27 апреля 2018

TL; DR Какова наилучшая практика в отношении определения максимальной скорости входящих данных, которую может обрабатывать конвейер данных Apache Spark?

Я написал два конвейера Apache Spark для потоковой передачи данных (один с использованием структурированной потоковой передачи, а другой с использованием потоковой передачи). Трубопроводы получают потоковые данные из сокетного соединения. Для локального тестирования я передаю файл на сервер ncat двумя способами:

  1. Я передаю файл построчно с небольшой задержкой между строками.
  2. Я передаю весь файл примерно из 5000 точек данных одновременно.

Эти два потоковых подхода (один быстрый и один немного медленнее) дают очень разные результаты как для потокового, так и для структурированного потокового конвейеров. Отложенный построчный поток (1) позволяет конвейерам полностью обрабатывать всю информацию, в то время как дамп (2) приводит к обработке только части точек данных (при этом значительная часть данных полностью теряется).

Похоже, это указывает на то, что у обоих конвейеров есть проблемы, которые "идут в ногу" со скоростью полного дампа файла (2), и что результаты конвейера имеют отношение к скорости входящих данных. Очевидно, я хотел бы быть как можно ближе к этой максимальной скорости, не переходя.

У меня вопрос: как найти максимальную скорость обработки данных при настройке конвейера Apache Structured Streaming / Apache Streaming?

1 Ответ

0 голосов
/ 27 апреля 2018

Читая и понимая ваш вопрос, вы хотите узнать, с какой скоростью обрабатывается ваша работа с потоковым воспроизведением. У вас есть что-то под названием PIDRateEstimator, которое выполняет цикл обратной связи для вашего приложения Spark при включении с помощью BackPressure. Установка обратного давления более значима в случае старых версий потоковой передачи с искрой, когда вам нужны приемники для получения сообщений из потока. Начиная с Spark 1.3, у вас есть «прямой» подход без приемника, чтобы обеспечить более надежные сквозные гарантии. Таким образом, вам не нужно беспокоиться о противодавлении, поскольку свеча выполняет большую часть точной настройки. Пожалуйста, прочитайте больше о PIDEstimators по ссылкам ниже

https://github.com/apache/spark/blob/master/streaming/src/main/scala/org/apache/spark/streaming/scheduler/rate/PIDRateEstimator.scala

https://vanwilgenburg.wordpress.com/2015/10/06/spark-streaming-backpressure/

Для ограничения скорости вы можете использовать конфигурационную переменную Spark spark.streaming.kafka.maxRatePerPartition, чтобы установить максимальное количество сообщений на раздел на пакет.

...