一、创建虚拟环境
1.安装virtualenv,virtualenvwrapper
pip install virtualenv virtualenvwrapper
安装好之后创建存放虚拟环境目录,这里我存在 ~/pythonvenv 里,查看当前路径:pwd,返回/home/cch/pythonvenv
如果没有pip 先安装pip:yum install -y pip
安装好了之后,查找virtualenv位置:find / -name virtualenv
例:返回:/home/cch/.local/bin/virtualenv
查找virtualenvwrapper.sh位置:find / -name virtualenvwrapper.sh
例:返回:/home/cch/.local/bin/virtualenvwrapper.sh
2.在/usr/bin中添加环境变量(就是新建了一个软连接)
ln -s /usr/local/python36/bin/virtualenv(virtualenv的位置) /usr/bin/virtualenv
3.修改环境变量相关脚本~/.bashrc
添加如下代码
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 # 指定python版本
export WORKON_HOME=/home/cch/pythonvenv
source /home/cch/.local/bin/virtualenvwrapper.sh #virtualenvwrapper.sh的位置
然后重启:source ./.bashrc,如下图所示
之后创建虚拟环境
mkvirtualenv venv1
完毕之后 就可以在~/pythonvenv文件夹里看到刚刚创建的 venv1了
这里是一些常用命令
创建虚拟环境: mkvirtualenv + 虚拟环境名称
创建虚拟环境(指定python版本): mkvirtualenv -p python + 虚拟环境名称
mkvirtualenv /usr/bin/python test #指定创建基于python3的环境
查看所有虚拟环境: workon + 2次tab键
使用虚拟环境: workon + 虚拟环境名称
退出虚拟环境: deactivate
删除虚拟环境(必须先退出虚拟环境内部才能删除当前虚拟环境):
rmvirtualenv + 虚拟环境名称
二、部署airflow
进入虚拟环境
安装airflow:pip install apache-airflow
出现以下报错,这是因为先前安装混乱导致,一般不会出现:
直接进入文件夹删掉文件即可:
之后配置存放airflow配置的文件夹,~目录下,创建airflow文件夹,
pwd查看路径:/home/cch/airflow
环境变量配置vim ~/.bashrc为:
export AIRFLOW_HOME=/home/cch/airflow
source ~/.bashrc
运行airflow,报错:
sqlite已经不推荐使用,进入airflow.cfg修改配置,`vim /home/cch/airflow/airflow.cfg`
# dags存放路径
dags_folder = /home/cch/.local/bin/airflow/dags
# 时区默认位utc时间建议换成国内Asia/Shanghai
default_timezone = utc
# 这里我换成
default_timezone = Asia/Shanghai
# airflow支持并行性的工作器,有`SequentialExecutor`(默认,顺序执行), `LocalExecutor`(本地执行), `CeleryExecutor`(远程执行), `DaskExecutor`
executor = SequentialExecutor
# 这里我换成
executor = LocalExecutor
# 数据库连接设置
sql_alchemy_conn = sqlite:////home/airflow/airflow.db
# 这里我换成
# mysql+pymysql://用户名:密码@主机名:端口号/数据库,提前在mysql中创建名称为数据库airflow即可,airflow db init的时候就会自动创建相应的表格
sql_alchemy_conn = mysql+pymysql://user:pass@localhost:3306/airflow
# 如果不设置数据库将会报错
# 因为这里设置了数据库 所以就得在你的ubuntu上安装mysql
# sudo apt update
# sudo apt install mysql-server
# 安装完之后创建用户
# 首先进入mysql环境
# 在服务器上输入 mysql
"""
创建airflow数据库 并指定字符集
create database if not exists airflow default charset utf8 collate utf8_general_ci;
创建用户
CREATE USER 'airflow'@'%' IDENTIFIED BY 'airflow';
# 给用户授权
grant all privileges on airflow.* to airflow@localhost identified by 'airflow';
但是你airflwo db init 初始化的情况下会出现问题:
” raise Exception("Global variable explicit_defaults_for_timestamp needs to be on (1) for mysql")
Exception: Global variable explicit_defaults_for_timestamp needs to be on (1) for mysq
mysq的全局变量explicit_defaults_for_timestamp需要为on (1)
“
所以这里你就需要将 explicit_defaults_for_timestamp设置下:
set global explicit_defaults_for_timestamp =1;
"""
# 数据库编码方式
sql_engine_encoding = utf-8
# 是否与SqlAlchemy库进行数据交互
sql_alchemy_pool_enabled = True
# 最大数据库连接数
sql_alchemy_pool_size = 5
# 控制每个Airflow worker可以同时运行task实例的数量
parallelism = 32
# 用来控制每个dag运行过程中最大可同时运行的task实例数,若DAG中没有设置concurrency,则使用默认值
dag_concurrency = 16
# 创建新的DAG时,是否暂停
dags_are_paused_at_creation = True
# 同一时间最大运行dag的数量,默认为16
max_active_runs_per_dag = 16
# 加载示例dags,默认为True
load_examples = True
# 这里我换成
load_examples = False
# 任务清理时间
killed_task_cleanup_time = 60
# 这里我换成
killed_task_cleanup_time = 120
# 日志存放路径
base_log_folder = /home/xxx/airflow/logs
# 日志级别
fab_logging_level = WARN
# 这里我换成
fab_logging_level = WARNING
# web ui面使用的时区
default_ui_timezone = UTC
# 这里我换成
default_ui_timezone = Asia/Shanghai
# 运行web服务端口号
web_server_port = 8080
# 超时时间
web_server_master_timeout = 120
web_server_worker_timeout = 120
# 这里我还换成
web_server_master_timeout = 300
web_server_worker_timeout = 300
# 刷新时间
worker_refresh_interval = 6000
# 这里我换成
worker_refresh_interval = 30
# 任务重试时是否发送邮件提醒
default_email_on_retry = True
# 这里我换成了
default_email_on_retry = False
# 任务失败时是否发送邮件提醒
default_email_on_failure = True
# 设置web端Configuration不显示配置信息
expose_config = False
# 加载Airflow UI界面的时间
default_dag_run_display_number = 15
[smtp] 发送邮件时邮箱的配置
smtp_host = localhost
# 这里我用的163邮箱 所以我换成
smtp_host = smtp.163.com
# 加密通讯
smtp_starttls = True
# 这里我换成
smtp_starttls = False
smtp_ssl = False
# Example: smtp_user = airflow
smtp_user = 你的邮箱
# Example: smtp_password = airflow
smtp_password =你邮箱设置里smtp密码
smtp_port = 25
# 这里我设置
smtp_port = 465
smtp_mail_from = 你要收信的邮箱
smtp_timeout = 30
smtp_retry_limit = 5
# 配置celery的broker_url(存储要执行的命令然后celery的worker去消费)
broker_url = redis://redis:6379/0
# 配置celery的result_backend(存储任务执行状态)、 也可以用redis存储
result_backend = db+postgresql://postgres:airflow@postgres/airflow
# 调度程序尝试触发新任务的时间
scheduler_heartbeat_sec = 60
# 检测新dag的时间
min_file_process_interval = 10
# 是否使用catchup功能, 即是否执行自上次execute_date以来所有未执行的DAG Run, 另外定义每个DAG对象可传递catchup参数进行覆盖
catchup_by_default = True
初始化airflow数据库
airflow db init
最后一行出现Initialization done表示安装成功
创建airflow用户
airflow users create --username 账号 --firstname 姓 --lastname 名字 --role Admin --email asd@xxx.com
输入密码和重复密码就完成创建账户了
测试
在dags目录下,创建dag文件(即py文件),开启airflow服务:
airflow webserver -D
airflow scheduler -D
or
nohup airflow scheduler &
nohup airflow webserver -p 5568 >/home/aw.log 2>&1 &
在内网打开:
(airflow运行机器内网ip):8080,即可打开airflow界面。
#杀进程
ps -ef|egrep 'scheduler|airflow-webserver'|grep -v grep|awk '{print $2}'|xargs kill -9
欢迎关注:爬虫王者