我们计划从自己管理气流转向 AWS 的托管 Apache Airflow 服务。我们最初的 dags 使用一些自定义环境变量,这些变量也需要在托管气流中设置。到目前为止,我无法找到在 MWAA 中设置气流环境时设置自定义环境变量的方法。如果有人知道如何设置,请告诉我。
我正在使用 AWS Managed Airflow 来编排数据管道。我现在面临的问题是日志没有打印在气流日志中而不是云手表上。
我在气流日志中收到以下错误:
*** Reading remote log from Cloudwatch log_group: airflow-Task log_stream: 2021-08-26T08_08_24+00_00/1.log.
Could not read remote logs from log_group: airflow-Task log_stream: 2021-08-26T08_08_24+00_00/1.log.
Run Code Online (Sandbox Code Playgroud) 雪花未显示在连接下拉列表中。我正在使用 MWAA 2.0 并且提供程序已经在 requests.txt 中 MWAA 使用 python 3.7 不知道这是否是一件事
要求.txt:
--constraint“https://raw.githubusercontent.com/apache/airflow/constraints-2.0.2/constraints-3.7.txt”
asn1crypto
azure-common
azure-core
azure-storage-blob
boto3
botocore
certifi
cffi
chardet
加密
greenlet
idna
isodate
jmespath
msrest
numpy
oauthlib
oscrypto
pandas
pyarrow
pycparser
pycryptodomex
PyJWT
pyOpenSSL
python-dateutil
pytz
请求
requests-oauthlib
s3transfer
六个
urllib3
apache-airflow-providers-http
apache-airflow-providers-snowflake
#apache-airflow-providers-snowflake[ slack]
#apache-airflow-providers-slack
雪花连接器-python >=2.4.1
雪花-sqlalchemy >=1.1.0 \
我正在运行一个 AWS MWAA Airflow v2.0.2 实例。
我想访问Airflow API。目前支持这个吗?计划未来发布?AWS 文档中没有提及这一点。
看起来可以在 AWS MWAA Airflow v1.10.12 中启用实验性 API,但是当我尝试api.auth_backend = airflow.api.auth.backend.default
在 AWS UI 中添加时,收到以下错误消息:
Some of the provided configurations belong to the blocklist and can not be applied: api.auth_backend
Run Code Online (Sandbox Code Playgroud) 我需要在 AWS Airflow (Amazon MWAA) 上的 DAG 中使用 sshoperator,因此我在 DAG 文件中导入了以下库
from airflow.contrib.operators.ssh_operator import SSHOperator
Run Code Online (Sandbox Code Playgroud)
似乎 sshoperator 已在 paramiko 库中定义,因此我也将以下模块添加到 requiremets.txt 文件中
但是,当我浏览 DAG 时,我仍然收到以下错误
Broken DAG:
File "/usr/local/lib/python3.7/site-packages/airflow/contrib/operators/ssh_operator.py",
line from airflow.providers.ssh.operators.ssh import SSHOperator
ModuleNotFoundError: No module named 'airflow.providers.ssh'
Run Code Online (Sandbox Code Playgroud)
我的理解是 sshoperator 是 Airflow 中必不可少的内置运算符,因此从技术上讲,我不应该向 Airflow 添加任何额外的库或插件。
有人在生产中使用 MWAA 吗?
目前,我们有大约 500 个 DAG 正在运行,我们看到了意外的行为,任务由于未知原因而处于“排队”状态。
任务处于“排队”状态,这不是有效的执行状态。必须清除该任务才能运行。
它是随机发生的,可以完美运行一天,然后一些任务将保持排队状态。任务将永远保持这种状态,除非我们手动将它们标记为失败。
即使池是空的,DAG 运行也可以保持在这种“排队”状态,我没有看到任何解释这一点的原因。
大约 5% 的任务会发生这种情况,而其他所有任务都运行顺利。
您遇到过这种行为吗?
因此,我将 DAG 从 Airflow 版本 1.12.15 升级到 2.2.2,并将 python 从 3.8 降级到 3.7(因为 MWAA 不支持 python 3.8)。DAG 在之前的设置中工作正常,但在 MWAA 设置中显示此错误:
Broken DAG: [/usr/local/airflow/dags/google_analytics_import.py] Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/airflow/models/baseoperator.py", line 1474, in set_downstream
self._set_relatives(task_or_task_list, upstream=False, edge_modifier=edge_modifier)
File "/usr/local/lib/python3.7/site-packages/airflow/models/baseoperator.py", line 1412, in _set_relatives
task_object.update_relative(self, not upstream)
AttributeError: 'DAG' object has no attribute 'update_relative'
Run Code Online (Sandbox Code Playgroud)
这是似乎失败的内置函数:
def set_downstream(
self,
task_or_task_list: Union[TaskMixin, Sequence[TaskMixin]],
edge_modifier: Optional[EdgeModifier] = None,
) -> None:
"""
Set a task or a task list to be directly downstream from …
Run Code Online (Sandbox Code Playgroud) 我正在使用 AWS 的MWAA 服务(2.2.2) 来运行各种 DAG,其中大多数是使用标准 PythonOperator 类型实现的。我将 DAG 与任何共享需求一起捆绑到 S3 存储桶中,然后将 MWAA 指向相关对象和版本。到目前为止一切都进展顺利。
我现在想使用PythonVirtualenvOperator类型实现 DAG,AWS 承认不支持开箱即用。我正在遵循他们关于如何使用自定义插件修补行为的指南,但仍然收到来自 Airflow 的错误,该错误以大红色字体显示在仪表板顶部:
DAG 导入错误(1)…… AirflowException:PythonVirtualenvOperator 需要 virtualenv,请安装它。
我已经确认 Airflow 确实使用了该插件(我在管理屏幕中看到了它),为了避免产生疑问,我使用了 AWS 在 DAG 示例中提供的确切代码。AWS 的相关文档非常简单,我还没有偶然发现任何社区讨论。
根据 AWS 的文档,我们希望该插件在启动时在处理任何 DAG 之前运行。该插件本身似乎有效地重写了 venv 命令以使用 pip 安装的版本,而不是安装在计算机上的版本,但是我一直在努力验证事情是否按照我期望的顺序发生。任何有关调试实例行为的指示都将非常感激。
有人遇到过类似的问题吗?MWAA 文档中是否存在需要解决的空白?我错过了一些非常明显的事情吗?
可能相关,但我确实在调度程序日志中看到此警告,这可能表明为什么 MWAA 正在努力解决依赖性?
警告:脚本 virtualenv 安装在 '/usr/local/airflow/.local/bin' 中,该路径不在 PATH 上。
我有一个 Docker 文件,它创建一个图像,然后使用 docker compose 与使用 Postgres 图像构建的容器一起运行它。(为了设置 Airflow 的本地环境 - 我们使用 mwaa 本地运行器)。
\n最近我买了一台新的 M1 pro 机器,但我\xe2\x80\x99m 遇到了运行容器的问题。
\n根据我的理解,问题是正在构建图像,然后使用我的机器运行,该机器具有不同类型的 cpu 架构,这导致 pip 寻找这种架构的轮子。我的大学有一台英特尔 Mac,他说他\xe2\x80\x99 没有遇到任何问题。
\n构建阶段没问题,但是当我运行容器时,我们\xe2\x80\x99ve设置docker compose来运行一个入口点脚本,该脚本还安装了一些气流提供程序和其他依赖项,其中之一是plyvel,它无法安装并导致其他软件包也不要安装。当我从requirements.txt 文件中删除plyvel 时,安装完成,但我的一些气流提供程序缺少一些文件或属性,从而产生了自己的问题。
\n我尝试通过将构建命令更改为:\n 来强制 docker 使用 amd64 构建和运行图像和容器:\ndocker build --platform linux/amd64 --rm --compress $3 -t amazon/mwaa-local:2.2 ./docker
运行但运行速度非常慢。\n此外,platform: linux/amd64
在 docker-compose 文件中添加到 postgres 和本地运行程序容器。 \n然后,当我启动容器时,当我可以在网络浏览器中访问气流 ui 时,需要很长时间才能进入工作状态,然后 ui 中的速度非常慢 - 每个链接都需要几秒钟处理并引导我到新地方。我相信这是由于某种模拟或其他原因造成的。
然后我找到了这篇文章:\n https://medium.com/nttlabs/buildx-multiarch-2c6c2df00ca2
\n它说有一种更快的方法可以在没有模拟的情况下运行,但我不\xe2\x80\x99不明白如何实现。
\n另外,发现了这个 Reddit 线程:\n https://www.reddit.com/r/docker/comments/qlrn3s/docker_on_m1_max_horrible_performance/
\n他们建议在虚拟机内构建和运行容器,不确定这是否适合我的情况。
\n我尝试了 Docker …
airflow ×10
mwaa ×10
python ×2
airflow-2.x ×1
apple-m1 ×1
dbt ×1
docker ×1
logging ×1
snowflake-cloud-data-platform ×1
virtualenv ×1