こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。
今回はGCEだけではなくてLinux全般で使える技です。
日々cronjobをGCE上で実行しているのですが、たまにものすごく時間が掛かってしまうdataprocの処理が出てきました。
1時間経っても終了しない場合は強制終了させる必要があったので、timeoutコマンドでタスクを終了させてからgcloudコマンドでdataprocのジョブをkillする事にしました。
で、これを実装したbashスクリプトはこのようになりました。
#!/bin/bash #timeoutコマンドで3600秒後にkill timeout -sKILL 3600 gcloud dataproc jobs submit spark --cluster mycluster-1 --region us-west1 --class com.foobar.hoge --jars gs://my-bucket-1/hoge.jar #timeoutコマンドで終了したタスクは終了コードが124〜137になるのでチェック if [ $? -ge 124 ]; then #実行中のジョブIDをlistから取得 JOBID=`gcloud dataproc jobs list --region us-west1 --cluster mycluster-1 --state-filter active|grep RUNNING|cut -f 1 -d ' '` echo "TIMEOUT! killing job: ${JOBID}" #yesコマンドでY/nの質問に自動回答 yes | gcloud dataproc jobs kill --region us-west1 ${JOBID} fi
他にも、時間の掛かるタスクを強制終了したらslackに書き込むなど、色々応用出来るので即席監視ツールっぽいのが出来上がりますね。
弊社ではGoogle Cloud Platformを使ったデーバ分析基盤の構築支援業務を行っています。
そして、このくらいのbashスクリプトをササっと書ける「Linux大好きなマーケティングテクノロジー系エンジニア」を募集しております。
お問い合わせはこちらからどうぞ。
ブログへの記事リクエストはこちらまで