本文档记录的是基于Linux Centos系统安装的Airflow。
机器:
两台服务器(hadoop001,hadoop003)
作用:
hadoop001 : 安装mysql
hadoop003 : 安装airflow
hadoop001事先安装mysql并完成相应的配置
在hadoop003中:
1.1 下载安装包
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
【注】 如果没有wget命令,使用 yum -y install wget 下载
1.2 解压安装包
tar -zxvf Python-3.6.5.tgz -C /home/bigdata/module
1.3 安装依赖
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
yum install gcc -y
yum install epel-release
yum -y install zlib*
1.4 创建 /usr/local/python3 文件
mkdir /usr/local/python3
1.5 编译安装
cd /home/bigdata/module/Python-3.6.5
./configure --prefix = /usr/local/python3 【编译后安装路径】
make && make install
1.6 添加本地环境变量(多种方式,这里是本人的习惯方式)
1,进入 /etc/profile.d/myenv.sh(自己创建的) vim /etc/profile.d/myenv.sh 2,输入 #PYTHON_HOME export PYTHON_HOME=/usr/local/python3 export PATH=$PATH:$PYTHON_HOME/bin
2.1 配置 my.cnf 文件
whereis my.cnf
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v8Irehxc-1637211734315)(E:\文件\Airflow\Airflow的安装与配置.assets\image-20211118113851769-16372067372231.png)]
添加:
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] collation-server = utf8mb4_unicode_ci init-connect='SET NAMES utf8mb4' character-set-server = utf8mb4 explicit_defaults_for_timestamp=1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XTpO3HVE-1637211734316)(E:\文件\Airflow\Airflow的安装与配置.assets\image-20211118114004594.png)]
2.2 创建airflow库
mysql -uroot -p123456
mysql> create database airflow default charset utf8 collate utf8_general_ci;
mysql> create user 'airflow'@'%' identified by 'airflow';
*mysql> create user 'airflow'@'localhost' identified by 'airflow';
mysql> grant all on airflow.* to 'airflow'@'%';
mysql> flush privileges;
【*注】如果密码策略没有配置过导致密码设置不成功等相关报错 ,可以使用以下命令尝试修改密码策略
SHOW VARIABLES LIKE 'validate_password%';
set global validate_password_policy=0; set global validate_password_length=1;
3.1 安装Airflow
yum install python-devel yum install python3-devel yum install mysql-devel pip3 install mysqlclient *pip3 install [--target 安装路径] apache-airflow *pip3 install [--target 安装路径] apache-airflow[mysql]
【*注】添加安装路径方便查找
3.2 修改配置文件
3.2.1 初始化Airflow原始库,进入 /home/bigdata/module/airflow/bin
./airflow db init
3.2.2 初始化成功之后,在自己当前的家目录中生成一个 airflow文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W9vHltig-1637211734318)(E:\文件\Airflow\Airflow的安装与配置.assets\image-20211118120025733.png)]
3.2.3 修改以下几个地方
[core] //脚本通道,将脚本放入该目录下执行,便可以在webserver上显示 dags_folder = /home/bigdata/airflow/dags default_timezone = Asia/Shanghai executor = LocalExecutor //数据库连接 sql_alchemy_conn = mysql+pymysql://root:123456@hadoop001:3306/airflow [cli] endpoint_url = http://hadoop003:8080 [webserver] base_url = http://hadoop003:8080 default_ui_timezone = Asia/Shanghai //指定webserverde ip web_server_host = 192.168.5.103
4.1 创建用户
airflow users create --username admin --firstname admin --lastname admin --role Admin --email [email protected]
4.2 启动webserver
airflow webserver -D 后台启动
4.3 启动调度
airflow scheduler -D 后台启动
1,启动webserver以及scheduler后,进入 hadoop003:8080页面查看信息,如果存在某些example 出错无法导入,不要慌,移除或者不管都行。
2,在 /home/bigdata/airflow/dags 目录下创建一个python脚本文件,这个目录是由配置文件中决定的,如果没有该目录 创建即可 ,如果更换,请务必重启webserver和scheduler。
3,测试脚本 demo.python如下
#coding=utf-8
from datetime import datetime, timedelta
from airflow import DAG
from airflow.utils.dates import days_ago
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_operator import PythonOperator
from airflow.operators.dummy_operator import DummyOperator
def default_options():
default_args = {
'owner': 'airflow', # 拥有者名称
'start_date': days_ago(1), # 第一次开始执行的时间,为 UTC 时间(注意不要设置为当前时间)
'retries': 1, # 失败重试次数
'retry_delay': timedelta(seconds=5) # 失败重试间隔
}
return default_args
# 定义DAG
def test1(dag):
t = "echo 'hallo world'"
# operator 支持多种类型, 这里使用 BashOperator
task = BashOperator(
task_id='test1', # task_id
bash_command=t, # 指定要执行的命令
dag=dag # 指定归属的dag
)
return task
def hello_world_1():
current_time = str(datetime.today())
print('hello world at {}'.format(current_time))
def test2(dag):
# PythonOperator
task = PythonOperator(
task_id='test2',
python_callable=hello_world_1, # 指定要执行的函数
dag=dag)
return task
def test3(dag):
# DummyOperator
task = DummyOperator(
task_id='test3',
dag=dag)
return task
with DAG(
'test_task', # dag_id
default_args=default_options(), # 指定默认参数
schedule_interval="@daily" # 执行周期
) as d:
task1 = test1(d)
task2 = test2(d)
task3 = test3(d)
task1 >> task2 #>> task3 # 指定执行顺序
4,进入 python3 bin目录下使用python3.6 执行脚本,如果遇到 无法找到 MySQLDB的问题,可以下载一个pymysql,百度即可
5,执行完成后,刷新webserver页面,查看任务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SjEkcG1C-1637211734319)(E:\文件\Airflow\Airflow的安装与配置.assets\image-20211118124649509.png)]
6,点击右边的运行 ,在实例中找到相应的task查看日志
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UU4nezvZ-1637211734320)(E:\文件\Airflow\Airflow的安装与配置.assets\image-20211118124834536.png)]
7,日志如下,如果出现404,检查配置文件中是否相关的 ip地址都已经成功配对,没有请修改后重启webserevr和scheduler
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eRJjordu-1637211734320)(E:\文件\Airflow\Airflow的安装与配置.assets\image-20211118125001083.png)]
Q:为什么要使用两个机器,一个是作为MySQL,一个是安装Airflow?
A:Linux自带了 mariadb,这个与我们安装MySQL会有冲突,所以之前已经卸载了;但是Airflow安装时,我们需要下载 mysql-devel 和 mysqlclient 他们所依赖了 mariadb ,所以会造成安装不上报错的问题。故将两者分开了。
Q:安装Airflow时出现 “ModuleNotFoundError: No module named ‘setuptools_rust‘” 问题
A:安装以下就行了,有些东西的确会缺少,自己安装以下就可以了
pip3 install -U pip setuptools
Q:那么在提交测试脚本时,提示“No module named ‘MySQLdb’”是要安装什么呢?
A:在 python2 中,使用 pip install mysql-python 进行安装连接MySQL的库,使用时 import MySQLdb 进行使用; 在 python3 中,改变了连接库,改为了 pymysql 库,使用pip install pymysql 进行安装,直接导入即可使用;
pip3 install PyMySQL
导入后,相应的我们修改Airflow的配置
sql_alchemy_conn = mysql://root:123456@hadoop001:3306/airflow
改为
sql_alchemy_conn = mysql+pymysql://root:123456@hadoop001:3306/airflow