Pyspark 使用PrestoDB查询时,气流任务未按计划运行

Pyspark 使用PrestoDB查询时,气流任务未按计划运行,pyspark,airflow,presto,airflow-scheduler,Pyspark,Airflow,Presto,Airflow Scheduler,我已经定义了一个示例任务,我想在其中运行一个PrestoDB查询,然后执行一个Spark作业,以执行一个简单的单词计数示例。以下是我定义的DAG: from pandas import DataFrame import logging from datetime import timedelta from operator import add import airflow from airflow import DAG from airflow.operators.python_opera

我已经定义了一个示例任务,我想在其中运行一个PrestoDB查询,然后执行一个Spark作业,以执行一个简单的单词计数示例。以下是我定义的DAG:

from pandas import DataFrame
import logging
from datetime import timedelta

from operator import add

import airflow
from airflow import DAG
from airflow.operators.python_operator import PythonOperator

from airflow.hooks.presto_hook import PrestoHook

default_args = {
    'owner': 'airflow',
    'start_date': airflow.utils.dates.days_ago(1),
    'depends_on_past': False,
    'email': ['airflow@example.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
    }

dag = DAG(
    'presto_dag',
    default_args=default_args,
    description='A simple tutorial DAG with PrestoDB and Spark',
    # Continue to run DAG once per hour
    schedule_interval='@daily',
)

def talk_to_presto():
    ph = PrestoHook(host='presto.myhost.com', port=9988)

    # Query PrestoDB
    query = "show catalogs"

    # Fetch Data
    data = ph.get_records(query)
    logging.info(data)
    return data

def submit_to_spark():
    # conf = SparkConf().setAppName("PySpark App").setMaster("http://sparkhost.com:18080/")
    # sc = SparkContext(conf)
    # data = sc.parallelize(list("Hello World"))
    # counts = data.map(lambda x: (x, 1)).reduceByKey(add).sortBy(lambda x: x[1], ascending=False).collect()
    # for (word, count) in counts:
    #     print("{}: {}".format(word, count))
    # sc.stop()
    return "Hello"

presto_task = PythonOperator(
    task_id='talk_to_presto',
    provide_context=True,
    python_callable=talk_to_presto,
    dag=dag,
)

spark_task = PythonOperator(
    task_id='submit_to_spark',
    provide_context=True,
    python_callable=submit_to_spark,
    dag=dag,
)

presto_task >> spark_task
提交任务时,大约有20个DAG实例处于运行状态:

但它永远不会完成,也不会生成任何日志,至少对于PrestoDB查询是这样。我能够从Airflow的
数据分析>特别查询
部分正确运行相同的PrestoDB查询

我特意注释掉了PySpark代码,因为它没有运行,也不是问题的焦点

我有两个问题:

  • 为什么任务没有完成并保持运行状态
  • 查询未运行时,
    PrestoHook
    有什么问题

  • [1] 您确定您的查询没有达到
    Presto
    ?(检查
    Presto
    的web UI);因为20
    DagRun
    s意味着至少有20个查询几乎同时在
    Presto
    上启动,因此可以显著降低执行速度(在测试
    Ad Hoc Query
    时,您只运行单个查询)[2]您是否配置了,因为
    。运行任务的远程日志不可用。
    如中所述,经过再三考虑,我不希望在
    Presto
    上完成查询之前出现任何日志,因为[1]您的
    talk_to_Presto()
    函数只记录查询结果[2]函数似乎不生成任何日志,只调用函数,函数也不生成任何日志。因此,未生成日志是未完成日志的直接后果queries@y2k-shubham从PrestoDB查询面板中,我可以看到没有任何查询从DAG到达那里。另外,远程日志记录也没有启用,我也会尝试。[1]您确定您的查询没有达到
    Presto
    ?(检查
    Presto
    的web UI);因为20
    DagRun
    s意味着至少有20个查询几乎同时在
    Presto
    上启动,因此可以显著降低执行速度(在测试
    Ad Hoc Query
    时,您只运行单个查询)[2]您是否配置了,因为
    。运行任务的远程日志不可用。
    如中所述,经过再三考虑,我不希望在
    Presto
    上完成查询之前出现任何日志,因为[1]您的
    talk_to_Presto()
    函数只记录查询结果[2]函数似乎不生成任何日志,只调用函数,函数也不生成任何日志。因此,未生成日志是未完成日志的直接后果queries@y2k-shubham从PrestoDB查询面板中,我可以看到没有任何查询从DAG到达那里。另外,远程日志也没有启用,我也会尝试一下。