airflow安装与使用

airflow 安装

      环境: Ubuntu16.04

默认配置的安装

  1. 使用pip: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple airflow
    安装完成之后我的默认安装在~/.local/bin目录下, 配置文件是 ~/airflow/airflow.cfg
  2. 初始化数据库: airflow initdb
  3. 启动server: airflow webserver, 然后打开localhost:8080即可看到首页

存在的问题

  1. 数据库配置:默认的配置是开发环境使用,使用的sqllite内存数据库,SequentialExecutor, 所以在airflow initdb之前不用修改airflow.cfg中sql_alchemy_conn = sqlite:home/zhg/airflow/airflow.db的配置, 如果使用cellery_executor,使用mysql等数据库存储元数据,则需要先安装mysql,创建相应的表,然后修改配置文件,再airflow initdb.
  2. airflow的后台默认用的是flask, airflow webserver是使用gunicorn启动,且对gunicorn的版本有限制,如果出现Error: 'airflow.www.gunicorn_config' doesn't exist则卸载掉gunicorn,然后sudo pip install gunicorn==19.3.0, 不要使用–user安装. 如果是airflow webserver -d则是debug模式,使用flask的debug环境,不需要gunicorn
  3. 默认是没有认证的, web端不需要登录,可查看所有的DAG. 也可在启动的时候开启认证, 参考
    https://blog.csdn.net/wjf774219636/article/details/80105598https://blog.csdn.net/wjf774219636/article/details/80105598

celery executor模式安装

  1. 按照默认模式安装好之后先不启动server,先安装celery模式需要的依赖
postgresql: airflow需要用到的数据库,默认是sqllite也可以用mysql
celery
flower: celery的监控系统
rabbitmq: celery依赖的组件
psycopg2: 连接pgsql的python包,mysql对应的是python-mysqldb

此处使用mysql, 安装步骤:

sudo apt-get install mysql-server
apt-get isntall mysql-client
sudo apt-get install libmysqlclient-dev

安装之后默认用户为root,密码为空,登录方式是sudo mysql -u root -p 提示输入密码是直接enter即可.
登录之后修改密码: set password for root@localhost = password('root');
创建database airflow: create database airflow;
安装mysql连接库: sudo apt-get install python-mysqldb
安装celery:sudo apt-get install celery
安装flower: pip install flower
安装rabbitmq: 下面的命令直接执行即可, 生产环境推荐用redis会方便些

sudo apt-get install rabbitmq-server
sudo rabbitmqctl add_user airflow 123456
sudo rabbitmqctl add_vhost airflow_host
sudo rabbitmqctl set_user_tags airflow airflow_tag
sudo rabbitmqctl set_permissions -p airflow_host airflow ".*" ".*" ".*"

有些博客说需要安装依赖 pip install airflow[celery, mysql]
安装之后ui界面默认是没有打开的: sudo rabbitmq-plugins enable rabbitmq_management
打开之后的登录http://localhost:15672 用户密码是guest/guest

  1. 配置
    数据库配置: sql_alchemy_conn = mysql://root:root@localhost:3306/airflow
    设置celery:
    executor = CeleryExecutor
    这两个参数默认使用mysql,可以不改
    #broker_url = amqp://airflow:123456@localhost:5672/airflow_host # 密码要与上面的设置一致
    #celery_result_backend = db+postgres+psycopg2://postgres:yourpassword@localhost:5432/airflow

  2. 初始化数据库
    airflow initdb
    可能出现"Access denied for user 'root'@'localhost'") (Background on this error at: http://sqlalche.me/e/e3q8)因为没有root权限,直接mysql登录也是同样的问题,如果sudo mysql登录就可以, 使用sudo airflow initdb即可

  3. 依次启动
    启动airflow的webserver
    $ airflow webserver -p 8080
    启动shceduler
    $ airflow scheduler
    启动worker
    $ airflow worker 若有多个node,每个node上都要启动
    启动celery的flower监控界面
    $ airflow flower

然后在web ui端操作已有的example, 即可启动然后查看日志

存在的问题:
5. mysql安装后默认只有sudo权限才能连接, 从而导致airflow worker启动时连接没有事情了出现access denied. 修改mysql配置文件/etc/mysql/conf.d/mysql.cnf 加上如下配置即可
在这里插入图片描述

创建DAG

dag的存放目录是~/airflow/dags, 自带的examples在/home/zhg/.local/lib/python2.7/site-packages/airflow/example_dags
将dag定义的py脚本放到dags目录下, python test.py, 若没有抛异常,则可以使用. 打开ui后并没有看到,需要查一下. 也可以通过命令行调试.
所执行的python必须是与pip install对应的

Docker安装

参考 https://github.com/puckel/docker-airflow
docker定制化部署: http://yangcongchufang.com/airflow/airflow-with-docker.html

其他:

  1. airflow webui上的数据都是从数据库里面读的, 添加一个任务不仅要把py文件放在dag目录,系统还会解析文件存储到数据库. 若直接删除文件, 系统里面还是有记录的.自带的example目录与正式目录是分开的.

  2. docker部署的方式还是得在airflow用户,不然dag显示不出来. 将定义dag的python文件放到指定目录执行后,就会显示出来,不用使用python执行

  3. airflow 没有创建dag的api, 有删除,触发, 获取dag状态的api. dag文件删除之后任务是不能被执行的, 因为worker需要访问这个py文件. 由scheduler定期扫描dag目录下的文件,第一次加载和更新比较慢,然后解析, 若满足调度要求的就触发, 间隔时间当期定的是300,单位应该是ms. 可以实现create dag的api,但是api是模拟上传文件,而不是定义参数. airflow dag的删除要先删除对应的py文件,然后使用delete_dag命令.

4.一个dag会对应job表的一个记录, 该表是BaseJob中定义.
4. py文件再第一次执行之后被更改, 但是task_id保留, 更改后所有相关联的都是会更新的.但是在更新的时间间隔内执行的结果未知.
5. 触发应该是有其他机制, 不然间隔300ms(或者秒级)扫描之后再判断, 那就不符合准确的时间调度要求.
6.常用管理dag做法,dag存放另一个目录通过git管理,并设置软连接映射到$AIRFLOW_HOME/dag。好处方便dag编辑变更,同时dag变更不会出现编辑到一半的时候就加载到airflow中。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值