趁我未失忆之前,记录过去曾经的自己
前言
与所有其他解决方案相比,Airflow是一种功能超强的引擎,你不仅可以使用插件来支持各种作业,包括数据处理作业:Hive,Pig(尽管你也可以通过shell命令提交它们),以及通过文件/ db entry / s3来触发的一般流程管理,或者等待来自Web端点的预期输出,但它也提供了一个很好的UI,允许你通过代码/图形检查DAG(工作流依赖性),并监视作业的实时执行。相较之前安装Azkaban,Airflow更为广泛交互在hadoop的生态环境。
一、airflow完整安装流程
1.airflow 前置安装
1.进行pip的更新,否则很多安装会报错airflow 基础安装
[root@019 ~] pip install --upgrade pip
[root@019 ~] pip install --upgrade setuptools
2.安装开发库
[root@019 ~] yum install python-devel
[root@019 ~] yum install libevent-devel
[root@019 ~] yum install mysql-devel
3.安装mysql
[root@019 ~] yum -y install mariadb mariadb-server
启动并设置开机启动
[root@019 ~] systemctl start mariadb
[root@019 ~] systemctl enable mariadb
4.初始化配置mysql
注:可以设定允许root远程登录
[root@019 ~] mysql_secure_installation
5.環境變量設置
export AIRFLOW_HOME=/path/to/airflow
export SLUGIFY_USES_TEXT_UNIDECODE=yes
2.airflow 與airflow mysql安装
1.安装airflow
[root@019 ~] pip install apache-airflow
2.初始化airflow并启动
[root@019 ~] airflow db init
[root@019 ~] airflow webserver -p 8080
3.安装airflow-mysql
[root@019 ~] airflow db init
[root@019 ~] airflow webserver -p 8080
4.创建testairflow用户,创建airflow数据库并给出所有权限给testairflow用户
#進入mysql,创建数据库,建立用戶,将数据库airflow的所有权限授权testairflow用户,密码123456且该用户可在任何IP段登录操作
[root@019 ~] mysql
MariaDB [(none)]> create database airflow;
MariaDB [(none)]> create user 'testairflow'@'%' identified by '123123';
MariaDB [(none)]> GRANT all privileges on airflow.* TO 'testairflow'@'%' IDENTIFIED BY '123123';
MariaDB [(none)]> FLUSH PRIVILEGES;
或是利用指令创建用户,创建用户必须使用命令行 airflow create_use,创建admin和view两个用户,也可以用 airflow users create --h 查询其它指令,然后以下必填
# -p PASSWORD, --password PASSWORD
airflow users create --username admin --firstname admin --lastname user --role Admin -p admin --email admin@example.org
airflow users create --username view --firstname view --lastname user --role Viewer -p view --email admin@example.org
5.修改airflow配置文件,指向数据库mysql
#打開airflow.cfg
[root@019 ~] vim /root/airflow/airflow.cfg
#文件修改
sql_alchemy_conn = mysql://testairflow:123123@localhost/airflow
6.修改配置文件添加参数,之后初始化数据库
#新增explicit_defaults_for_timestamp要注意检查您的数据库版本以查看它是否支持此变量(MariaDB> = 10.1.8)
vim /etc/my.cnf
explicit_defaults_for_timestamp=1 // 添加此行
systemctl restart mariadb
airflow db init
如果在这里遇到(1193, “Unknown system variable ‘explicit_defaults_for_timestamp’”) 类似的问题,发现系统无法认识这个指令explicit_defaults_for_timestamp,解决的问题是查看一下自己的database 版本,此参数支援(MariaDB >= 10.1.8),最好升级一下database 。
二、airflow 安装配置celery+rabbitmq(官方推荐使用rabblitmq)
1.安装celery和rabbitmq组件
pip install apache-airflow[celery]
pip install apache-airflow[rabbitmq]
2.系统安装rabbit
1.安装 erlang:
想说为何要安装erlang,则原因:RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装Rabbit MQ的前提是安装Erlang。
#下载Erlang
[root@019 yum.repos.d]# curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
#安装
[root@019 yum.repos.d]#yum install -y erlang
虽然这一步我没报错,但如果报错如下:
[**** ]# yum install erlang
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
No package erlang available.
Error: Nothing to do
则需要安装第三方软件库 epel:
# 下载
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# 安装完成即可
rpm -ivh epel-release-latest-7.noarch.rpm
检查erlang的版本号
[root@019 yum.repos.d]# erl
Erlang/OTP 23 [erts-11.1.8] [source] [64-bit] [smp:32:32] [ds:32:32:10] [async-threads:1] [hipe]
Eshell V11.1.8 (abort with ^G)
再次执行则可以成功安装erlang了!
2.安装 rabbitMQ:
先导入两个key
rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
rpm --import https://packagecloud.io/gpg.key
没报错就表示正常。
然后再完成RabbitMQ的前置条件配置
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
下载安装 RabbitMQ安装包(可在https://www.rabbitmq.com/download.html下选择对应的版本)
注意看CentOS的版本,6,7,8都有。我这里是7.6。有时候直接点击浏览器下载可能会很慢,可以F12,找到链接,在centos里面去使用wget下载,可能会很快。这里给出Centos7和Centos8的下载链接。
CentOS7:
https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.5/rabbitmq-server-3.8.5-1.el7.noarch.rpm
CentOS8:
https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.5/rabbitmq-server-3.8.5-1.el8.noarch.rpm
下载成功后,然后使用命名安装。
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.5/rabbitmq-server-3.8.5-1.el7.noarch.rpm
rpm -ivh rabbitmq-server-3.8.5-1.el7.noarch.rpm
以上安装会出现一个警告和一个错误。警告是缺少key,而错误是socat,只需要导入key和安装socat即可。
[root@019 ~]# rpm -ivh rabbitmq-server-3.8.5-1.el7.noarch.rpm
warning: rabbitmq-server-3.8.5-1.el7.noarch.rpm: Header V4 RSA/SHA256 Signature, key ID 6026dfca: NOKEY
error: Failed dependencies:
socat is needed by rabbitmq-server-3.8.5-1.el7.noarch
导入key
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
安装socat
yum -y install epel-release
yum -y install socat
安装完成再次安装RabbitMQ
rpm -ivh rabbitmq-server-3.8.5-1.el7.noarch.rpm
配置rabbitmq环境变量:
vi /etc/profile
#set rabbitmq environment
export PATH=$PATH:/usr/local/rabbitmq/sbin
source /etc/profile
启动服务
rabbitmq-server -detached #启动rabbitmq,-detached代表后台守护进程方式启动。
查看状态:
rabbitmqctl status
其他相关命令
启动服务:rabbitmq-server -detached【 /usr/local/rabbitmq/sbin/rabbitmq-server -detached 】
查看状态:rabbitmqctl status【 /usr/local/rabbitmq/sbin/rabbitmqctl status 】
关闭服务:rabbitmqctl stop【 /usr/local/rabbitmq/sbin/rabbitmqctl stop 】
列出角色:rabbitmqctl list_users
配置网页插件启用管理平台插件,首先创建目录,否则可能报错,然后启用插件后,可以可视化管理RabbitMQ。
mkdir /etc/rabbitmq
rabbitmq-plugins enable rabbitmq_management
配置linux 端口 15672 网页管理 5672 AMQP端口:
firewall-cmd --permanent --add-port=15672/tcp
firewall-cmd --permanent --add-port=5672/tcp
systemctl restart firewalld.service
配置rabbitmq(设置用户名root,密码rabbitmq,创建虚拟主机airflow-rabbitmq)
[root@019 ~]# /sbin/service rabbitmq-server stop
Redirecting to /bin/systemctl stop rabbitmq-server.service
[root@019 ~]# /sbin/service rabbitmq-server start
Redirecting to /bin/systemctl start rabbitmq-server.service
[root@019 ~]# rabbitmqctl add_user root rabbitmq
Adding user "root" ...
[root@019 ~]# rabbitmqctl add_vhost airflow-rabbitmq
dding vhost "airflow-rabbitmq" ...
[root@019 ~]# rabbitmqctl set_user_tags root airflow-rabbitmq
Setting tags for user "root" to [airflow-rabbitmq] ...
[root@019 ~]# rabbitmqctl set_permissions -p airflow-rabbitmq root ".*" ".*" ".*"
Setting permissions for user "root" in vhost "airflow-rabbitmq" ...
[root@019 ~]# rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@019:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@019...
Plugin configuration unchanged.
相关启动或停止的RabbitMQ命令如下:
service rabbitmq-server start
service rabbitmq-server stop
service rabbitmq-server restart
service rabbitmq-server status
service rabbitmq-server try-restart
service rabbitmq-server reload
service rabbitmq-server force-reload
3.访问控制台界面
访问地址 http://安装主机IP:15672:
创建用户名admin,密码aaaaaa的用户:
rabbitmqctl add_user admin aaaaaa
设置admin为超级管理员
rabbitmqctl set_user_tags admin administrator
授权远程访问(也可以登录后,可视化配置)
rabbitmqctl set_permissions -p / admin "." "." ".*"
创建完成后,重启RabbitMQ
systemctl restart rabbitmq-server
用admin登入就完成
RabbitMQ安装官网文档:RabbitMQ安装
4.修改airflow配置
#打開airflow.cfg
[root@019 ~] vim /root/airflow/airflow.cfg
#文件增加
executor = CeleryExecutor
broker_url = amqp://root:rabbitmq@localhost:5672/airflow-rabbitmq
result_backend = amqp://root:rabbitmq@localhost:5672/airflow-rabbitmq
#增加环境变量
[root@019 ~]# echo "export C_FORCE_ROOT="True"" >> /etc/profile
[root@019 ~]# source /etc/profile
三、airflow 安装配置celery+redis
1.安装redis
yum -y install redis
2.修改配置文件
vim /etc/redis.conf
#bind 127.0.0.1 // 注释掉,使redis允许远程访问
requirepass redis // 修改这行,redis登录密码(自定义)
3.开启redis服务
systemctl start redis
4.python下安装redis库
pip install redis
5.安装celery
pip install celery
6.配置airflow.cfg
#打開airflow.cfg
[root@019 ~] vim /root/airflow/airflow.cfg
#文件增加
executor = CeleryExecutor
broker_url = redis://127.0.0.1:6379/0
result_backend = redis://127.0.0.1:6379/0
7.airflow常用命令
#打开web服务
airflow webserver -p 8080
#打开调度器,必须启动,不然DAG在使用celeryExecutor和LocalExcutor没法run起来
airflow scheduler
#查看已有的dag列表
airflow list_dags
#查看某个dag下的任务
airflow list_tasks tutorial
#树形结构查看
airflow list_tasks tutorial --tree
airflow test dag_name task_name test_time
airflow run dagid [time] run task instance
airflow backfill [dagid] -s[startTime] -e [endTime] run a backfill over 2 days