Дополнительные данные потока данных - размер рабочего кэша в SDK 2.x - PullRequest
0 голосов
/ 25 сентября 2019

Я испытываю проблемы с производительностью в моем конвейере в DoFn, который использует большой боковой ввод ~ 1 ГБ.Боковой ввод передается с помощью pvalue.AsList (), который вызывает материализацию побочного ввода.

График выполнения конвейера показывает, что конкретный шаг тратит большую часть времени на чтение побочного ввода.Общий объем прочитанных данных намного превышает размер бокового ввода.Следовательно, я пришел к выводу, что боковой ввод не помещается в память / кэш рабочих, даже если их оперативной памяти достаточно (с использованием рабочих n1-highmem4 с 26 ГБ ОЗУ).

Как узнать, насколько большой этот кэшна самом деле есть?Есть ли способ контролировать его размер с помощью Beam Python SDK 2.15.0 (как, например, была опция конвейера --workerCacheMb = 200 для Java 1.x SDK)?

Нет простого способа уменьшить мою сторонуввод более 10%.

1 Ответ

0 голосов
/ 25 сентября 2019

Если вы используете AsList, вы правы, что весь боковой вход должен быть загружен в память.Возможно, у вашего работника достаточно свободной памяти, но для считывания 1 ГБ данных в список требуется очень много времени.Кроме того, размер читаемых данных зависит от их кодировки.Если вы можете поделиться более подробной информацией о вашем алгоритме, мы можем попытаться выяснить, как написать конвейер, который может работать более эффективно.- например, экземпляр Redis, в который вы пишете с одной стороны, и красный с другой стороны.

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