Объединение решений с использованием Co-Group от SideInput Apache Beam - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть 2 таблицы для присоединения, это Left Join. Ниже приведены два условия, как работает мой конвейер.

Задание выполняется в пакетном режиме и содержит все данные пользователя, и мы хотим обработать его в потоке данных Google.

День 1 :

Таблица A: 5000000 записей. (Размер 3 ТБ)

Таблица B: 200 записей. (Размер 1 ГБ)

Обе таблицы объединены через SideInput, где TableB Данные были приняты как SideInput, и они работали нормально.

День 2:

Таблица A: 5000010 записей. (Размер 3.001 ТБ)

Таблица B: 20000 записей. (Размер 100 ГБ)

Во второй день мой конвейер замедляется, потому что SideInput использует кэш, а мой размер кэша исчерпан, из-за увеличения TableB.

Итак, я попытался Использование Co-Group by, но Day 1 обработка данных была довольно медленной с журналом: Having 10000 plus values on Single Key.

Так есть ли более эффективный способ выполнить соединение, когда будет введена горячая клавиша.

1 Ответ

1 голос
/ 13 февраля 2020

Это правда, что производительность может резко упасть, если таблица B больше не помещается в кэш, и хороших решений не так много. Замедление в использовании CoGroupByKey обусловлено не только наличием множества значений на одной клавише, но и тем фактом, что вы теперь перетасовываете (то есть группируете) Таблицу А вообще (чего не было при использовании бокового ввода).

В зависимости от распределения ваших ключей, одним из возможных смягчающих факторов может быть обработка ваших горячих клавиш в пути, который соединяет боковой ввод, как и раньше, и ваши длинные клавиши в GoGBK. Это может быть сделано путем создания усеченного TableB 'в качестве бокового ввода, и ваш ParDo попытается найти ключ, излучающий одну коллекцию PC, если она была найдена в TableB', и другую, если ее нет [1]. Затем можно передать эту вторую коллекцию PC CoGroupByKey со всей таблицей B и сгладить результаты.

[1] https://beam.apache.org/documentation/programming-guide/#additional -выходы

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