我写了一个非常简单的气流dag如下:
import airflow
from airflow import DAG from airflow.contrib.operators.spark_sql_operator import SparkSqlOperator
from datetime import timedelta from datetime import datetime as dt
default_args = {
'owner': 'zxy', 'depends_on_past': False,
'email_on_failure': True, 'email_on_retry': True,
'retries': 1,
'retry_delay': timedelta(minutes=5)
}
dag = DAG(
'my_first_dag',
default_args=default_args,
#start_date=dt.strptime('2018-05-16', '%Y-%m-%d'),
start_date=airflow.utils.dates.days_ago(2),
description='My First Airflow DAG',
schedule_interval=timedelta(minutes=5))
sql = r'''select count(u) from some_table where time=20180513 and platform='iOS' '''
t1 = SparkSqlOperator(task_id='Count_Ads_U', conn_id='spark_default',sql=sql, dag=dag)
然后我跑airflow scheduler
安排工作。
这份工作成功地给出了正确的号码,但是这份工作仍然按照以下方式打印空白日志,因此无法成功停止:
[2018-05-16 06:33:07,505] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,505] {spark_sql_hook.py:142}信息 - b' 18/05/16 06:33:07 INFO火花。 SparkContext:已成功停止 SparkContext \ n'
[2018-05-16 06:33:07,506] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,506] {spark_sql_hook.py:142}信息 - b' 18/05/16 06:33:07 INFO util。 ShutdownHookManager:关闭钩子,名为\ n'
[2018-05-16 06:33:07,506] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,506] {spark_sql_hook.py:142}信息 - b' 18/05/16 06:33:07 INFO util。 ShutdownHookManager:删除目录 的/ tmp /火花fbb4089c-338B-4b0e-a394-975f45b307a8 \ n'
[2018-05-16 06:33:07,509] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,509] {spark_sql_hook.py:142}信息 - b' 18/05/16 06:33:07 INFO util。 ShutdownHookManager:删除目录 /应用/数据/火花/温度/火花f6b6695f-24e4-4db0-ae2b-29b6836ab9c3 \ n'
[2018-05-16 06:33:07,902] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,902] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,903] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,902] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,903] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,902] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,903] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,902] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,903] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,903] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,903] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,903] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,903] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,903] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,903] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,903] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,903] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,903] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,903] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,903] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,903] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,903] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,903] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,903] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,903] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,903] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,904] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,903] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,904] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,903] {spark_sql_hook.py:142}信息 - b''
[2018-05-16 06:33:07,904] {base_task_runner.py:98}信息 - 子任务: [2018-05-16 06:33:07,903] {spark_sql_hook.py:142}信息 - b''
空记录无休止地进行,直到我通过Ctr + C停止了调度程序。
airflow版本是v1.9.0。
答案 0 :(得分:1)
问题解决了。
这是由_driver.PressKeyCode(AndroidKeyCode.KeycodeButton_8);
问题导致的,如果您使用的是Python 3.x(https://github.com/apache/incubator-airflow/blob/master/airflow/contrib/hooks/spark_sql_hook.py的第146行):
byte literal vs string literal
iter中使用的哨兵是'',这是空的for line in iter(self._sp.stdout.readline, ''):
self.log.info(line)
。但是标准输出中的实际内容是string literal
而不是byte literals
(请参阅此文章以供参考:What does the 'b' character do in front of a string literal?),可以从每行日志中的string literals
前缀中看出来因此for循环永远不会因某种原因而结束。
我通过将b
替换为''
来解决问题。