Как вызвать задание потока данных, написанное на Go из облачных функций в GCP - PullRequest
0 голосов
/ 13 января 2019

Моя цель - создать механизм, который при загрузке нового файла в облачное хранилище запускает облачную функцию. В конце концов, эта функция Cloud вызовет задание Cloud Dataflow.

У меня есть ограничение, что задание Cloud Dataflow должно быть написано на Go, а Cloud Function должно быть написано на Python.

Проблема, с которой я столкнулся сейчас, заключается в том, что я не могу вызвать задание Cloud Dataflow из функции Cloud.

Проблема облачного потока данных, написанного на Go, заключается в том, что в Apache Beam Go SDK не определена переменная template-location. Вот почему я не могу создавать шаблоны потока данных. И, поскольку нет шаблонов потоков данных, единственный способ, которым я могу вызывать задание Cloud Dataflow из облачной функции, - это написание задания Python, которое вызывает скрипт bash, который запускает задание потока данных.

Сценарий bash выглядит так:

go run wordcount.go \
--runner dataflow \
--input gs://dataflow-samples/shakespeare/kinglear.txt \
--output gs://${BUCKET?}/counts \
--project ${PROJECT?} \
--temp_location gs://${BUCKET?}/tmp/ \
--staging_location gs://${BUCKET?}/binaries/ \
--worker_harness_container_image=apache-docker-beam-snapshots-docker.bintray.io/beam/go:20180515

Но вышеуказанный механизм не может создать новое задание потока данных, и это кажется громоздким.

Есть ли лучший способ достичь моей цели? А что я делаю не так на вышеуказанном механизме?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Я обнаружил, что Apache Beam Go SDK поддерживает параметр worker_binary, который аналогичен template-location для заданий потока данных Java. Используя эту опцию, я смог запустить задание потока данных go из моей облачной функции python.

0 голосов
/ 13 января 2019

Облачная функция должна быть написана на Python

Cloud Dataflow Client SDK может создавать задания Dataflow только из шаблонов. Поэтому это требование не может быть выполнено, если вы не создадите свой собственный шаблон.

У меня есть ограничение, что задание облачного потока данных должно быть записано в Перейти

Поскольку цель Python не может быть достигнута, другой вариант - запустить программу Go в облачных функциях. Облачные функции для Go в alpha. Однако я не знаю ни одного метода для выполнения программы Apache Beam (Dataflow) в облачных функциях. Помните, что программы Apache Beam запускаются локально и подключаются к кластеру, работающему где-то еще (Dataflow, Spark и т. Д.), Если вы не выберете runner=DirectRunner.

Вы выбрали наименее зрелый язык для использования Apache Beam. Порядок зрелости и функциональности: Java (отлично), Python (хорошо и с каждым днем ​​становится все лучше), Go (еще не готов для прайм-тайма).

Если вы хотите запускать программы Apache Beam, написанные на Go on Cloud Dataflow, вам нужно будет использовать платформу, такую ​​как ваша локальная система, Google Compute Engine или Google App Engine Flex. Я не знаю, может ли App Engine Standard запустить Apache Beam в Go.

...