Google Cloud 上的 Apache Beam python 模块中的无效 ELF header

invalid ELF header in Apache Beam python module on Google Cloud

我在 flex 环境中的 Google App Engine 上尝试 运行 带有 Flask 应用程序的简单 BigQuery ETL 管道时遇到问题。

当我在本地 运行 它时它工作,我首先用 flask rungunicorn -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 > requirements.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 包。

为 Apache Beam 整合 python dependencies/requirements 非常令人沮丧。

看到你的

会很有帮助
  1. 管道配置
  2. 如何在本地启动管道
  3. 如何远程启动管道(启动它的请求处理程序代码)
  4. 管道代码相对于项目根目录的位置

但听起来您为 gae flex 实例设置的 requirements.txtrequirements.txt,但没有用于数据流工作者。可能您在 运行 本地提供了 requirements.txt 作为命令行选项,而您的服务器代码未提供相同的选项。

看我这里的回答:

我最幸运的是使用 setup.py 作为我管道的依赖项,就像他们在这个例子中所做的那样:https://github.com/apache/beam/tree/master/sdks/python/apache_beam/examples/complete/juliaset