首先是一个比较好的英文网站,可能要fq:http://site.clairvoyantsoft.com/installing-and-configuring-apache-airflow/

========================================================

py3venv

在 mkdir ~/airflow/py3venv

执行:python3 -m venv ~/airflow/py3venv

进入python3 环境:source /home/airflow/py3venv/bin/activate

以后的所有操作都进到 py3venv 的python3 环境操作
=========================================================

看看是否有gcc,没有的话需要进行安装:

sudo yum install gcc  (后续安装airflow如果不成功,可以再次执行,它会更新包)

=========================================================

(py3venv) [airflow@iZ114t000jwZ airflow]$ airflow initdb
[2018-08-22 14:30:30,472] {configuration.py:206} WARNING - section/key [celery/celery_ssl_active] not found in config
[2018-08-22 14:30:30,473] {default_celery.py:41} WARNING - Celery Executor will run without SSL
[2018-08-22 14:30:30,474] {__init__.py:45} INFO - Using executor CeleryExecutor
DB: mysql://prodroot:***@rds8r7t55g74gz9a61d0.mysql.rds.aliyuncs.com/airflow?charset=utf8
[2018-08-22 14:30:30,724] {db.py:312} INFO - Creating tables
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
[2018-08-22 14:30:31,107] {models.py:189} INFO - Filling up the DagBag from /home/airflow/proj/airflow/test/dags

=========================================================

启动服务脚本

nohup airflow webserver >>/home/airflow/airflow/logs/webserver.log &
nohup airflow worker >> /home/airflow/airflow/logs/worker.log &
nohup airflow scheduler >> /home/airflow/airflow/logs/scheduler.log &
nohup airflow flower >> /home/airflow/airflow/logs/flower.log &

/home/airflow/proj/airflow/test/airflow-webserver.pid

里面的数字就是webserver的process id,  kill -9 {id} 就能停掉 webserver 服务了,重启用上面第一个

重启服务器,airflow会以 /home/airflow/airflow/airflow.cfg 为准

=========================================================

修改数据库配置

可以在~/airflow 目录下,修改airflow.cfg配置文件,数据库连接改为本地mysql的URL

先在mysql数据库里新建airflow数据库

然后修改airflow.cfg配置文件:

sql_alchemy_conn = sqlite:////root/airflow/airflow.db 改为:

sql_alchemy_conn = mysql://root:root@192.168.202.128:3306/airflow

接着重新初始化数据库:

airflow initdb

如果成功,则在airflow数据库表中可以看到很多表

如出现以下报错,则执行:yum install MySQL-python (注意此命令为centos7系统适合)

return __import__('MySQLdb') ImportError: No modulenamedMySQLdb

=======================================================

airflow1.10 中, airflow initdb 报错:

在Flask中连接MySQL时出现ModuleNotFoundError: No module named 'MySQLdb'错误,

只要在配置SQLALCHEMY_DATABASE_URI时,加上一个pymysql就可以了:
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:dzd123@localhost/你的数据库名'
,当然,前提是要已经安装了pymysql,如果没有装pymysql,是会报ModuleNotFoundError: No module named 'pymysql'错误的,

安装命令也很简单:pip install pymysql

=========================================================

 问题1:解决MySQLdb ImportError: libmysqlclient.so.18错误

主要解决方法就是创建一个 18的软连接

https://blog.csdn.net/haoyuxuan/article/details/45334087

=========================================================

 问题2:File "/home/airflow/py3env/lib/python3.6/site-packages/airflow/models.py", line 639, in set_extra

先安装包:pip install apache-airflow[crypto]

执行:python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"

将得到的字符串替换 airflow.cfg 中fernet_key 的值

这段字符串加密算法用到

=========================================================

# 在 python 中执行添加账户:

airflow 1.9 默认安装的 SQLAlchemy version 1.2.2 ,下面这段python会报错:

File "/usr/local/lib/python3.6/site-packages/sqlalchemy/ext/hybrid.py", line 873, in set
raise AttributeError("can't set attribute")
AttributeError: can't set attribute

解决方法,执行:pip install 'sqlalchemy<1.2'

这样才能得到加密的用户记录:

import airflow
from airflow import models, settings
from airflow.contrib.auth.backends.password_auth import PasswordUser
user = PasswordUser(models.User())
user.username = 'airflow'
user.email = 'nick111@163.com'
user.password = 'airflow*****'
session = settings.Session()
session.add(user)
session.commit()
session.close()

=======================================================

redis 安装参考:https://blog.csdn.net/jiangdong2007/article/details/80890236

airflow 1.9.0要使用celery4.x, redis版本4才能与 celery4 兼容

------------

安装 Airflow 1.10.1 时的一个错误:

AttributeError: 'float' object has no attribute 'items'

参考:https://github.com/celery/celery/issues/5175

pip uninstall redis

pip install redis==2.10.6

=========================================================

rabbitmq 安装

主要参考:https://www.linuxidc.com/Linux/2016-03/129557.htm

碰到的坑:

原因就是  erlang 和 rabbitmq各有一个 cookie

~/.erlang.cookie

/var/lib/rabbitmq/.erlang.cookie

将其中一个修改,改成相同的。

ps -ef | grep rabbitmq

将进程杀掉

然后重启服务器就解决了。

=========================================================

Airflow中使用 sshoperator

http://yangcongchufang.com/airflow/airflow-ssh-operator.html

问题:{ssh_operator.py:118} WARNING - /home/airflow/tmp/a.sh: line 3: hive: command not found

a.sh 内容:

echo "aaaa" > /home/airflow/tmp/aaa1.txt
hive -f /home/airflow/tmp/a.hql
echo "aaaa" > /home/airflow/tmp/aaa2.txt

明明调用成功了 a.sh,  aaa1.txt  aaa2.txt 有成功生成,但是找不到 hive 命令,而在emr服务器上直接执行 sh a.sh 却可以成功打印出数据库名称列表。

解决方法:

执行:export PATH=$PATH:$HIVE_HOME/bin

在 a.sh第一行中加入:

source /etc/profile

=========================================================

如出现以下报错,则执行:yum install MySQL-python (注意此命令为centos7系统适合)

return __import__('MySQLdb') ImportError: No modulenamedMySQLdb

==========================================================

之前用的一直是airflow1.9  ,最近安装了一遍 airflow1.10。

在airflow1.9中,subdag_operator 默认使用的executor = GetDefaultExecutor(),

而1.10中默认的是executor=SequentialExecutor()。

所以导致的结果就是在 1.9 中的subdag中可以并行执行task,而 1.10中,如果不

指定 excutor,只会逐个执行。指定方法:

from airflow.executors.celery_executor import CeleryExecutor
mysubdag = SubDagOperator(
executor=CeleryExecutor()
...
)

关于这个变动,官方文档的 tips 中有做说明: https://airflow.apache.org/concepts.html#subdags

其实是Airflow1.9中其实是有个bug,subdag中无法使用 pool 中的 slot 数控制并行任务数。

1.10中没有做这个bug的修复,而是直接给个默认值:SequentialExecutor。这是个坑~~~-_-||

 

airflow 笔记的更多相关文章

  1. airflow笔记

    airflow webserver --debug &  # debug 模式,在后台启动webserver airflow list_dags airflow list_tasks tuto ...

  2. AirFlow功能展示个人笔记

    DAGs 查看您可以一目了然地查看成功.失败及当前正在运行的任务数量. 选中其中一个DAG 树视图 跨越时间的 DAG 的树表示.如果 pipeline(管道)延迟了,您可以很快地看到哪里出现了错误的 ...

  3. 5.airflow问题

    1. Traceback (most recent call last): File "/usr/bin/airflow", line 28, in <module> ...

  4. 3.Airflow使用

    1. airflow简介2. 相关概念2.1 服务进程2.1.1. web server2.1.2. scheduler2.1.3. worker2.1.4. celery flower2.2 相关概 ...

  5. 4.airflow测试

    1.测试sqoop任务1.1 测试全量抽取1.1.1.直接执行命令1.1.2.以shell文件方式执行sqoop或hive任务1.2 测试增量抽取2.测试hive任务3.总结 当前生产上的任务主要分为 ...

  6. 1.airflow的安装

    1.环境准备1.1 安装环境1.2 创建用户2.安装airflow2.1 安装python2.2 安装pip2.3 安装数据库2.4 安装airflow2.4.1 安装主模块2.4.2 安装数据库模块 ...

  7. 2.airflow参数简介

    比较重要的参数: 参数 默认值 说明 airflow_home /home/airflow/airflow01 airflow home,由环境变量$AIRFLOW_HOME决定 dags_folde ...

  8. 调度系统Airflow的第一个DAG

    Airflow的第一个DAG 考虑了很久,要不要记录airflow相关的东西, 应该怎么记录. 官方文档已经有比较详细的介绍了,还有各种博客,我需要有一份自己的笔记吗? 答案就从本文开始了. 本文将从 ...

  9. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

随机推荐

  1. 解决SVN Cleanup错误: Failed to run the WC DB work queue associated with

    [内容来源自https://www.cnblogs.com/ANCAN-RAY/p/8961832.html] 在svn本地目录更新文件夹时,更新失败. 然后svn提示我,让我cleanup一下,于是 ...

  2. 基于nginx搭建yum源服务器

      1.首先关闭防护墙或者设置规则通过且关闭selinux 停止firewall systemctl stop firewalld 禁止firewall开机启动 systemctl disable f ...

  3. element-ui笔记

    1.el-dialog的关闭异常 在confirm按钮事件中,我们需要对业务参数进行校验,但是校验未通过,return false了,仍然关闭了弹窗. 原因:cancel按钮的click直接将弹窗的s ...

  4. LoRa---她的芯片和她的几种工作模式

    LoRa对应的芯片------sx1278芯片 sx1278芯片为Semtech公司推出的具有新型LoRa扩频技术的RF芯片,具有功耗低.容量大.传输距离远.抗干扰能力强的优点.我接下来在这块芯片上进 ...

  5. [BJOI2019]光线[递推]

    题意 题目链接 分析 令 \(f_i\) 表示光线第一次从第一块玻璃射出第 \(i\) 块玻璃的比率. 令 \(g_i\) 表示光线射回第 \(i\) 块玻璃,再射出第 \(i\) 块玻璃的比率. 容 ...

  6. python全局解释器GIL

    1.什么是进程: 进程是竞争计算机资源的基本单位.对于单核CPU来讲,同一时间只能有一个进程在运行,所以当我们开启多个应用时,操作系统需要根据进程调度算法去在不同的应用程序之间切换,而不同的进程之间切 ...

  7. 记一次CPU飙升BUG

    图文地址:https://mp.weixin.qq.com/s?__biz=Mzg3NjEzODQ4NQ==&mid=2247483690&idx=1&sn=7c926f400 ...

  8. Element-UI动态更换主题

    参考:vue-基于elementui换肤[自定义主题] 实践: 需求1.后期维护主题色不更换:  直接在线主题生成工具下载,在APP.VUE引入:(注意Element UI 版本1.3?2.0) 需求 ...

  9. C#关于TreeView树在节点数较多时总是会出现闪烁的问题方法记录

    首先介绍下背景吧,问题如题,这个问题应该说困扰我大半年了(不是说我没有请教大佬,不是说我没有上网查过,之前在搜索时,总是没有解决此问题~~),直到最近一次在在优化代码时,再次上网查找,在发现搜索词条” ...

  10. 一入OI深似海 1 —— 偶然遇见,命运选择

    记得还是三年级(还是四年级?人老了都忘了)吧, 那时候我还是个愣头青, 学校的编程班在每个班强制招人, 我就屁颠屁颠被赶去去上课了. 一开始的课完全听不懂, 导致没过多久我同班的人一个个走了, 我为了 ...