недопустимый заголовок ELF в модуле Python Apache Beam в Google Cloud - PullRequest
0 голосов
/ 05 октября 2018

Я сталкиваюсь с проблемой при попытке запустить простой конвейер BigQuery ETL с помощью приложения колбы в Google App Engine в гибкой среде.

Это работает, когда я запускаю его локально, что я делаю первымначиная с flask run или gunicorn -b :$PORT main:app, а затем переходя к конечной точке в моем браузере, делая что-то на странице и отправляя форму.Затем обработчик POST для страницы вызывает конвейер Apache Beam.Все это прекрасно работает.

Но когда я развертываю его с помощью gcloud app deploy и пытаюсь получить доступ к любой конечной точке, я получаю ошибку 502, и журналы показывают следующее:

2018-10-04 14:03:39 default[20181003t232620]  Traceback (most recent call last):    File "/env/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker      worker.init_process()    File "/env/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 129, in init_process      self.load_wsgi()    File "/env/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi      self.wsgi = self.app.wsgi()    File "/env/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi      self.callable = self.load()    File "/env/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load      return self.load_wsgiapp()    File "/env/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp      return util.import_app(self.app_uri)    File "/env/local/lib/python2.7/site-packages/gunicorn/util.py", line 350, in import_app      __import__(module)    File "/home/vmagent/app/main.py", line 15, in <module>      import rw_bigquery_etl    File "/home/vmagent/app/rw_bigquery_etl.py", line 9, in <module>      import apache_beam as beam    File "lib/apache_beam/__init__.py", line 88, in <module>      from apache_beam import coders    File "lib/apache_beam/coders/__init__.py", line 19, in <module>      from apache_beam.coders.coders import *    File "lib/apache_beam/coders/coders.py", line 30, in <module>      from apache_beam.coders import coder_impl  ImportError: lib/apache_beam/coders/coder_impl.so: invalid ELF header
2018-10-04 14:03:39 default[20181003t232620]  [2018-10-04 14:03:39 +0000] [8] [INFO] Worker exiting (pid: 8)
2018-10-04 14:03:39 default[20181003t232620]  [2018-10-04 14:03:39 +0000] [1] [INFO] Shutting down: Master
2018-10-04 14:03:39 default[20181003t232620]  [2018-10-04 14:03:39 +0000] [1] [INFO] Reason: Worker failed to boot.

СФактическая ошибка: from apache_beam.coders import coder_impl ImportError: lib/apache_beam/coders/coder_impl.so: invalid ELF header

У меня недавно было много проблем с зависимостями, поэтому я просто запустил pip freeze> needs.txt в папке проекта, дав мне this (pastebin) .Я установил это в папку lib в папке проекта и получил строку vendor.add('lib') в appengine_config.py.Кроме того, это мой app.yaml:

runtime: python
api_version: 1
threadsafe: true
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 2

handlers:
- url: /.*
  script: main.app
  login: required

Как мне решить эту проблему или устранить ее?

Я новичок в Google Cloud и pip, поэтому я 'Я все еще пытаюсь понять, как работает облачная среда, особенно с пакетами Python.

1 Ответ

0 голосов
/ 06 октября 2018

Консолидация зависимостей / требований Python для Apache Beam однозначно расстраивает.

Было бы полезно увидеть

  1. конфигурацию конвейера
  2. как вы запускаете свой конвейер локально
  3. как вы запускаете свой конвейер удаленно (вашзапросите код обработчика, который его запускает)
  4. , где ваш конвейерный код находится относительно корня вашего проекта

Но похоже, что requirements.txt, который вы установили, является requirements.txt для вашегоGae Flex экземпляр, но не привыкать к вашему работнику потока данных.Возможно, вы указали requirements.txt в качестве параметра командной строки при локальном запуске, и ваш серверный код не предоставляет такую ​​же опцию.

Посмотрите на мой ответ здесь:

https://stackoverflow.com/a/51312281/4458510

Мне повезло с использованием setup.py для зависимостей моего конвейера, как они делают в этом примере: https://github.com/apache/beam/tree/master/sdks/python/apache_beam/examples/complete/juliaset

...