ShareThis 、私たちは余計な仕事を増やしたくありません。 テラバイト、ペタバイトのデータをリアルタイムで管理することは、すでに十分に大変なことです。 そのため、より速く、より効率的に作業する方法を積極的に模索しています。 これは、さまざまなテクノロジーを評価し、可能な限り自動化することを意味します。 また、ラピッドプロトタイピングを行い、できるだけ少ないコードで物事を実行することも必要です。
最近、私が試してみたかったのは アズカバン を使って、ジョブフローを素早く簡単にスケジューリングすることができます。 しかし、テスト中にシステムを起動したり停止したりするのに多くの時間を費やしたくはありませんでしたし、システムを自由に構築したり破壊したりできるように、すべての変更を記録しておきたかったのです。 これは、私が持っている ドッカー 帽子と使用 docker-compose. また、バッシュカールのブラッシュアップにもなりました。
最初のステップは、シングルノードのアプリケーションをセットアップする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
今、私は。
$> docker-compose -f dc-solo.yml build $> docker-compose -f dc-solo.yml up
アズカバンが動き出しました 私はUIを弄ってみて、もしこれがうまくいくならば、フローをGithubに保存して自動ロードする必要があることに気づきました。 これにより、プロセスの第二段階として、GithubからAzkabanにフローを取得する方法を検討しました。 そのために、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
while [ $? -ne 0 ] ド スリープ 1 CRED=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
PROJECTID=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"
echo "scheduling: $?" echo $RESP echo $RESP | jq '.'。 }
結局、ディレクトリツリーを繰り返して、アズカバンのジョブファイルがあるディレクトリをZIPしてアップロードしました。
#
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
" createProject $proj "$desc" アップロードフロー $proj を実行します。
これで終わりではありません。 これらのAzkabanフローはMVP的に有用であることを証明しており、私はdocker-composeのレシピを拡張し始めました。 amazon.co.jpのRDS.DBを導入しないことで、いかに自分の作業を省いているかわかりますか? 私はクラウドが大好きです。 これがマルチノードのdocker-composeです: (ローカル環境でステージングするための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 で証明されるかどうかを確認してから、さらに改良を重ねていきます。 いつの日か、自動化されたパイプラインのすべてを動かすことができるかもしれません。 もしあなたが迅速な反復作業が好きで、開発時間を圧迫するプロセスが嫌いなら、ぜひ 参加してみませんか?