Облачный поток данных Google: модель программирования потока данных, требующая того же вычислительного времени, что и обычная виртуальная машина? - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь воспользоваться службой потока данных облака Google, которая полезна для эффективного времени вычислений.Мой код имеет следующую модель программирования для конвейера потока данных:

start = (p | "read" >> beam.io.ReadFromText ("путь gcs"))
end= начало |"data_generation" >> beam.Pardo (PerfromFunction)

Что я делаю:
PerformFunction - это обычная функция Python, которая содержит несколько серий функций для данных.цель поколения.Моя проблема в том, что когда я запускаю эту функцию на обычной виртуальной машине n1-standard-16 на одном процессоре, для завершения всего процесса требуется около 1 часа.

Почему я выбрал Dataflow:
Затем я решил пойти по потоку данных, где функция ParDo выполняет Multi-Threading данной функции и, очевидно, сократить вычислительное время с 1 часа до less than 1 hour.

Проблема:
После выполнения задания Dataflow с вышеупомянутой моделью программирования я понял, что Dataflow все еще требуется около 1 часа для завершения всего процесса, который упоминается как wall-time в пользовательском интерфейсе GCP Dataflow.Затем я вошел на рабочую машину и увидел использование ресурса с помощью команды htop и обнаружил, что машина использует только один процессор со средним использованием 60%.

Ожидаемые результаты или предложения:
1. Можно ли выполнять многопроцессорную обработку в рабочем кластере потока данных?
2. Моя модель программирования очень ограничена и неправильна?
3. Функция ParDo не выглядитчтобы сократить время вычислений, как и ожидалось, как вы думаете, что я здесь не так делаю?

PS - из-за некоторых протоколов я не могу поделиться кодом.Спасибо за понимание.Также, пожалуйста, исправьте меня, если я неправильно понимаю поток данных в какой-то момент.

1 Ответ

0 голосов
/ 30 мая 2019

Apache Beam и Dataflow могут распараллелить ваши вычисления на основе входных данных.

Если вам нужно применить одно вычисление, и это вычисление занимает один час, то Beam не сможет ускорить ваше вычисление. Beam может помочь вам, если вам нужно применить одно и то же вычисление несколько раз к разным элементам (или точкам данных).

Также следует учитывать такие вещи, как накладные расходы на выполнение вычислений в распределенном режиме (копирование данных, сетевые вызовы и т. Д.).

Итак, чтобы иметь возможность ответить на ваш вопрос: как отдельные «точки данных» (сколько строк) содержатся в вашем файле GCS? Можно ли распараллелить вычисления по каждому из них? Сколько времени занимает обработка каждого из них?

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