Airflow安装配置

Airflow的安装与配置

本文档记录的是基于Linux Centos系统安装的Airflow。

机器:

两台服务器(hadoop001,hadoop003)

作用:

hadoop001 : 安装mysql

hadoop003 : 安装airflow

hadoop001事先安装mysql并完成相应的配置

在hadoop003中:

1 安装 Python3

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 配置MySQL

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%';

Airflow安装配置_第1张图片

set global validate_password_policy=0;
set global validate_password_length=1;

3 安装配置Airflow(简单配置)

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 WebServer启动

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 后台启动

5 测试验证

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)]

6 主要问题汇总(小细节问题不记录)

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

你可能感兴趣的:(大数据,大数据)