服务器hadoop100 | 服务器hadoop101 | 服务器hadoop102 | |
---|---|---|---|
web server | V | ||
scheduler | V | ||
worker | V | V | V |
注意
1、在3台机器上都要下载一次
以下是在hadoop101上执行, 在hadoop100,hadoop102一样的下载
[hadoop@hadoop101 ~]$ pip3 install apache-airflow==2.0.0
[hadoop@hadoop101 ~]$ pip3 install apache-airflow[celery]
[hadoop@hadoop101 ~]$ pip3 install apache-airflow[reids] -i
http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
2、配置Airflow工作目录的环境变量
[hadoop@hadoop101 ~]$ vim /etc/profile
添加如下
export AIRFLOW_HOME=~/app/airflow
3 配置airflow命令
如
[hadoop@hadoop101 bin]$ pwd
/usr/local/python3/bin
[hadoop@hadoop101 bin]$ ll | grep airflow
-rwxr-xr-x. 1 hadoop hadoop 231 1月 6 19:58 airflow
# 创建软连接
[hadoop@hadoop101 bin]$ ln -s /usr/local/python3/bin/airflow /usr/local/bin/airflow
[hadoop@hadoop101 bin]$ cd /usr/local/bin/
[hadoop@hadoop101 bin]$ ll
lrwxrwxrwx. 1 root root 30 1月 7 10:26 airflow -> /usr/local/python3/bin/airflow
使用命令airflow --help
看是否执行成功, 执行airflow的任何命令都会初始化airflow的工作目录的生成(在${AIRFLOW_HOME}
目录下)
[hadoop@hadoop101 airflow]$ pwd
/home/hadoop/app/airflow
[hadoop@hadoop101 airflow]$ ll
总用量 24488
-rw-rw-r--. 1 hadoop hadoop 38857 1月 7 20:09 airflow.cfg
drwxrwxr-x. 9 hadoop hadoop 179 1月 7 20:05 logs
-rw-rw-r--. 1 hadoop hadoop 2619 1月 7 10:26 unittests.cfg
-rw-rw-r--. 1 hadoop hadoop 4279 1月 7 10:26 webserver_config.py
${AIRFLOW_HOME}/airflow.cfg
配置文件, 配置远程连接数据库的地址, 需要先创建一个叫airflow的数据库. 因为默认使用的是sqlite作为元数据库不支持DAG任务的并发执行、绝不能用于生产环境[core]
# 时区设置
default_timezone = Asia/Shanghai
# 数据库连接设置
sql_alchemy_conn = mysql+mysqldb://airflow:123456@www.burukeyou.com:3306/airflow?charset=utf8
# 数据库编码
sql_engine_encoding = utf-8
${AIRFLOW_HOME}/airflow.cfg
配置文件, 配置celery和executor相关配置# 设置执行策略、可选SequentialEXecutor(默认)、LocalExecutor(适合单机)、Celery Executor
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
#result_backend = redis://127.0.0.1:6379/1
4、其他airflow.cfg 配置(可选)
# web ui 界面使用的时区
default_ui_timezone=Asia/Shanghai
# 是否加载案例demo
load_examples = False
# 是否执行以前未执行的DAG Run, 定义每个DAG对象可传递catchup参数覆盖
catchup_by_default = False
[hadoop@hadoop101 ~]$ airflow db init
[hadoop@hadoop101 ~]$ airflow webserver --port 9988 # -D 参数以守护进程启动(以下均适用)
[hadoop@hadoop101 ~]$ airflow scheduler -D
[hadoop@hadoop101 ~]$ airflow celery worker -D # -q 可指定worker监听消费的队列,默认是default队列
[hadoop@hadoop100 ~]$ airflow celery worker -D
[hadoop@hadoop102 ~]$ airflow celery worker -D
访问 hadoop101:9988的web server 的UI界面
发现需要账号密码、创建一个即可.
[hadoop@hadoop101 ~]$airflow users create \
--username hadoop \
--firstname hadoop \
--lastname hadoop \
--role Admin \
--email xx@xx.com
之后在${AIRFLOW_HOME}/dags
编写自己的DAG任务即可, DAG文件名以包含dag或者airflow就会被scheduler去调度执行. 会根据 DAG对象的start_date
和schedule_interval
两个参数去生成每个DAG RUN的时间点, 时间到了就会触发执行.
tip
: