Airflow安装与使用

# Airflow 1.10+安装

本次安装Airflow版本为1.10+,其需要依赖Python和DB,本次选择的DB为Mysql。
本次安装组件及版本如下:Airflow == 1.10.0
Python == 3.6.5
Mysql == 5.7

# 整体流程
1. 建表
2. 安装
3. 配置
4. 运行
5. 配置任务


```
启动schedule
airflow scheduler -D
启动webserver
airflow webserver -D

ps -ef|grep -Ei '(airflow-webserver)'| grep master | awk '{print $2}'|xargs -i kill {}
ps -ef | grep -Ei 'airflow' | grep -v 'grep' | awk '{print $2}' | xargs -i kill {}
## 建库、建用户

```
库名为airflow
'create database airflow;'
建用户

用户名为airflow,并且设置所有ip均可以访问。

create user 'airflow'@'%' identified by 'airflow';
create user 'airflow'@'localhost' identified by 'airflow';

用户授权
这里为新建的airflow用户授予airflow库的所有权限

grant all on airflow.* to 'airflow'@'%';
flush privileges
```

## Airflow安装
```
这里通过 virtualenv 进行安装。

----- 通过virtualenv安装

$ mkdir /usr/local/virtual_env && cd /usr/local/virtual_env # 创建目录
$ virtualenv --no-site-packages airflow --python=python # 创建虚拟环境
$ source /usr/local/virtual_env/airflow/bin/activate # 激活虚拟环境

----- 安装指定版本或者默认
$ pip install apache-airflow -i https://pypi.douban.com/simple
在安装完一堆的依赖后,就需要配置 AIRFLOW_HOME 环境变量,后续的 DAG 和 Plugin 都将以该目录作为根目录查找,如上,可以直接设置为 /tmp/project 。

报错
ERROR: flask 1.1.1 has requirement Jinja2>=2.10.1, but you'll have jinja2 2.10 which is incompatible.
ERROR: flask 1.1.1 has requirement Werkzeug>=0.15, but you'll have werkzeug 0.14.1 which is incompatible.

执行:pip3 install -U Flask==1.0.4
执行:pip3 install -U pika==0.13.1


重新执行 :pip install apache-airflow -i https://pypi.douban.com/simple


----- 设置环境变量
(airflow) $ export AIRFLOW_HOME=/tmp/airflow


----- 查看其版本信息
(airflow) $ airflow version
____________ _____________
____ |__( )_________ __/__ /________ __
____ /| |_ /__ ___/_ /_ __ /_ __ \_ | /| / /
___ ___ | / _ / _ __/ _ / / /_/ /_ |/ |/ /
_/_/ |_/_/ /_/ /_/ /_/ \____/____/|__/
v1.8.0
执行了上述的命令后,会生成 airflow.cfg 和 unittests.cfg 两个文件,其中前者是一个配置文件 。

## airflow 配置


----- 修改Airflow DB配置
### 1. 安装Mysql模块

pip install "apache-airflow[mysql]"
这里可以简单说下,airflow依赖的其他组件均可以此方式安装。在之后安装password组件同样是通过此方式。

修改Airflow DB配置
修改${AIRFLOW_HOME}/airflow.cfg

sql_alchemy_conn = mysql+mysqldb://airflow:airflow@localhost:3306/airflow
参数的格式为mysql://帐号:密码@ip:port/db

初始化db
新建airflow依赖的表。

airflow initdb

如报错 Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
需改sql_alchemy_conn = mysql+mysqldb://airflow:airflow@127.0.0.1:3306/airflow

```

### 2. 用户认证
```
本文采用的用户认证方式为password方式,其他方式如LDAP同样支持但是本文不会介绍。笔者在安装时实验过LDAP方式但是未成功过。

安装passsword组件
pip install "apache-airflow[password]"
2. 修改 airflow.cfg

[webserver]
authenticate = True
auth_backend = airflow.contrib.auth.backends.password_auth
3. 在python环境中执行如下代码以添加账户:

import airflow
from airflow import models, settings
from airflow.contrib.auth.backends.password_auth import PasswordUser
user = PasswordUser(models.User())
user.username = 'admin' # 用户名
user.email = 'emailExample@163.com' # 用户邮箱
user.password = 'password' # 用户密码
session = settings.Session()
session.add(user)
session.commit()
session.close()
exit()
```


### 3. 配置邮件服务
此配置设置的是dag的task失败或者重试时发送邮件的发送者。配置如下:
```
[smtp]
# If you want airflow to send emails on retries, failure, and you want to use
# the airflow.utils.email.send_email_smtp function, you have to configure an
smtp_host = smtp.163.com
smtp_starttls = True
smtp_ssl = False
# Uncomment and set the user/pass settings if you want to use SMTP AUTH
smtp_user = mailExample@163.com
smtp_password = password
smtp_port = 25
smtp_mail_from = mailExample@163.com
接下来简单把dag的Python代码列出来,以供参考:

default_args = {
'owner': 'ownerExample',
'start_date': datetime(2018, 9, 18),
'email': ['mailReceiver@163.com'], # 出问题时,发送报警Email的地址,可以填多个,用逗号隔开。
'email_on_failure': ['mailReceiver@163.com'], # 任务失败且重试次数用完时发送Email。
'email_on_retry': True, # 任务重试时是否发送Email
'depends_on_past': False, # 是否依赖于过去。如果为True,那么必须要昨天的DAG执行成功了,今天的DAG才能执行。
'retries': 3,
'retry_delay': timedelta(minutes=3),
}
```

### 4、配置Executor
```
设置Executor
修改:airflow.cfg

executor = LocalExecutor
本文中由于只有单节点所以使用的是LocalExecutor模式。
```

### 5. 修改log地址
```
[core]
base_log_folder = /servers/logs/airflow
[scheduler]
child_process_log_directory = servers/logs/airflow/scheduler
```

### 6. 修改webserver地址
```
修改webserver地址
[webserver]
base_url = http://host:port
可以通过上面配置的地址访问webserver。
```

### 7. 可选配置

```
(可选)修改Scheduler线程数
如果调度任务不多的话可以把线程数调小,默认为32。参数为:parallelism


(可选)不加载example dag
如果不想加载示例dag可以把load_examples配置改为False,默认为True。这个配置只有在第一次启动airflow之前设置才有效。


如果此方法不生效,可以删除${PYTHON_HOME}/site-packages/airflow/example_dags目录,也是同样的效果。

(可选)修改检测新dag间隔
修改min_file_process_interval参数为10,每10s识别一次新的dag。默认为0,没有时间间隔。

```

## 运行airflow
```
启动schedule
airflow scheduler
启动webserver
airflow webserver
```


## 安装问题汇总
```
1. Global variable explicit_defaults_for_timestamp needs to be on (1) for mysql


修改Mysql配置文件my.cnf,具体步骤如下:

查找my.cnf文件位置
mysql --help | grep my.cnf
下图红框处为my.cnf文件所在位置:


修改文件
explicit_defaults_for_timestamp=true
注意:必须写在【mysqld】下

重启Mysql
sudo systemctl restart mysqld.service
查看修改是否生效。执行如下SQL,如果值为1则为生效。


2. pip install "apache-airflow[mysql]"报错:

mysql_config not found

安装mysql-devel:

首先查看是否有mysql_config文件。
find / -name mysql_config

如果没有安装mysql-devel
yum install mysql-devel
安装之后再次查找,结果如图:

3. 其他问题找我
```

## 配置任务

在 AirFlow 中,每个节点都是一个任务,可以是一条命令行 (BashOperator),可以是一段 Python 脚本 (PythonOperator) 等等,然后这些节点根据依赖关系构成了一条流程,一个图,称为一个 DAG 。

默认会到 ${AIRFLOW_HOME}/dags 目录下查找,可以直接在该目录下创建相应的文件。

如下是一个简单的示例。

```
import airflow
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_operator import PythonOperator
from datetime import timedelta, datetime
import pytz

# -------------------------------------------------------------------------------
# these args will get passed on to each operator
# you can override them on a per-task basis during operator initialization

default_args = {
'owner': 'qxy',
'depends_on_past': False,
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
}

tz = pytz.timezone('Asia/Shanghai')
# naive = datetime.strptime("2018-06-13 17:40:00", "%Y-%m-%d %H:%M:%S")
# local_dt = tz.localize(naive, is_dst=None)
# utc_dt = local_dt.astimezone(pytz.utc).replace(tzinfo=None)

dt = datetime(2019, 7, 16, 16, 30, tzinfo=tz)
utc_dt = dt.astimezone(pytz.utc).replace(tzinfo=None)


dag = DAG(
'airflow_interval_test',
default_args=default_args,
description='airflow_interval_test',
schedule_interval='35 17 * * *',
start_date=utc_dt

)

t1 = BashOperator(
task_id='sleep',
bash_command='sleep 5',
dag=dag)

t2 = BashOperator(
task_id='print_date',
bash_command='date',
dag=dag)

t1 >> t2

```
该文件创建一个简单的 DAG,只有三个运算符,两个 BaseOperator ,也就是执行 Bash 命令分别打印日期以及休眠 5 秒;另一个为 PythonOperator 在执行任务时调用 print_hello() 函数。
文件创建好后,放置到 ${AIRFLOW_HOME}/dags,airflow 自动读取该DAG。

----- 测试是否正常,如果无报错那么就说明正常
$ python /tmp/project/dags/hello_world.py

转载于:https://www.cnblogs.com/duanhaoxin/p/11211815.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Apple TV和Chromecast上观看本地内容。 无需等待,无需索引,只需拖放即可观看。 确实没有任何简单的事情。 下载气流 复杂而独特的视频处理管道... 气流的心脏。它以最低的CPU负载确保了最佳的视频质量。 怎么样?气流透明地重新混合了可以重新混合的视频,并对需要转码的视频进行了转码。如果您的计算机支持,则代码转换可以硬件加速。听起来太技术性了吗?这就是我们构建Airflow的原因。它隐藏了所有讨厌的细节,并且可以正常使用TM。 大字幕支持 字幕很重要。与大多数类似软件不同,Airflow无需对视频进行转码即可显示文本字幕。这样可以提高视频质量并降低CPU负载。支持DVD和Bluray字幕。 擦洗预览 寻求不一定是个谜。借助即时清理预览,您可以知道在内容加载之前将要降落的位置。使用触摸遥控器进行擦洗时,在Apple TV 4上也可用。 播放清单和最后位置 通过Airflow,您可以将文件整理到播放列表中,从而观看多个剧集变得尽可能无缝。 Airflow会记住每个文件的播放位置。它还监视当前文件夹,并为新文件自动选择下一个文件以进行不间断的播放。 环绕声 Chromecast和Apple TV全面支持5.1音频。 Airflow与Airplay镜像或Chrome Tab镜像相比如何 镜像不适用于视频播放,通常会使视频质量出现问题。帧速率不正确,存在伪影和口吃。有了Airflow,您将一无所获。它是专为视频播放而设计的,可提供最佳的视频质量。包括Chromecast Ultra和Apple TV 4K上的4K HDR HEVC流。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值