2016-11-13 2 views
2

Я прошел через this вопрос stackoverflow, в соответствии с ответом он создает DStream только с одним RDD за пакетный интервал.Удаляет ли RDD DStream целые данные, созданные для пакетного интервала одним выстрелом?

Например:

Моя партия интервал 1 минута и Спарк Streaming работа отнимает много данных от Кафки Topic.

Мой вопрос в том, что RDD, доступный в DStream, тянет/содержит все данные за последнюю минуту? Существуют ли какие-либо критерии или параметры, необходимые для установки всех данных, созданных за последнюю минуту?

Если у меня есть тема Kafka с 3 разделами, и все 3 раздела содержат данные за последнюю минуту, будет ли DStream вытаскивать/содержать все данные, созданные за последнюю минуту во всех разделах раздела Kafka?

Update:

В этом случае DStream содержит более одного RDD?

ответ

2

A Spark Streaming DStream потребляет данные из темы Kafka, которая разделена, скажем, 3 разделам на 3 разных брокерах Kafka.

Доступен ли RDD в DStream, который содержит все данные за последнюю минуту?

Не совсем. В RDD только описывает смещения для чтения данных, когда задачи отправляются на исполнение. Это похоже на другие RDD в Spark, где они только (?) описание того, что делать и где найти данные для работы, когда их задачи будут представлены.

Если вы используете более «рывком/содержит», вы можете выразить, что в какой-то момент записи (из разделов при заданных смещениях) будут обработаны, да, вы правы, целая минута сопоставляется с смещениями, а смещения в свою очередь сопоставляются с записями, которые Kafka передает для обработки.

во всех разделах раздела Kafka?

Да. Это Kafka не обязательно Spark Streaming/DStream/RDD, чтобы справиться с этим. RDD-запросы DStream запрашивают записи из тем (ов) и их разделов в смещениях, начиная с последнего запроса, который он запросил.

Минута для Spark Streaming может немного отличаться для Kafka, поскольку RDD DStream содержат записи для смещений, а не записи за раз.

В каком случае DStream содержит более одного RDD?

Никогда.

2

Рекомендовать более подробно DStream абстракция в Spark documentation.

дискретизированного поток или DStream является основной абстракции обеспечивается искрового Streaming. Он представляет собой непрерывный поток данных [...]. Внутренне, a DStream представлен непрерывной серией RDDs.

Я хотел бы добавить одну точку в этом – не забывайте, что РДД сам по себе еще один слой абстракции и поэтому его можно разделить на более мелкие куски и распространилась по всему кластеру.

Учитывая ваши вопросы:

  • Да, после каждой партии интервальных пожаров, есть работа с одним РДОМ. И это RDD содержит все данные за предыдущую минуту.
  • Если ваша работа потребляет поток Kafka с большим количеством разделов, все разделы потребляются параллельно. Таким образом, результат состоит в том, что данные из всех разделов обрабатываются в последующем RDD.
1

Одна из важных вещей, которые были упущены, состоит в том, что Kafka имеет множество реализаций для Spark Streaming.

Первый - это приемник , который устанавливает приемник на выбранном узле Worker и считывает данные, буферизирует его, а затем распределяет.

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

DStream тянет/содержит все данные, созданные за последнюю минуту во всех разделах раздела Kafka?

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

В этом случае DStream содержит более одного RDD

Как другие говорили, он никогда не делает. Только один RDD протекает внутри DStream с интервалом выдачи.

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