Airflow 如何使用xcom在处理器任务之间传递输出数据?

Airflow 如何使用xcom在处理器任务之间传递输出数据?,airflow,Airflow,问题摘要: 我需要使用xcom从一个SSHOperator获取标准输出 筛选一些行并获取输出值,以便将它们传递给另一个SSHOperator 不幸的是,我在气流文档中没有找到任何有用的东西 代码示例: import airflow from airflow.operators.dummy_operator import DummyOperator from airflow.contrib.operators.ssh_operator import SSHOperator default_a

问题摘要:

  • 我需要使用xcom从一个SSHOperator获取标准输出
  • 筛选一些行并获取输出值,以便将它们传递给另一个SSHOperator
不幸的是,我在气流文档中没有找到任何有用的东西

代码示例:

import airflow
from airflow.operators.dummy_operator import DummyOperator
from airflow.contrib.operators.ssh_operator import SSHOperator

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime.datetime(2020, 1, 1, 0, 0),
}

dag = airflow.DAG(
    'example',
    default_args=default_args,
)

task_dummy = DummyOperator(
    task_id='task_dummy',
    dag=dag
)

cmd_ssh = """
for f in "file1" "file2"
do
    if $(hdfs dfs -test -d /data/$f)
        then hdfs dfs -rm -r -skipTrash /data/$f
        else echo "doesn't exists"
    fi
done
"""

task_1 = SSHOperator(
    ssh_conn_id='server_connection',
    task_id='task_ssh',
    command=cmd_ssh,
    do_xcom_push=True,
    dag=dag
)
我的问题是-当我使用do\u xcom\u push=True时,如何从task_1访问标准输出?

您可以从文档中访问模板字段或接收气流上下文的可调用项中的数据,例如
PythonOperator
(及其子类):

#在一个名为“push_任务”的PythonOperator中
def push_函数():
返回值
#在另一个PythonOperator中,其中provide_context=True
def pull_功能(**上下文):
value=context['task\u instance'].xcom\u pull(task\u id='pushing\u task')
您可以访问接收气流上下文的模板字段或可调用项中的数据,例如
PythonOperator
(及其子类)--来自文档:

#在一个名为“push_任务”的PythonOperator中
def push_函数():
返回值
#在另一个PythonOperator中,其中provide_context=True
def pull_功能(**上下文):
value=context['task\u instance'].xcom\u pull(task\u id='pushing\u task')

我猜他的问题与SSHOperator有关,而不是PythonOpertaor。我读到他们的问题是“我的问题是-当我使用do\u xcom\u push=True时如何从task_1访问stdout?”——我解释了如何通过task实例在模板字段和上下文中访问xcom数据,并给出了一个例子。我猜他的问题与SSHOperator有关,而不是PythonOpertaor。我读到他们的问题是“我的问题是-当我使用do_xcom_push=True时如何从task_1访问stdout?”——我解释了如何通过task实例在模板化字段和上下文中访问xcom数据,并给出了一个示例。