airflow问题系列2 —— task保持running假死状态
1. 错误描述
airflow 被调度后,一直处于 running 状态假死,而且日志打印不完全,从某一行以下就不会打印日志了。
2. 错误原因
经过查找源码中从这一行打印的日志来看,因为在日志里面输出了中文的字符串(包括中文的括号和分号以及冒号等),只要日志中包含中文字符,airflow 就无法将其打印在 web 页面,并且包含中文字符这一行以下的日志也都不会输出。
3. 解决方案
经过与同事的沟通以及网上资料查阅,有两个方案可实施,并且最好同时实施。
第一个是解决日志显示的问题,修改日志输出不要输出中文字符串即可。
第二个是保障系统方案,即设置超时 kill ,配合失败重试配置机制,即可有效防止系统故障。
1)超时重试机制需要配置两个地方,导入包和参数设置。
在头部导入 timedelta 的包,“from datetime import timedelta”。
在 default_args 参数中加入 'execution_timeout': timedelta(hours=1) ,表示如果一小时还没有运行完,就置为失败。如果有重试机制会在重试时间后进行重试,如果没有重试机制会进行下一个 dag 任务或者结束运行。
# encoding: utf-8
import airflow
import time
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta
from airflow.operators.dagrun_operator import TriggerDagRunOperatordefault_args = {'owner': 'airflow','depends_on_past': False,'execution_timeout': timedelta(hours=1),'start_date': airflow.utils.dates.days_ago(1),
}
2)设置重试机制
在 airflow 的 task 任务配置中,retries 表示重试的次数,重试多少次后跳过此 task 。retry_delay 参数表示失败多久后进行重试,次数设置的是1分钟,也需要导入 timedelta 包,方法同上。在同一个 dag 中,导入一遍即可。
de4c65baf941f8f2ed775339fd0c733a = BashOperator(task_id ='de4c65baf941f8f2ed775339fd0c733a',retries = 5,retry_delay = timedelta(minutes=1),bash_command =command,params={"table_name":"test"},trigger_rule='all_done',dag=dag)
4. 总结
由于不细心的原因,由一个中文“:”引发的血案,而且根据第一张图所示,如果有大量的处于 running 状态的 task 任务,也会对其他 dag 的 task 调度任务带来影响,在我这里的影响是让我们项目组最核心的调度 dag 中的 task 也处于 running 中卡住,导致重大的生产事故。故总结于此,警示自己也提醒萌新小伙伴们,注意防坑注意踩雷。
本文要点:airflow 的 web 日志显示界面,不支持中文字符串的显示,包括中文符号,否则会引发意想不到的事故。
airflow问题系列2 —— task保持running假死状态相关推荐
- .NET 并行(多核)编程系列之六 Task基础部分完结篇
.NET 并行(多核)编程系列之六 Task基础部分完结篇 前言:之前的文章介绍了了并行编程的一些基本的,也注重的讲述了Task的一些使用方法,本篇很短,将会结束Task的基础知识的介绍. 本篇的主要 ...
- SharePoint工作流解决方案QuickFlow系列(2)--Task
任务是工作流的核心,一个工作流系统如何方便的表达任务分发的逻辑是衡量这个工作流系统可用性的重要标准之一. SharePoint默认提供了CreateTask , OnTaskChanged,Compl ...
- Storm概念学习系列之Task任务
每一个Spout/Bolt的线程称为一个Task. Task任务 Task是运行Spout或Bolt的单元,每一个Spout/Bolt的线程称为一个Task. 在Storm 0.8及之后的版本中,Ta ...
- Error: Already running on PID 2510 (or pid file '/home/tarena/airflow/airflow-webserver.pid' is stal
如何解决? 方法1:修改airflow文件下的airflow-webserver.pid,将里面的数值进行更改 方法2:直接杀死进程 这里声明,转载了 sxf_123456的博客的文章: 重启airf ...
- airflow重启出现Error: Already running on PID 8254 (or pid file '/root/airflow/airflow-webserver.pid' is
重启airflow出现以下错误. [root@localhost example]# airflow webserver -p 8080 & Error: Already running o ...
- Spark入门实战系列--6.SparkSQL(中)--深入了解SparkSQL运行计划及调优
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.1 运行环境说明 1.1.1 硬软件环境 l 主机操作系统:Windows 64位, ...
- airflow mysql_Airflow 使用及原理分析
Airflow 入门及使用 什么是 Airflow?Airflow 是一个使用 Python 语言编写的 Data Pipeline 调度和监控工作流的平台. Airflow 是通过 DAG(Dire ...
- JAVA面试题解惑系列(十)——话说多线程
JAVA面试题解惑系列(十)--话说多线程 关键字: java 面试题 多线程 thread 线程池 synchronized 死锁 作者:臧圩人(zangweiren) 网址:http://zang ...
- (4)top详解 (每周一个linux命令系列)
(4)top详解 (每周一个linux命令系列) linux命令 top详解 引言:今天的命令是用来看cpu信息的top top 我们先看man top top - display Linux pro ...
- hadoop组件---spark实战-----airflow----调度工具airflow的介绍和使用示例
Airflow是什么 Airflow是一个可编程,调度和监控的工作流平台,基于有向无环图(DAG),airflow可以定义一组有依赖的任务,按照依赖依次执行.airflow提供了丰富的命令行工具用于系 ...
最新文章
- [转]g++ 编译多个相关文件
- Linux下给挂载U盘或者SD卡
- andriod studio怎么设置图片大小_Word图片大小总是对不齐,如何统一图片的大小位置,看一眼就会!...
- java实现extended smtp_java实现发送邮件(SMTP)
- python 通过ip获取城市_python shell根据ip获取主机名代码示例
- 设计师必备各类型3D字体图层样式PSD素材
- linux内核 删除文件_Linux内核与根文件系统的关系详解
- 理财产品利息可每天提取吗?
- python序列化类_python 序列化
- Servlet连接数据库
- verilog 自动售货机状态机实现_答辩-基于Verilog HDL的自动售货机的设计.ppt
- 计算机类专科学校排名,2017计算机专科学校排名一览表
- Ubuntu安装VMware Tools后不起作用
- 约数国王(A king)
- MySQL数据库 锁
- Android开发——使用Jword生成本地word文档
- 极狐GitLab 和 ArgoCD 的集成实践
- 为什么生产MES系统对工厂管理如此重要?
- 微信支付报出 商户订单号重复 错误问题
- 《B站家居行业营销报告》 | 飞瓜数据B站