ログイン 概要 よくある質問

シェルスクリプトをつかい、染色体を全部束ねたindexに対してbowtieでsamファイルを吐かせ、 そのあとsamtoolsでbam, bam sort, bam indexを順に作らせています。すべて逐次処理です。

Mac OSXを使っているので、どうせならば、xgridで分散処理をしたいのですが、どういうジョブにしたらいいと思いますか? gmapにあるように染色体ごとにindexを作成し、それぞれ染色体ごとのbowtieのジョブを走らせるというのは 魅力的ですが、今までの逐次処理を染色体ごとのgridのジョブにしてしまうと、染色体ごとのbam indexができはずですが、 最終的なbam indexは一つにまとめたいのです。 おそらくは、各染色体ごとのbowtieをそれぞれ別個のジョブにしておいて 「xgirdのすべてのジョブのidを取得し、それらが終わるのを確認し、」 という部分をシェルスクリプトで表現できれば、 あとは、samtoolsですべてのsamファイルをマージ>bam, bam sort, bam indexを順に作らせるように思うのですが。。。

質問日 Jan 11 '11 at 22:52

fumumumu's gravatar image

fumumumu
121157

edited Jan 11 '11 at 22:54


どうもありがとうございました。 予想外にxgrid環境の構築に手間取りました。 同じ道をたどる人がいるかもしれないので、一応書いておきます。

  1. xgridでうごかすコマンドおよびデータはsandboxの中でしか動作させられません。 なので、bowtieコマンドは例えば/usr/binに。indexesも同様です。私は/var以下に置きました。
  2. bowtieが扱うような大規模データ(fasstaファイルなど)は、そのままではxgridはうまく扱えません。 データを置いたディレクトリをNFSで共有してやる必要があります。 私は、/xgrid-shareというディレクトリをコントローラーに作って、そのディレクトリをNFSでexport、 エイジェント側にも作った/xgrid-shareにマウントさせました。さらに/xgrid-share以下はsandboxとして 設定してやる必要がありました。 そして、fasstaファイルは、/xgrid-shareに置くようにしました。
  3. xgridのjob idは、xgrid -h localhost - job list > joblist.txtでとりだし、set -- tr -cd '0-9,' < joblist.txt | tr ',' ' ' でそれぞれの変数にjob idを格納することができました。

ここまできたら、mya_さんのアドバイスを参考に、それぞれのjob idのstatusを調べFinishedかどうかで 判定させてやれば、望み通りのことができそうです。 いろいろありがとうございます。

回答日 Jan 17 '11 at 09:49

fumumumu's gravatar image

fumumumu
121157

edited Jan 17 '11 at 09:51

最終的に、以下のようになりました。

xgrid -h localhost -job list > joblist.txt

set -- tr -cd '0-9,' <joblist.txt | tr ',' ' '

for jobid in $*; do

 while true; do

  jobstatus=xgrid -h localhost -job attributes -id $jobid |grep jobStatus

   case $jobstatus in

    @Failed@) eval xgrid -h localhost -job restart -id $jobid;;

    @Running@ ) sleep 120;;

    @Finished@) break;;

   esac

 done

done

アスタリスクがうまく表示できなかったので@に置き換えました。 @をアスタリスクに書き換えてください。 シングルバッククォートもうまく表示できてないですね。

 tr -cd '0-9,' <joblist.txt | tr ',' ' ' と  xgrid -h localhost -job attributes -id $jobid |grep jobStatus は、それぞれシングルバッククォートでかこむ必要があります。

回答日 Jan 18 '11 at 11:33

fumumumu's gravatar image

fumumumu
121157

edited Jan 18 '11 at 14:10

xgridは大昔に囓った程度なので、あまり自信はありませんが、 xgridに投入したjobのid番号は取得できてそのid番号のstatusも取得できるので、

細かいエラートラブルは自分の目で判断して処理する前提で、 投入したジョブのIDの数とstatus "Finished"の数が一致するまでwhile()sleep()のループで回しておく、というのはどうでしょうか。

具体的な実装まではちょっと片手間ではムリです。すいません。

参考にしたページ::

  1. http://nnutter.com/2006/05/xgrid-submission-script/
  2. http://cs.smith.edu/dftwiki/index.php/CSC334_Introduction_to_the_XGrid_at_Smith_College
  3. http://ogig3.blogspot.com/2009/03/mac-xgrid.html

回答日 Jan 12 '11 at 11:30

mya_'s gravatar image

mya_ ♦
3881914

あなたの回答
プレビューをトグルする

この質問をフォローする

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

回答

回答とコメント

タグ:

×47
×6
×1

質問日: Jan 11 '11 at 22:52

閲覧数: 4,173 回

最終更新日: Jan 18 '11 at 14:10

powered by OSQA