Можно ли использовать потоковый кластер для буферизации данных? - PullRequest
0 голосов
/ 30 ноября 2018

Я впервые использую потоковую передачу Spark.У нас есть сценарий использования, когда мы направляем файлы размером 10 КБ в кластер искрового потока, которые обрабатываются.Мы также хотим объединить эти входящие документы размером 10 КБ в файл, пока его размер не достигнет 30 МБ, а затем загрузить этот RDD на S3.

Я представляю себе следующее:

  1. Мы будем кэшировать СДР, который будет постоянно дополняться входящими документами по 10 КБ.
  2. Перед операцией добавления, если размер текущего кешируетсяСДР составляет 30 МБ, он загрузит его на S3 и создаст новый СДР, добавит к нему и кеширует его с тем же именем, в противном случае просто добавит в существующий кеш.

Может ли этот подход работать?Пожалуйста, исправьте, если мое понимание кеширования потокового кеша неверно.

1 Ответ

0 голосов
/ 30 ноября 2018

Вы можете использовать методы Stateful Transformations в Spark Streaming (updateStateByKey и mapWithState)

val sparkContext = new SparkContext()
val ssc = new StreamingContext(sparkContext, Duration(4000))
ssc.checkpoint("path/to/persistent/storage")

В противном случае обработать данные (в интервале между партиями) и сохранить их в корзину S3.После этого запустите отдельное задание для объединения данных.

...