Обработка с использованием Dataflow смещена на один узел - PullRequest
0 голосов
/ 20 марта 2019

Обработка не распределяется DataFlow, но обрабатывается одним узлом.

Я создал следующую программу и проверил, что она работает правильно с небольшими данными.

Считывание данных с BigQuery → Dofn обработка → Комбинированная обработка → Выравнивание обработки → Объединение обработки → Выравнивание обработки → Запись данные в Bigquery.

Далее я протестирую с большими данными, что они работают в многоузловой параллельной среде.

Укажите numWorkers и --autoscalingAlgorithm = NONE в качестве необязательных параметров при запуске потока данных.

Поскольку выполнение занимает очень много времени, я буду расследовать.

  • Я проверил ситуацию выполнения с представлением задания потока данных. Для обработки комбинации требуется время.
  • Проверка компьютерных метрик на экземплярах виртуальной машины GCE. Один компьютер потребляет и использует ресурсы, в то время как другие находятся в режиме ожидания.
  • журнал с помощью StackDriver. Процесс addInput в процессе объединения выполняется на одном активном компьютере, который был проверен с использованием метрик ранее.
  • Когда я просматриваю другие журналы в StackDriver, я иногда вижу сообщение Сброс недопустимого рабочего элемента null на свободном компьютере.

Кстати, если я не укажу параметры запуска numWorkers и --autoscalingAlgorithm = NONE, то есть автоматическое масштабирование, вы запустите только один узел.

Поток данных считал, что написание программы в соответствии с идиомой луча будет «хорошо» распределено по многим узлам, но это работает не так, как ожидалось.

Как это хорошо работает?

1 Ответ

0 голосов
/ 26 марта 2019

Я сделал это!Большой !Спасибо !!

p.apply("ReadFromBQ",BigQueryIO.readTableRows().fromQuery(query).usingStandardSql().withTemplateCompatibility())
.apply("shuffle as expressly", Reshuffle.viaRandomKey())
.apply("convert table row", ........
...