Google app engine Google云上Apache Beam python模块中的ELF头无效
在flex环境中,我尝试在Google app Engine上使用flask应用程序运行简单的BigQuery ETL管道时遇到了一个问题 当我在本地运行它时,它就工作了,我首先用Google app engine Google云上Apache Beam python模块中的ELF头无效,google-app-engine,google-cloud-platform,pip,apache-beam,Google App Engine,Google Cloud Platform,Pip,Apache Beam,在flex环境中,我尝试在Google app Engine上使用flask应用程序运行简单的BigQuery ETL管道时遇到了一个问题 当我在本地运行它时,它就工作了,我首先用flask run或gunicorn-b:$PORT main:app启动它,然后转到浏览器中的端点,在页面上做一些事情,然后提交表单。然后,页面的POST处理程序调用Apache Beam管道。所有这些都很好 但是,当我使用gcloud app deploy部署它并尝试访问任何端点时,会出现502错误,日志显示如下:
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.
我如何解决此问题,或着手解决此问题
我对Google Cloud和pip还不熟悉,所以我仍在尝试了解云环境是如何工作的,尤其是python包。整合apache beam的python依赖项/需求尤其令人沮丧 如果能看到你的
requirements.txt
是requirements.txt
,但不用于数据流工作者。可能您在本地运行时提供了requirements.txt
作为命令行选项,而您的服务器代码没有提供相同的选项
看看我的回答:
我很幸运地使用了
setup.py
作为我的管道依赖项,就像在这个例子中一样:我想我应该确定我已经构建了一个flask应用程序来服务页面并从那里启动管道。因此,要启动管道,我首先要到一个端点,该端点加载一个页面,然后单击一个按钮来实际启动梁管道。所有这些都可以在本地运行,我可以使用flask run或gunicorn-b:$PORT main:app启动。问题似乎在于,当部署到谷歌云时,整个应用程序无法加载。加载任何端点都会导致上述错误。最近,我甚至在调用gcloud app deploy时也看到了错误。我将更新。我在github上发现了一个示例项目,该项目在app Engine上的数据流管道实现非常少:。修改我的appengine_config.py,添加setup.py,并按照建议组织代码似乎可以做到这一点,因为该应用程序现在已经部署并工作。我认为这个答案是正确的,因为它指引了我正确的方向。
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