Я пытаюсь воспользоваться службой потока данных облака 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 - из-за некоторых протоколов я не могу поделиться кодом.Спасибо за понимание.Также, пожалуйста, исправьте меня, если я неправильно понимаю поток данных в какой-то момент.