在 ShareThis , 我們不喜歡為自己創造額外的工作。 即時管理 TB 和 PB 的數據已經夠難了。 因此,我們積極尋找更快、更高效地工作的方法。 這意味著評估不同的技術和盡可能自動化。 它還涉及快速原型設計,以及盡可能少的代碼啟動和運行。
最近,我想測試 阿茲卡班 快速輕鬆地安排作業流。 但是,我不想在測試時花費大量時間使系統上下,我想跟蹤所有更改,以便我可以隨心所欲地構建和銷毀系統。 這聽起來像一個偉大的時間拉出我 多克 帽子和使用 碼頭組成. 它也允許我刷在巴什捲曲。
第一步是獲取一個集設置單個節點應用程式的 Dockerfile。 這將允許我先開始使用系統:
from java:7
COPY azkaban-solo-server-2.5.0.tar.gz /azkaban-solo-server-2.5.0.tar.gz
RUN tar -xf /azkaban-solo-server-2.5.0.tar.gz
RUN apt-get update
RUN apt-get install zip
ADD flows /azkaban-solo-2.5.0/flows
ADD run.sh /
ADD jq /usr/bin/jq
CMD /azkaban-solo-2.5.0/bin/azkaban-solo-start.sh
然後,Docker-compose 可以用來把整件事都提起來。 因此,我寫了一個dc-solo.yml檔:
azkaban:
build: solo/.
ports:
- 8081:8081
現在我可以:
$] 碼頭組合 -f dc-solo.yml 生成 $] 碼頭組合 -f dc-solo.yml 向上
阿茲卡班在跑! 我玩了 UI,並意識到如果這要工作,我們需要將流保存在 Github 中並自動載入。 這把我引導到這個過程的第二部分,即如何從Github流向阿茲卡班。 為此,我開始使用 curl 侵入他們的 API(我永遠不會建議完成的專案,但對於快速反覆運算,這行得通)。 我還知道一個不錯的json工具: "jq".
首先,讓我們編寫一個函數,將會話令牌保存到名為 FCRED 的變數:
#
getSession simply creates a session with default credentials.
#
getSession () { CRED=
curl -k -X POST --data "action=login&username=azkaban&password=azkaban" $PROD
而 [ $? -ne 0 ] 做 睡眠 1 瑞克*curl -k -X POST --data "action=login&username=azkaban&password=azkaban" $PROD
做 FCRED*echo $CRED | jq '."session.id"' | sed s/\"//g
}
然後,讓我們在阿茲卡班創建一個專案:
#
createProject creates a project in Azkaban
#
$1 The name of the project.
$2 The description of the project.
#
createProject () { RESP=
curl -k -X POST --data "session.id=$FCRED&name=${1}&description=$2" $PROD/manager?action=create
}
您可以將隨流一起上傳 zip 檔案到專案:
uploadZip () { RESP=
curl -k -H "Content-Type: multipart/mixed" -X POST --form "session.id=$1" --form "ajax=upload" --form "file=@$2;type=application/zip" --form "project=$3" $PROD/manager
專案ID*echo $RESP | jq '.projectId' | sed s/\"//g
}
甚至安排它:
schedule () { RESP=
curl -k "localhost:8081/schedule?ajax=scheduleFlow&session.id=$1&projectName=$2&flow=$3&projectId=$4&scheduleTime=$5&scheduleDate=$6&is_recurring=on&period=$7"
回聲"計劃:$? 回聲$RESP 回聲$RESP |jq '' }
我最終只是通過目錄樹反覆運算,壓縮具有 Azkaban 作業檔的目錄並上傳它們。
#
uploadFlow will zip up the contents of each project directory and upload the flow.
#
$1 The name of the project which corresponds to a directory.
#
uploadFlow () { proj=$1 rm $proj.zip zip $proj.zip $proj/* uploadZip $FCRED $proj.zip $proj }
#
Main Script
#
getSession for dir in
ls -d */
; do proj=${dir%%/} desc="cat ${dir}description.txt
" 建立「$desc」$proj專案 上傳流$proj 完成;
這不是結束。 這些阿茲卡班流在 MVP 方式上證明瞭自己的有用性,我已經開始擴展 Docker-compose 配方,以便我們得到支援 亞馬遜的RDS.您是否看到我如何通過不實現資料庫來節省自己的工作? 我愛雲!! 下面是我的多節點 Docker 組合:(我的工作 dc-full.yml 用於在本地環境中暫存。 對於使用 RDS,我將 Docker 映射替換為實際網路映射。
mysql: image: mysql environment: - MYSQLROOTPASSWORD=root - MYSQLDATABASE=azkaban - MYSQLUSER=azkaban - MYSQL_PASSWORD=azkaban volumes: - /mnt/mysql/azkaban:/var/lib/mysql executor: build: exec/. links: - mysql ports: - 12321 web: build: web/. links: - mysql - executor ports: - 8081:8081
現在就是這樣。 我們將看看這是否證明 ShareThis 然後繼續反覆運算它。 有一天,它可能會運行我們所有的自動化管道。 如果你喜歡快速的運行, 討厭堵塞開發時間的過程, 那麼請 加入我們!