Обработка не распределяется DataFlow, но обрабатывается одним узлом.
Я создал следующую программу и проверил, что она работает правильно с небольшими данными.
Считывание данных с BigQuery → Dofn обработка → Комбинированная обработка →
Выравнивание обработки → Объединение обработки → Выравнивание обработки → Запись
данные в Bigquery.
Далее я протестирую с большими данными, что они работают в многоузловой параллельной среде.
Укажите numWorkers
и --autoscalingAlgorithm = NONE
в качестве необязательных параметров при запуске потока данных.
Поскольку выполнение занимает очень много времени, я буду расследовать.
- Я проверил ситуацию выполнения с представлением задания потока данных.
Для обработки комбинации требуется время.
- Проверка компьютерных метрик на экземплярах виртуальной машины GCE. Один компьютер потребляет и использует ресурсы, в то время как другие находятся в режиме ожидания.
- журнал с помощью StackDriver. Процесс addInput в процессе объединения выполняется на одном активном компьютере, который был проверен с использованием метрик ранее.
- Когда я просматриваю другие журналы в StackDriver, я иногда вижу сообщение Сброс недопустимого рабочего элемента null на свободном компьютере.
Кстати, если я не укажу параметры запуска numWorkers
и --autoscalingAlgorithm = NONE
, то есть автоматическое масштабирование, вы запустите только один узел.
Поток данных считал, что написание программы в соответствии с идиомой луча будет «хорошо» распределено по многим узлам, но это работает не так, как ожидалось.
Как это хорошо работает?