hadoop搭便车指南(2)-Airflow的安装

我们安装了hadoop集群后就可以使用了. 但是生产环境的hadoop任务非常复杂, 必须有维护任务调度和依赖的工具. CDH官方的工具是oozie, 我们的选型是airflow.

airflow相对于其他的hadoop任务调度工具(ooziw, azkaban)具有社区活跃, 可视化强大等优点. 我们使用airflow主要解决如下问题:

1. 定时驱动任务; hadoop作业的典型场景是T+1, 即每天的凌晨跑昨天的数据. 这样就需要有类似crontab的定时驱动功能. 驱动的最小粒度是分钟.

2. dag编程模型. 所谓的dag编程模型, 就是你可以将一个项目分成若干任务, 每个任务都可以依赖其他任务的正确执行. 任务之间根据依赖关系形成一个有向无环图(dag).

3. dag之间的可以互相依赖. 这个功能是目前azkaban不具备的, airflow是通过senor完成的. 由于hadoop任务一定是依赖某些特定的数据ready后执行的. 比如你计算DAU, 必须要等待订单数据仓库的ready. 但是一般的调度是不知道其他的dag执行情况的. 另外如果把所有的互相依赖任务都放在同一个dag里面, dag显得就特别臃肿了.

4. 可以设置全局变量.

5. 至少可以调度 sqoop, hive, spark任务.

当然, 需要提醒一句, airflow是一个离线调度工具, 它不是运行storm等流失数据的合适工具.

安装airflow 1.10.0

我们选择安装1.10.0 版本, 这个版本在pip中还没有更新, 只能通过源码安装. 1.10.0相对于1.9多了时区设置的功能. 这个功能对于相对于UTC差了8个时区的中国来说非常重要, 不然不得不处理调度时间和服务器时间不一致的问题.

yum install gcc-c++ -y
yum install python-devel -y
yum -y install mysql-community-devel
yum install -y krb5-devel
yum install cyrus-sasl-lib.x86_64 -y
yum install cyrus-sasl-devel.x86_64 -y
yum install libgsasl-devel.x86_64 -y
pip uninstall configparser
pip install configparser -U

cd /tmp;
git clone https://github.com/apache/incubator-airflow.git
cd incubator-airflow/
git checkout v1-10-stable
export SLUGIFY_USES_TEXT_UNIDECODE=yes
pip install celery
pip install .
pip install .[all]

安装 rabbitmq

yum install erlang -y
rpm --import https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
yum install rabbitmq-server
systemctl start rabbitmq-server.service
systemctl enable rabbitmq-server.service
rabbitmqctl add_user airflow 123456
rabbitmqctl set_user_tags airflow administrator
rabbitmqctl set_permissions -p / airflow ".*" ".*" ".*"

配置数据库

使用root登陆mysql并创建用户和database:

grant all privileges on airflow.* to airflow@'%' identified by '123456';

flush privileges;

create database airflow DEFAULT CHARACTER SET utf8;

还要设置一下mysql的配置文件:

找到 mysql 的my.ini 的 [mysqld], 加入

explicit_defaults_for_timestamp

重启mysqld

创建环境变量

mkdir -p /home/airflow
echo "export AIRFLOW_HOME=/home/airflow" >> /etc/profile
source /etc/profile

配置

airflow initdb
ls /home/airflow/airflow.cfg # 确保此文件的存在

修改 /home/airflow/airflow.cfg:

executor = CeleryExecutor
sql_alchemy_conn=mysql://123456@yun00:3306/airflow
broker_url = amqp://123456@yun00:5672/
result_backend = db+mysql://123456@yun00:3306/airflow
catchup_by_default = False
max_active_runs_per_dag = 1

这里我们设置max_active_runs_per_dag为一, 保证同一个dag只能依次运行.

初始化db

airflow initdb

注意第一次运行是为了生成airflow.cfg文件, 这次才是配置mysql.

安装systemd启动文件

cd /tmp
wget https://raw.githubusercontent.com/apache/incubator-airflow/master/scripts/systemd/airflow.conf
mv airflow.conf /etc/tmpfiles.d/
wget https://raw.githubusercontent.com/apache/incubator-airflow/master/scripts/systemd/airflow-webserver.service
mv airflow-webserver.service /usr/lib/systemd/system/

修改airflow-webserver.service:

ExecStart=/bin/airflow webserver  -p3425  --pid /run/airflow/webserver.pid

监听3425端口

修改/etc/sysconfig/airflow:

AIRFLOW_HOME=/home/airflow
mkdir -p /run/airflow; chown airflow:airflow /run/airflow/
systemctl restart airflow-webserver.service
systemctl status airflow-webserver.service # 查看服务状态
wget https://raw.githubusercontent.com/apache/incubator-airflow/master/scripts/systemd/airflow-scheduler.service
mv airflow-scheduler.service /usr/lib/systemd/system/
systemctl restart airflow-scheduler.service
systemctl status airflow-scheduler.service # 查看服务状态
wget https://raw.githubusercontent.com/apache/incubator-airflow/master/scripts/systemd/airflow-worker.service
mv airflow-worker.service /usr/lib/systemd/system/
systemctl restart airflow-worker.service
systemctl status airflow-worker.service # 查看服务状态

测试

访问: http://yun00:3425/admin/

启动: example_branch_dop_operator_v3 这是一个分钟级别的任务, 如果所有配置正确的话, 可以看到这个任务每分钟执行一次.

image.png

airflow的时区设置

airflow默认的调度时间为UTC. 这个非常麻烦, 因为中国的服务器时间是北京时间, 但是ariflow的调度时间是UTC, 相差了8小时.

airflow直到1.10.0 才解决这个问题. 有人会疑惑为什么这个基础的功能这个就才解决. airflow的开发者由于是跨国公司, 他们的服务器时间正是UTC. 所以他们不存在这个问题, 支持本地时间也是由于社区的要求才开发的功能.

在 airflow.cfg中配置:

default_timezone = Asia/Shanghai

airflow的分布式方案

airflow的webserver和scheduler是单点的, 但是可以对worker进行分布式部署. 只需要将相同的配置和环境变量拷贝过去, 同时启动worker进程. scheduler能及时发现新的worker.

有一点需要注意的是, worker的运行依赖于dags目录. 因此dags文件必须在每个airflow主机上存在. 本人推荐使用挂载公共目录的方式进行共享.

airflow的开发机配置

为了安全, 开发人员使用的机器不能是airflow运行的机器, 需要单独配置机器. 开发机的配置和worker机器一样的流程, 只是不需要启动任何服务而已.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353