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