【问题标题】:No such file or directory /airflow/xcom/return.json没有这样的文件或目录 /airflow/xcom/return.json
【发布时间】:2019-03-18 21:14:53
【问题描述】:

创建的图像包含/airflow/xcom/return.json 在所有子目录上使用 chmod +x 由于日志显示找不到文件或目录(尝试 chmod +x)

strtpodbefore = KubernetesPodOperator(namespace='rguonew',
                                    image="mydockerimage",
                                    name="fail",
                                    image_pull_policy="Always",
                                    task_id="failing-task",
                                    get_logs= True,
                                    xcom_push=True,
                                    dag=dag
                                    )'

这是日志

[2019-03-18 20:32:07,007] {logging_mixin.py:95} INFO - [2019-03-18 
 20:32:07,007] {pod_launcher.py:166} INFO - Running command... cat 
/airflow/xcom/return.json
[2019-03-18 20:32:07,007] {logging_mixin.py:95} INFO - 
[2019-03-18 20:32:07,026] {logging_mixin.py:95} INFO - [2019-03-18 
20:32:07,026] {pod_launcher.py:173} INFO - cat: can't open 
 '/airflow/xcom/return.json': No such file or directory
[2019-03-18 20:32:07,026] {logging_mixin.py:95} INFO - 
[2019-03-18 20:32:07,026] {logging_mixin.py:95} INFO - [2019-03-18 
 20:32:07,026] {pod_launcher.py:166} INFO - Running command... kill -s 
 SIGINT 1
[2019-03-18 20:32:07,026] {logging_mixin.py:95} INFO - 
[2019-03-18 20:32:07,067] {models.py:1788} ERROR - Pod Launching 
failed: Failed to extract xcom from pod: fail-e18e3dac

因此尝试了这种方式它可以工作,但这意味着它从外部而不是从图像分配 xcom json

 return_value = '{"foo": "bar"\n, "buzz": 2}'
 strtpodbefore = KubernetesPodOperator(namespace='rguonew',
                                image="python:3.6.6-stretch",
                                cmds=["bash", "-cx"],
                                name="fail",
                                task_id="failing-task",
                                arguments=['echo \'{}\' > 
 /airflow/xcom/return.json'.format(return_value)],
                                get_logs= True,
                                xcom_push=True,
                                dag=dag
                                )

所以我尝试了最后的解决方案,做了一个额外的参数,但仍然不起作用,第一个命令没有返回这样的目录

strtpodbefore = KubernetesPodOperator(namespace='rguonew',
                                    image="myimages",
                                    name="fail",
                                    image_pull_policy="Always",
                                    cmds=["bash", "-cx"],
                                    arguments=['echo \'{}\' > 
/airflow/xcom/return.json'.format(return_value)],
                                    task_id="failing-task",
                                    get_logs= True,
                                    xcom_push=True,
                                    dag=dag
                                    )

【问题讨论】:

    标签: airflow


    【解决方案1】:

    当您设置 xcom_push=True 时,将创建一个 sidecar 容器以及您的 executor 容器。 sidecar 容器将读取执行器的/airflow/xcom/return.json,因此您实际上需要像在第二个示例中所做的那样从执行器容器中写入它。

    请看这里: https://stackoverflow.com/a/53568710/10675601

    当我们在开发我们的 pod xcom 时,还有一些与 RBAC 相关的问题需要您设置: Airflow k8s operator xcom - Handshake status 403 Forbidden

    【讨论】:

    • kubernetes.io/docs/concepts/workloads/pods/pod-overview/… 所以我猜边车不只是注入数据,就像我在第二个例子中所做的那样,而是用第一个 pod 控制所有文件操作符
    • 是的,你在第一个pod中写入json文件,sidecar抓取写入的文件推送到xcom。
    猜你喜欢
    • 2021-06-24
    • 2022-07-15
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2016-05-06
    相关资源
    最近更新 更多