Как запустить несколько потоковых запросов в одном приложении Spark? - PullRequest
0 голосов
/ 11 октября 2018

Я построил несколько запросов Spark Structured Streaming для выполнения в EMR, они являются долго выполняющимися запросами и должны выполняться постоянно, поскольку все они являются запросами типа ETL, когда я отправляю задание в кластер YARN в EMR, яможет подать одну искру заявку.Таким образом, у приложения spark должно быть несколько потоковых запросов.

Я запутался в том, как создать / запустить несколько потоковых запросов в одной и той же программе программно.

Например: у меня есть этот код:

case class SparkJobs(prop: Properties) extends Serializable {
  def run() = {
      Type1SparkJobBuilder(prop).build().awaitTermination()
      Type1SparkJobBuilder(prop).build().awaitTermination()
  }
}

Я запускаю это вмой основной класс с SparkJobs(new Properties()).run()

Когда я вижу на сервере истории искр, выполняется только первое задание потоковой передачи (Type1SparkJob).

Каков рекомендуемый способ запуска нескольких потоковых запросов в одной и той же искровой отправке программно, я также не смог найти надлежащей документации.

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

val query1 = ds.writeSteam. {...}. Start ()

val query2 = ds.writeSteam. {...}. Start ()

val query3 =ds.writeSteam. {...}. start ()

query3.awaitTermination ()

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

0 голосов
/ 13 октября 2018

Поскольку вы вызываете awaitTermination в первом запросе, он будет блокироваться, пока не завершится до запуска второго запроса.Таким образом, вы хотите запустить оба запроса, но затем использовать StreamingQueryManager.awaitAnyTermination.

val query1 = df.writeStream.start()
val query2 = df.writeStream.start()

spark.streams.awaitAnyTermination()

В дополнение к вышесказанному, по умолчанию Spark использует планировщик FIFO.Это означает, что первый запрос получает все ресурсы в кластере во время его выполнения.Поскольку вы пытаетесь выполнить несколько запросов одновременно, вам следует переключиться на FAIR планировщик

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

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