Что у меня есть?
У меня есть приложение Spark Streaming (на Kafka Streams) в кластере Hadoop, которое агрегирует каждые 5 минут клики пользователей и некоторые действия, выполненныена веб-сайте и преобразует их в метрики.
Также у меня есть таблица в GreenPlum (в ее собственном кластере) с данными пользователей, которые могут обновляться.Эта таблица заполняется с использованием репликации логического потокового журнала через Kafka.Размер таблицы составляет 100 млн. Пользователей.
Что я хочу?
Я хочу присоединяться к Spark Streams со статическими данными из GreenPlum каждые 1 или 5минут, а затем объединить данные, уже используя, например, возраст пользователя из статической таблицы.
Примечания
Определенно, мне не нужно читать все записи из таблицы пользователей.Достаточно стабильный основной сегмент + количество новых пользователей, регистрируемых каждую минуту.В настоящее время я использую PySpark 2.1.0
Мои решения
Скопируйте данные из кластера GreenPlum в кластер Hadoop и сохраните их в виде файлов orc / parquet.Каждые 5 минут добавляйте новые файлы для новых пользователей.Один раз в день перезагружайте все файлы.
Создайте новую БД для репликации Hadoop и журнала установки через Kafka, как это делается для GreenPlum.Чтение данных из БД и использование встроенных объединений Spark Streaming.
Чтение данных из GreenPlum на Spark в кеше.Объединение потоковых данных с кешем.
- Каждые 5 минут сохраняйте / добавляйте новые пользовательские данные в файл, игнорируйте старые пользовательские данные.Сохраните дополнительный столбец, например
last_action
, чтобы обрезать этот файл, если пользователь не был активен на веб-сайте в течение последних 2 недель.Таким образом, объедините этот файл с потоком.
Вопросы
- Какие из этих решений больше подходят для MVP?для производства?
- Есть ли лучшие решения / лучшие практики для такого рода проблем.Немного литературы)