- SCPやrsyncやらで各アプリケーションサーバから回収
- 自由が利く
- 各アプリケーションサーバから解析サーバへ投げてもらう
- HDFSなどHadoopが扱うファイルシステムに直接入れる事が可能
- ※ただし、各アプリケーションサーバがそのファイルシステムを扱えるように色々セットアップが必要
後者のアプリから投げてもらう方だと各サーバでファイルシステムを扱えるようセットアップが必要になるので、そこまでアプリ側に負担を掛けられないかなということで今考えているのは前者の方法となります。
コード
Hadoopが扱うファイルシステムはHDFSという前提で前回構築した環境でサンプルを作ってみました。
シェルスクリプトで並列回収
まず最初にシェルスクリプトで書いてみました。「これだと回収先のアプリが100万個ある場合は100万個同時にダウンロードしちゃうってことだよね?」というもっともな指摘で没になりました。まったくもってその通りだと思います。
Qudoで並列回収
- ジョブ/キューを使いたい
- なんとなくジョブは消えてほしく無い
- 失敗したらリトライしてほしい
- 回収は並列
- でも同時実行数は上限あり
以上の要件で最初はTheSchwartz&Parallel::Preforkで考えていましたが何やらGearmanでもDBを使って動作させられるという話があったりQudoを見つけてみたりで、でもやりたいことって別にそんなに複雑な事でもないので結局何使っても良いかなと思ってQudoを選びました。後々機能を増やしたい時にフックポイントが色々用意されているので悪くないかなと。
どうでも良いですがnekokakさん曰くQudoは「駆動」らしいですが「弓道」の方が良いと思います^^