前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0612-如何在RedHat7.4上安装airflow

0612-如何在RedHat7.4上安装airflow

作者头像
Fayson
发布2019-05-13 17:27:52
1.5K0
发布2019-05-13 17:27:52
举报
文章被收录于专栏:Hadoop实操Hadoop实操

作者:李继武

1

文档编写目的

Airflow是一款纯Python编写的任务流调度工具,airflow由许多模块组成,用户可单独安装部分模块比如pip install 'apache-airflow[celery]',pip install 'apache-airflow[hdfs]'等,也可以安装所有的模块pip install 'apache-airflow[all]',下面我们首先介绍的是如何在一台新安装的纯净的RedHat7.4上离线安装apache-airflow[all]。

安装过程中需单独安装的Python依赖包可在如下网站中下载:https://pypi.org/

  • 内容概述

1. Airflow安装流程

2. 总结

  • 安装环境

1. RedHat7.4

2. Python2.7

3. Airflow1.10.1

2

Airflow安装流程

1. Airflow既支持Python2安装,同时也支持Python3安装,但后面介绍的自动生成DAG文件的插件只支持在Python2下使用,因此此处使用系统自带的Python2.7来安装。

2. 在离线的节点上安装Airflow需要在能联网的机器上下载安装包,先通过如下命令在能联网的节点上下载Airflow的安装包。

代码语言:javascript
复制
export SLUGIFY_USES_TEXT_UNIDECODE=yes
mkdir airflow-pkg
cd airflow-pkg/
pip download apache-airflow[all]

下载完毕后将airflow-pkg打包

代码语言:javascript
复制
tar -cvf airflow-pkg.tar airflow-pkg

3. 准备新节点

挂载系统镜像作为本地yum源

代码语言:javascript
复制
mkdir -p /mnt/cdrom
mount -t auto /dev/cdrom /mnt/cdrom
rm -rf /etc/yum.repos.d/
mkdir /etc/yum.repos.d

添加repo文件:

代码语言:javascript
复制
[centos7-local]
name=Centos 7.0
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0

RedHat7.4中不包含有pip工具,需要手动下载安装

上传并解压

执行如下命令安装

代码语言:javascript
复制
 cd setuptools-40.8.0
python setup.py install
cd ../pip-19.0.3
python setup.py install

4. 上传Mysql5.7的安装包以及在联网节点上下载的Airflow安装包

mysql安装包中包含如下rpm文件

5. 安装mysql

代码语言:javascript
复制
yum localinstall mysql-community-5.7-el7/*.rpm

修改文件my.cnf,在[mysqld]下添加如下配置

代码语言:javascript
复制
explicit_defaults_for_timestamp=1

启动mysql,并设置开机自启动

代码语言:javascript
复制
systemctl enable mysqld
systemctl start mysqld

查找临时密码

代码语言:javascript
复制
grep 'temporary password' /var/log/mysqld.log

修改密码

代码语言:javascript
复制
mysql_secure_installation

登录Mysql并创建数据库airflow

代码语言:javascript
复制
mysql -uroot -p
create database airflow;

6. 安装需要的依赖

代码语言:javascript
复制
yum -y install gcc
yum install -y gcc-c++
yum install -y cyrus-sasl-lib.x86_64 cyrus-sasl-devel.x86_64 libgsasl-devel.x86_64 
yum -y install python-devel
yum -y install krb5-devel

7. 解压Airflow安装包并安装

代码语言:javascript
复制
tar -xvf airflow-pkg.tar

除了这个安装包之外还要下载以下的依赖安装包,将其放在一同放在airflow-pkg目录下

代码语言:javascript
复制
wheel-0.33.1-py2.py3-none-any.whl
pytest_runner-4.4-py2.py3-none-any.whl
Cython-0.29.7-cp27-cp27mu-manylinux1_x86_64.whl

执行如下命令进行安装

代码语言:javascript
复制
cd airflow-pkg
pip install docutils-0.14-py2-none-any.whl
pip install pytest_runner-4.4-py2.py3-none-any.whl
pip install Cython-0.29.7-cp27-cp27mu-manylinux1_x86_64.whl
pip install apache-airflow[all] --no-index -f ../airflow-pkg

8. 配置Airflow,首先先配置airflow的家目录,家目录用于存放airflow的配置文件、DAG文件、日志文件以及插件等。不配置的话默认是/root/airflow,此处将其改为/opt/airflow目录。

在/etc/profile文件下添加

代码语言:javascript
复制
export AIRFLOW_HOME=/opt/airflow

刷新环境变量。

9. 初始化Airflow

代码语言:javascript
复制
airflow initdb

在AIRFLOW_HOME目录下生成了airflow.cfg文件

修改airflow.cfg文件中的如下配置项:

代码语言:javascript
复制
executor=LocalExecutor
#更换元数据库为Mysql
sql_alchemy_conn = mysql://用户:密码@127.0.0.1:3306/airflow

10. 修改时区为上海时区

先修改airflow.cfg中的时区为Asia/Shanghai

修改/usr/lib/python2.7/site-packages/airflow/utils/timezone.py文件:

修改utcnow()函数 (在第69行):

代码语言:javascript
复制
原代码 d = dt.datetime.utcnow() 
修改为 d = dt.datetime.now()

在utc = pendulum.timezone('UTC')这句代码(第27行)下添加如下代码:

代码语言:javascript
复制
from airflow import configuration as conf
try:
        tz = conf.get("core", "default_timezone")
        if tz == "system":
                utc = pendulum.local_timezone()
        else:
                utc = pendulum.timezone(tz)
except Exception:
        pass
代码语言:javascript
复制
代码语言:javascript
复制

修改/usr/lib/python2.7/site-packages/airflow/utils/sqlalchemy.py

在utc = pendulum.timezone('UTC')这句代码(第27行)下添加如下代码:

代码语言:javascript
复制
from airflow import configuration as conf
try:
        tz = conf.get("core", "default_timezone")
        if tz == "system":
                utc = pendulum.local_timezone()
        else:
                utc = pendulum.timezone(tz)
except Exception:
        pass
代码语言:javascript
复制
代码语言:javascript
复制
修改/usr/lib/python2.7/site-packages/airflow/www/templates/admin/master.html
代码语言:javascript
复制
代码语言:javascript
复制
第31行:
var UTCseconds = (x.getTime() + x.getTimezoneOffset()*60*1000); 
改为 var UTCseconds = x.getTime();
第34行:
"timeFormat":"H:i:s %UTC%",
改为  "timeFormat":"H:i:s",
代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制
11. 重新初始化Airflow
airflow initdb


12. 启动
nohup airflow webserver $* >> $AIRFLOW_HOME/logs/webserver.logs &
nohup airflow scheduler >> $AIRFLOW_HOME/logs/scheduler.logs &

关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

在浏览器上通过8080端口查看:http://节点ip:8080

默认会加载示例DAG,将airflow.cfg中配置load_examples = False可不加载这些示例。
3
总结
1. 在离线环境下安装Airflow相对复杂,需要先在联网环境下下载依赖,且依赖较多。2. 目前Airflow本身并不提供界面化的设计方式,后面会介绍一个DAG生成插件来帮助我们设计DAG。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档