背景:由于最近团队内部需要使用airflow调度,故使用进行一系列调度任务。记录一些在使用过程中遇到的问题
1.启动airflow
airflow 安装完成后,依次通过以下步骤,即可开始使用
# 初始化数据库
airflow initdb
# 守护进程运行webserver, 默认端口为8080,也可以通过`-p`来指定端口
airflow webserver -D
# 守护进程运行调度器,守护进程即表示后台启动
airflow scheduler -D
2.airflow常用命令
# 测试任务,格式:airflow test dag_id task_id execution_time
airflow test test_task test1 2019-09-10
# 开始运行任务(这一步也可以在web界面点trigger按钮)
airflow trigger_dag test_task
# 守护进程运行webserver, 默认端口为8080,也可以通过`-p`来指定
airflow webserver -D
# 守护进程运行调度器
airflow scheduler -D
# 守护进程运行调度器
airflow worker -D
# 暂停任务
airflow pause dag_id
# 取消暂停,等同于在web管理界面打开off按钮
airflow unpause dag_id
# 查看task列表
airflow list_tasks dag_id 查看task列表
# 清空任务状态
airflow clear dag_id
# 运行task
airflow run dag_id task_id execution_date
#忽略依赖task运行task
airflow run -A dag_id task_id execution_date
3.airflow webserver介绍
参见:https://www.jianshu.com/p/cbff05e3f125
4.ssh连接不上,一直报错 SSH operator error:No authentication available
解析:只要看到authentication 很明显,权限问题,但是找不到到底是哪里权限有问题
原因:airflow webServer->Admin->Connections
- 配置一个conn,我的业务场景就是airflow会在其他服务器上调度脚本执行
- 首先,需要airflow的机器可以ssh免密到待执行服务器
- 其次,配置conn时可能涉及到切换到不同用户,会需要密码
- 现在目标服务器上使用 passwd username 设置一个该用户密码
- 然后在配置conn时将密码填入,注意:填入密码后,再阅读是看不到你填了什么的(会误以为啥也没写)
- 是否有填入用户密码,可以通过 is Encrypetd,若该列打勾,则说明是加密过的,则表示有填入密码的,否则为一条横杠
5.在使用SSHOperator时遇到问题
- 命令是直接调用一个.sh脚本
- 一直报错,但是该脚本手动是可以执行的
- 后发现,直接调用shell脚本,
"sh demo.sh "
,最后需要带上一个空格才识别
6.在使用airflow时,webServer密码忘记了,可添加新账户登录
python
import airflow
from airflow import models, settings
from airflow.contrib.auth.backends.password_auth import PasswordUser
user = PasswordUser(models.User())
user.username = 'usertest1'
user.email = 'usertest1@163.com'
user.password = 'usertest1'
user.superuser = 1 //赋予管理员权限,如果是普通用户就不需要这个
session = settings.Session()
session.add(user)
session.commit()
session.close()
exit()
- 可以使用新设置的帐户密码登录,因为设置的是管理员权限,故之前所有的调度任务也都是可以看到
网友评论