Spark - объединить результаты фильтра от всех исполнителей - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть 3 исполнителя в моей работе по потоковой передаче искры, которая требует от Кафки.Количество исполнителей зависит от количества разделов в теме.Когда сообщение получено из этой темы, я начинаю запрос на Hazelcast.Каждый исполнитель находит результаты некоторой операции фильтрации в Hazelcast и возвращает дублированные результаты.Поскольку статусы данных не обновляются, когда исполнитель возвращает данные, а другой исполнитель находит те же данные.

У меня вопрос, есть ли способ объединить все результаты только в одном списке, который найден исполнителями во время потоковой передачи?

Ответы [ 2 ]

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

Чтобы избежать повторного считывания данных, вам нужно где-то сохранять смещение, предпочтительнее в HBase, и каждый раз, когда вы используете данные из Kafka, вы читаете их из HBase, а затем проверяете смещение для каждой уже использованной темы, а затем начинаете чтениеи писать это.После каждой успешной записи вы должны обновлять счетчик смещений.

Как вы думаете, таким образом это решает проблему?

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

Spark Executors распределены по кластеру, так что если вы пытаетесь дедуплицировать данные по кластеру.Так что дедупликация сложна.у вас есть следующие опции

  1. Использовать аккумуляторы. Проблема здесь в том, что аккумуляторы не согласованы во время выполнения задания, и вы можете закончить чтение устаревших данных
  2. Другой вариант - Выгрузить эту работу ввнешняя система.- сохраните ваш вывод во внешнем хранилище, которое может его дублировать.(Вероятно HBase).эффективность этой системы хранения становится ключевой здесь.

Надеюсь, это поможет

...