Как выполнить потоковую передачу искр на таблицах улья с использованием sql НЕ в реальном времени? - PullRequest
0 голосов
/ 12 июля 2020

У нас есть некоторые данные (миллионы) в таблицах ульев, которые появляются каждый день. На следующий день, после завершения ночного приема, разные приложения запрашивают у нас данные (используя sql)

Мы берем это sql и вызываем Spark

spark.sqlContext.sql(statement)  // hive-metastore integration is enabled

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

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

1 Ответ

1 голос
/ 12 июля 2020

IIU C ..

  • Spark Streaming в основном предназначен для обработки потоковых данных путем преобразования в пакеты из миллисекунд в секунды.

  • Вы можете просмотреть streamingDF.writeStream.foreachBatch { (batchDF: DataFrame, batchId: Long) предоставляет вам очень хорошую функциональность для Spark для записи обработанного потока вывода Sink микропакетным способом.

  • Тем не менее, структурированная потоковая передача Spark не имеет стандарта Источник JDB C определен для чтения.

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

Источник:

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

ForeachBatch :

foreachBatch (...) позволяет вам укажите функцию, которая выполняется для выходных данных каждого микропакета потокового запроса. Начиная с Spark 2.4, это поддерживается в Scala, Java и Python. Он принимает два параметра: DataFrame или Dataset, который содержит выходные данные микропакета и уникальный идентификатор микропакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...