AWSの分散処理基盤サービスであるEMRを利用していて、
sparkで実装し、EC2を数台、時には数十台起動させて
分散処理することがあります。
分散処理は難しいところもありますが、
大量のデータを扱う場合には非常に有益です。
ですが、分散処理しているが故にデバッグプリントを入れてみようと思っても、
一体どのコアで出力されているか?というのは動かしてみないとわかりません。
そんなときに僕が使っている方法を紹介したいと思います。
方法
aws cliを用いたコマンドラインで対応します。
-- 準備 mkdir search_dir cd search_dir -- ログ収集 & 検索 aws s3 cp s3://<EMRのログ出力先>/<クラスタID>/containers/application_XXXXXXXXXXXXX_XXXX/ ./ --recursive find ./ -type f -name "std*.gz" -print0 | xargs -0 zgrep -nH <debug print> -- 後片付け cd .. rm -rf search_dir
準備
EMRクラスターが出力したログを集めるためのフォルダ作りです。
ログ収集 & 検索
aws cliでクラスタID配下のコンテナ出力ログをダウンロードします。
そのあとfindでstdout.gzとstderr.gzの2つの圧縮ログのみを指定して、
解凍し、探したいdebug printを指定して検索します。
debugprintがハイフンで始まる場合はdebugprintの前に「–」をつけて
行う必要があります。
後片付け
作ったフォルダ削除します。
20代前半までは東京で音楽をやりながら両手の指以上の業種でアルバイト生活をしていましたが、某大手プロバイダのテレアポのバイトでPCの知識の無さに愕然とし、コンピュータをもっと知りたい!と思ったことをきっかけに25歳の時にITの世界に未経験で飛び込みました。
紆余曲折を経て、現在は個人事業主としてお仕事させていただいており、10年ほどになります。
web制作から企業システム構築、ツール開発など、フロントエンドもバックエンドもサーバーもDBAも依頼があれば何でもやってきた雑食系エンジニアです。
今風にいうとフルスタックエンジニアということになるのでしょうか??
→ 詳細プロフィールというか、生い立ちはこちら
→スキルシートをご覧になる場合はこちら
→お仕事のご依頼やお見積りなどお問い合わせはこちらから!