【问题标题】:How to set up dbt with Google Cloud Composer?如何使用 Google Cloud Composer 设置 dbt?
【发布时间】:2021-06-02 13:19:56
【问题描述】:

我正在尝试在 Google Cloud Composer 上安装 dbt,但遇到了依赖性问题。我已按照本文中的说明进行操作:https://blog.doit-intl.com/setup-dbt-with-cloud-composer-ab702454e27b 但是在第 2 步:在 composer 中安装软件包(airflow-dbt & dbt)时,它已经失败了。

我在云构建日志中找到以下内容:

ERROR: snowflake-connector-python 2.3.6 has requirement boto3<1.16,>=1.4.4, but you'll have boto3 1.17.85 which is incompatible.
ERROR: snowflake-connector-python 2.3.6 has requirement requests<2.24.0, but you'll have requests 2.24.0 which is incompatible.
ERROR: networkx 2.5.1 has requirement decorator<5,>=4.3, but you'll have decorator 5.0.9 which is incompatible.
ERROR: hologram 0.0.13 has requirement jsonschema<3.2,>=3.0, but you'll have jsonschema 3.2.0 which is incompatible.
ERROR: dbt-core 0.19.1 has requirement idna<2.10, but you'll have idna 2.10 which is incompatible.
ERROR: dbt-core 0.19.1 has requirement requests<2.24.0,>=2.18.0, but you'll have requests 2.24.0 which is incompatible.
ERROR: dbt-snowflake 0.19.1 has requirement cryptography<4,>=3.2, but you'll have cryptography 3.0 which is incompatible.
ERROR: dbt-bigquery 0.19.1 has requirement google-api-core<1.24,>=1.16.0, but you'll have google-api-core 1.28.0 which is incompatible.
ERROR: dbt-redshift 0.19.1 has requirement boto3<1.16,>=1.4.4, but you'll have boto3 1.17.85 which is incompatible.

我当前的环境配置包含:composer-1.13.0-airflow-1.10.12

有没有人遇到过同样的问题,你能解决吗? 我还尝试安装日志中列出的特定版本的要求,但这并不能解决问题。

【问题讨论】:

  • 你是如何在你的作曲家环境中安装这个依赖的?另外,您是否可以尝试创建一个新环境,该环境将拥有最新版本的 Composer 并尝试它是否可以工作?如果是这样,您可以按照here 的说明进行升级。
  • @AlexandreMoraes 即使升级后的 Composer 版本也适用于所需的 dbt pypi 包及其依赖项,您无法判断下一个版本的 Composer 是否会破坏 dbt 或 dbt 的依赖项,或者下一个版本的 dbt 会打破当前版本的 Composer。最好的办法是将 Composer 环境和运行 dbt 代码的环境解耦。
  • 另一种选择是工作流+云构建stackoverflow.com/a/70134210/2346803

标签: google-cloud-platform google-cloud-composer dbt


【解决方案1】:

尝试在 Composer 环境中安装 dbt 时有点痛苦。但是,有一些解决方法。

  1. 使用外部服务运行 dbt 作业,例如云跑。
  2. 使用 Composer 的 KubernetesPodOperator。我的同事在此处提交了a nice article on dbt discourse 以完成设置过程。
  3. 通过将 Composer 的环境变量 IGNORE_PYPI_DEPENDENCY_CONFLICTS 设置为 True 来忽略 Composer 的依赖冲突。但是,我不建议这样做,因为它可能会导致潜在问题。
  4. 在 Composer 中创建 Python 虚拟环境并安装 dbt 包。

【讨论】:

  • 非常感谢这些建议,这周我会研究一下并尝试一下
  • @MichelvanDijck 为您完成了上述设置。
  • @RyanYuan 你怎么能做到第4点?如果我安装venv 包,我如何能够创建多个虚拟环境并处理每个 venv 的包?
  • @martinus 所以这里的想法是使用 BashOperator 执行一个 bash 脚本来在其中创建 virtualenv。在我过去的经验中,如果我需要使用多个 virtualenv,我必须使用不同的 BashOperators 并创建不同的 virtualenvs。在 virtualenv 中完成工作后,我将需要使用相同的 bash 脚本将其删除,以节省 Airflow 实例的内存/空间。我必须为每个 virtualenv 放置一个随机 id 作为后缀以进行分离,以便我可以修剪使用过的。
  • 感谢@RyanYuan,它运作良好。在我的 BashOperator 的最后,我有这样的东西:python -m virtualenv -p python3 tmp_venv &gt; /dev/null &amp;&amp; source tmp_venv/bin/activate &amp;&amp; pip install dbt-bigquery==0.20.2 &gt; /dev/null &amp;&amp; cd {{PATH_DBT}} &amp;&amp; DBT_PROFILES_DIR=. dbt run &amp;&amp; cd - &amp;&amp; rm -rf tmp_venv
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 2018-10-13
相关资源
最近更新 更多