2016-05-24 3 views
3

В этом случаели искра потокового запускать несколько Еогеасп параллельно

val dStream : Stream[_] = 
dStream.foreachRDD(a => ...) 
dStream.foreachRDD(b => ...) 

ли методы Foreach:

  1. работать параллельно?
  2. работать в последовательности, но без определенного порядка?
  3. ForeachRDD (a =>) перед foreachRDD (b =>)?

Я хочу знать это, потому что я хочу совершить смещение kafka после вставки базы данных. (А разъем дб дают только «Еогеасп» врезку)

val dStream : Stream[_] = ...().cache() 
dStream.toDb // consume the stream 
dStream.foreachRDD(b => //commit offset) //consume the stream but after the db insert 

В свече UI это выглядеть есть порядок, но я не уверен, что это надежно.

Редактировать: если сбой foreachRDD (a =>) завершен, выполняется ли foreachRDD (b =>)?

ответ

4

DStream.foreach устарел с тех пор, как Spark 0.9.0. Вы хотите получить эквивалент DStream.foreachRDD.

Этапы в Spark DAG выполняются последовательно, так как выход одного преобразования обычно также является входом для следующего преобразования на графике, но в вашем примере это не так.

Что происходит, что внутренне RDD разделен на разделы. Каждый раздел запускается на другого сотрудника, который доступен менеджеру кластера. В вашем примере DStream.foreach(a => ...) будет выполняться до DStream.foreach(b => ...), но выполнение в пределах foreach будет выполняться параллельно в отношении внутреннего RDD, который выполняется итерацией.

Я хочу знать это, потому что я хочу совершить смещение kafka после добавления базы данных .

DStream.foreachRDD - выходное преобразование, что означает, что Spark материализует график и начинает выполнение. Вы можете с уверенностью предположить, что вставка в базу данных закончится до выполнения второго foreach, но имейте в виду, что ваш первый foreach будет обновлять вашу базу данных параллельно для раздела foreach в RDD.

+0

Да, прошу прощения, но я не возражаю против RDD. Параллелизм довольно хорошо объясняет в документации, но не «DStream fork» Так что ответ 3. Если foreachRDD (a =>) делает foreachRDD (b =>), будет выполнен любым способом? (Я должен был отредактировать ma вопрос для этого) – crak

+0

@crak Я не понял ваш последний вопрос. –

+0

Представьте, что вставка базы данных терпит неудачу, выполнить вторую инструкцию (фиксацию смещения)? – crak

Смежные вопросы