Airflow&redis&celery分布式计算
前面几篇文档已经装好airflow,配好rest API
现在需要做单步骤可调用,所以必须使用Celery Executor,否则不能单步执行
1、安装redis
参考
-
下载文件,解压启动
tar -zxvf redis-4.0.11.tar.gz cd redis-4.0.11 make #编译 cp redis.conf src/ #将配置文件复制以可执行文件同一目录 cd src ./redis-server redis.conf
-
为了让其后台执行,修改配置文件
daemonize no
改成
daemonize yes
保存后指定redis.conf文件启动
./redis-server redis.conf
查看后台进程,看是否起了
[root@localhost src]# ps -ef|grep redis root 36983 1 0 15:54 ? 00:00:00 ./redis-server 127.0.0.1:6379 root 37514 9409 0 15:54 pts/1 00:00:00 grep --color=auto redis
测试看看,是不是能上
-
远程连接
远程要看一下redis数据,所以需要配置远程连接。 我用的redis解压目录下的src目录内的redis.conf 修改他 找到
bind 127.0.0.1 protected-mode yes
改成
bind 0.0.0.0 protected-mode no
重启 远程windows机器上,用redis desktop Manager连接一下。应该是能连上 这样是不安全的,最好还是设置个密码
-
设置密码
继续改redis.conf,找到requirepass
requirepass 你的密码
重启服务
再次连接就变成了
./redis-cli -p 6379 -a 你的密码
2、配置 airflow.cfg
注意这三个变量分的挺远的,仔细找找
executor = CeleryExecutor # 配置celery的broker_url (存储要执行的命令然后celery的worker去消费) broker_url = redis://127.0.0.1:6379/0 # 配置celery的result_backend (存储任务执行状态)、 也可以用redis存储 result_backend = db+mysql://airflow:123456@www.burukeyou.com:3306/airflow?charset=utf8
3、启动
#启动webserver #后台运行 airflow webserver -p 80 -D airflow webserver -p 80 #启动scheduler #后台运行 airflow scheduler -D airflow scheduler #启动worker #后台运行 airflow worker -D #如提示addres already use ,则查看 worker_log_server_port = 8793 是否被占用,如是则修改为 8974 等 #未被占用的端口 airflow celery worker #启动flower -- 可以不启动 #后台运行 airflow flower -D airflow celery flower
4、启动一个dag 启动的方式很多
-
1、网页上trigger 2、命令行方式
airflow dags trigger <dag_id>
airflow dags trigger oug_dags
-
3、REST API方式
5、启动一个task
-
运行task
airflow tasks run <dag_id> <task_id> <execution_date>
airflow tasks run oug_dags test1 2021-05-19 10:16:00
时间必须写,执行完后在Airflow网页上看不到执行,要到flower的tasks网页上才能看到 celery的监控页面flower:http://***:5555。执行单位是task,同一个dag的不同task可能被分配到不同的worker执行,可以从flower页面看到执行节点
-
重跑/回溯历史任务( 不知道为什么backfill会报错,用dags trigger能执行,学艺不精吧!)
airflow dags backfill <dag_id> --start-date 2015-06-01 --end-date 2015-06-07
下一节讲如果利用redis及分布式计算trigger DAGS以及执行tasks