hadoop搭便車指南(2)-Airflow的安裝

我們安裝了hadoop集群后就可以使用了. 但是生產(chǎn)環(huán)境的hadoop任務(wù)非常復(fù)雜, 必須有維護(hù)任務(wù)調(diào)度和依賴的工具. CDH官方的工具是oozie, 我們的選型是airflow.

airflow相對于其他的hadoop任務(wù)調(diào)度工具(ooziw, azkaban)具有社區(qū)活躍, 可視化強(qiáng)大等優(yōu)點. 我們使用airflow主要解決如下問題:

1. 定時驅(qū)動任務(wù); hadoop作業(yè)的典型場景是T+1, 即每天的凌晨跑昨天的數(shù)據(jù). 這樣就需要有類似crontab的定時驅(qū)動功能. 驅(qū)動的最小粒度是分鐘.

2. dag編程模型. 所謂的dag編程模型, 就是你可以將一個項目分成若干任務(wù), 每個任務(wù)都可以依賴其他任務(wù)的正確執(zhí)行. 任務(wù)之間根據(jù)依賴關(guān)系形成一個有向無環(huán)圖(dag).

3. dag之間的可以互相依賴. 這個功能是目前azkaban不具備的, airflow是通過senor完成的. 由于hadoop任務(wù)一定是依賴某些特定的數(shù)據(jù)ready后執(zhí)行的. 比如你計算DAU, 必須要等待訂單數(shù)據(jù)倉庫的ready. 但是一般的調(diào)度是不知道其他的dag執(zhí)行情況的. 另外如果把所有的互相依賴任務(wù)都放在同一個dag里面, dag顯得就特別臃腫了.

4. 可以設(shè)置全局變量.

5. 至少可以調(diào)度 sqoop, hive, spark任務(wù).

當(dāng)然, 需要提醒一句, airflow是一個離線調(diào)度工具, 它不是運行storm等流失數(shù)據(jù)的合適工具.

安裝airflow 1.10.0

我們選擇安裝1.10.0 版本, 這個版本在pip中還沒有更新, 只能通過源碼安裝. 1.10.0相對于1.9多了時區(qū)設(shè)置的功能. 這個功能對于相對于UTC差了8個時區(qū)的中國來說非常重要, 不然不得不處理調(diào)度時間和服務(wù)器時間不一致的問題.

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 ".*" ".*" ".*"

配置數(shù)據(jù)庫

使用root登陸mysql并創(chuàng)建用戶和database:

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

flush privileges;

create database airflow DEFAULT CHARACTER SET utf8;

還要設(shè)置一下mysql的配置文件:

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

explicit_defaults_for_timestamp

重啟mysqld

創(chuàng)建環(huán)境變量

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

這里我們設(shè)置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

監(jiān)聽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 # 查看服務(wù)狀態(tài)
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 # 查看服務(wù)狀態(tài)
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 # 查看服務(wù)狀態(tài)

測試

訪問: http://yun00:3425/admin/

啟動: example_branch_dop_operator_v3 這是一個分鐘級別的任務(wù), 如果所有配置正確的話, 可以看到這個任務(wù)每分鐘執(zhí)行一次.

image.png

airflow的時區(qū)設(shè)置

airflow默認(rèn)的調(diào)度時間為UTC. 這個非常麻煩, 因為中國的服務(wù)器時間是北京時間, 但是ariflow的調(diào)度時間是UTC, 相差了8小時.

airflow直到1.10.0 才解決這個問題. 有人會疑惑為什么這個基礎(chǔ)的功能這個就才解決. airflow的開發(fā)者由于是跨國公司, 他們的服務(wù)器時間正是UTC. 所以他們不存在這個問題, 支持本地時間也是由于社區(qū)的要求才開發(fā)的功能.

在 airflow.cfg中配置:

default_timezone = Asia/Shanghai

airflow的分布式方案

airflow的webserver和scheduler是單點的, 但是可以對worker進(jìn)行分布式部署. 只需要將相同的配置和環(huán)境變量拷貝過去, 同時啟動worker進(jìn)程. scheduler能及時發(fā)現(xiàn)新的worker.

有一點需要注意的是, worker的運行依賴于dags目錄. 因此dags文件必須在每個airflow主機(jī)上存在. 本人推薦使用掛載公共目錄的方式進(jìn)行共享.

airflow的開發(fā)機(jī)配置

為了安全, 開發(fā)人員使用的機(jī)器不能是airflow運行的機(jī)器, 需要單獨配置機(jī)器. 開發(fā)機(jī)的配置和worker機(jī)器一樣的流程, 只是不需要啟動任何服務(wù)而已.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌歹袁,老刑警劉巖昌妹,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件议忽,死亡現(xiàn)場離奇詭異恃鞋,居然都是意外死亡洞慎,警方通過查閱死者的電腦和手機(jī)爪幻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門菱皆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挨稿,你說我怎么就攤上這事仇轻。” “怎么了叶组?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵拯田,是天一觀的道長。 經(jīng)常有香客問我甩十,道長船庇,這世上最難降的妖魔是什么吭产? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮鸭轮,結(jié)果婚禮上臣淤,老公的妹妹穿的比我還像新娘。我一直安慰自己窃爷,他們只是感情好邑蒋,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著按厘,像睡著了一般医吊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逮京,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天卿堂,我揣著相機(jī)與錄音,去河邊找鬼懒棉。 笑死草描,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的策严。 我是一名探鬼主播穗慕,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼妻导!你這毒婦竟也來了逛绵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤栗竖,失蹤者是張志新(化名)和其女友劉穎暑脆,沒想到半個月后渠啤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狐肢,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年沥曹,在試婚紗的時候發(fā)現(xiàn)自己被綠了份名。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡妓美,死狀恐怖僵腺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壶栋,我是刑警寧澤辰如,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站贵试,受9級特大地震影響琉兜,放射性物質(zhì)發(fā)生泄漏凯正。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一豌蟋、第九天 我趴在偏房一處隱蔽的房頂上張望廊散。 院中可真熱鬧,春花似錦梧疲、人聲如沸允睹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缭受。三九已至,卻和暖如春该互,著一層夾襖步出監(jiān)牢的瞬間贯涎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工慢洋, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留塘雳,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓普筹,卻偏偏與公主長得像败明,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子太防,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359