Экземпляры облачного потока данных Google Python прервались без нового развертывания (сбой импорта pubsub) - PullRequest
0 голосов
/ 07 июня 2018

Я определил несколько разных заданий облачного потока данных для Python в среде Google AppEngine Flex.Я определил свои требования в файле require.txt, включил мой файл setup.py, и все работало просто отлично.Мое последнее развертывание было 3 мая 2018 года. Просматривая журналы, я вижу, что одно из моих заданий начало сбой 22 мая 2018 года. Задание не выполняется с трассировкой стека в результате неправильного импорта, как показано ниже.

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/dataflow_worker/batchworker.py", line 582, in do_work
    work_executor.execute()
  File "/usr/local/lib/python2.7/dist-packages/dataflow_worker/executor.py", line 166, in execute
    op.start()
  File "apache_beam/runners/worker/operations.py", line 294, in apache_beam.runners.worker.operations.DoOperation.start (apache_beam/runners/worker/operations.c:10607)
    def start(self):
  File "apache_beam/runners/worker/operations.py", line 295, in apache_beam.runners.worker.operations.DoOperation.start (apache_beam/runners/worker/operations.c:10501)
    with self.scoped_start_state:
  File "apache_beam/runners/worker/operations.py", line 300, in apache_beam.runners.worker.operations.DoOperation.start (apache_beam/runners/worker/operations.c:9702)
    pickler.loads(self.spec.serialized_fn))
  File "/usr/local/lib/python2.7/dist-packages/apache_beam/internal/pickler.py", line 225, in loads
    return dill.loads(s)
  File "/usr/local/lib/python2.7/dist-packages/dill/dill.py", line 277, in loads
    return load(file)
  File "/usr/local/lib/python2.7/dist-packages/dill/dill.py", line 266, in load
    obj = pik.load()
  File "/usr/lib/python2.7/pickle.py", line 858, in load
    dispatch[key](self)
  File "/usr/lib/python2.7/pickle.py", line 1090, in load_global
    klass = self.find_class(module, name)
  File "/usr/local/lib/python2.7/dist-packages/dill/dill.py", line 423, in find_class
    return StockUnpickler.find_class(self, module, name)
  File "/usr/lib/python2.7/pickle.py", line 1124, in find_class
    __import__(module)
  File "/usr/local/lib/python2.7/dist-packages/dataflow_pipeline/tally_overages.py", line 27, in <module>
    from google.cloud import pubsub
  File "/usr/local/lib/python2.7/dist-packages/google/cloud/pubsub.py", line 17, in <module>
    from google.cloud.pubsub_v1 import PublisherClient
  File "/usr/local/lib/python2.7/dist-packages/google/cloud/pubsub_v1/__init__.py", line 17, in <module>
    from google.cloud.pubsub_v1 import types
  File "/usr/local/lib/python2.7/dist-packages/google/cloud/pubsub_v1/types.py", line 26, in <module>
    from google.iam.v1.logging import audit_data_pb2
ImportError: No module named logging

Таким образом, основная проблема, похоже, связана с зависимостью pubsub, основанной на импорте google.iam.v1.logging, который устанавливается из grpc-google-iam-v1.

Вот мой файл needs.txt

Flask==0.12.2
apache-beam[gcp]==2.1.1
gunicorn==19.7.1
google-cloud-dataflow==2.1.1
google-cloud-datastore==1.3.0
pytz
google-cloud-pubsub
google-gax
grpc-google-iam-v1
googleapis-common-protos
google-cloud==0.32
six==1.10.0
protobuf

Я могу все локально запустить, просто выполнив следующие действия из моего проекта.

$ virtualenv --no-site-packages .
$ . bin/activate
$ pip install --ignore-installed -r requirements.txt
$ python main.py
No handlers could be found for logger "oauth2client.contrib.multistore_file"
INFO:werkzeug: * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
INFO:werkzeug: * Restarting with stat
No handlers could be found for logger "oauth2client.contrib.multistore_file"
WARNING:werkzeug: * Debugger is active!
INFO:werkzeug: * Debugger PIN: 317-820-645

специально,Я в состоянии сделать следующее локально просто отлично

$ python
>>> from google.cloud import pubsub
>>> import google.iam.v1.logging
>>> google.iam.v1.logging.__file__
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/google/iam/v1/logging/__init__.pyc'

Так что я знаю, что установка пакета grpc-google-iam-v1 работает очень хорошо локально ... необходимые файлы есть.

Мои вопросы

  1. Почему установка grpc-google-iam-v1 в среде Google AppEngine Flex не приводит к правильной установке всех файлов?Я, должно быть, пропускаю каталог /site-packages/google/iam/v1/logging.
  2. Почему это случайно начало сбой?Я больше не делал развертываний, тот же код работал и работал 21-го, а затем сломался 22-го мая.

Мне удалось возобновить работу конвейера после изменения файла require.txt на

Flask==0.12.2
apache-beam[gcp]
google-cloud-dataflow
gunicorn==19.7.1
google-cloud-datastore==1.3.0
pytz
google-cloud-pubsub
google-gax
grpc-google-iam-v1
googleapis-common-protos
google-cloud==0.32
six==1.10.0
protobuf

, поэтому просто удалили требования к версии из apache-beam[gcp] и google-cloud-dataflow сделал свое дело.

1 Ответ

0 голосов
/ 24 июля 2018

Опираясь на решение, предоставленное Джоном Аллардом , , при удалении версии из файла require.txt по умолчанию автоматически устанавливается последняя версия.Таким образом, без указания версии для apache-beam[gcp], google-cloud-dataflow и google-cloud-pubsub все они будут работать в последней версии и решат проблему зависимости.Requirements.txt будет выглядеть следующим образом:

Flask==0.12.2
apache-beam[gcp]
gunicorn==19.7.1
google-cloud-dataflow
google-cloud-datastore==1.3.0
pytz
google-cloud-pubsub
google-gax
grpc-google-iam-v1
googleapis-common-protos
google-cloud==0.32
six==1.10.0
protobuf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...