私はかなり良いRDBMS経験を持つPython開発者です。かなり大量のデータ(約500GB)を処理する必要があります。データはs3バケットで約1200のcsvファイルに格納されています。私はPythonでスクリプトを書いており、それをサーバー上で実行できます。しかし、それはあまりにも遅いです。現在の速度とデータ量に基づいて、すべてのファイルを処理するのに約50日かかります(そして、その前に締め切りは間違いありません)。大量のデータを並列に処理する
注:処理は基本的なETLタイプのものです。何も恐ろしいものではありません。私はPostgreSQLの一時スキーマに簡単にポンピングしてスクリプトを実行することができます。しかし、再び、私の最初のテストから、これは遅くする方法だろう。
注:新しいPostgreSQL 9.1データベースが最終的な宛先になります。
私はバッチで(並行して)それらを試して実行するために、たくさんのEC2インスタンスをスピンアップしようと考えていました。しかし、これまで私はこのようなことをしていませんでしたので、アイデアなどを探していました。
また、私はPython開発者ですから、Fabric + botoが有望かもしれません。私は時々ボトーを使いましたが、ファブリックの経験は一度もありません。
これはおそらくHadoopにとっては素晴らしい仕事ですが、私はそれを知らず、それを雇う余裕もなく、タイムラインは学習曲線や雇用を考慮していません誰か。私はまた、一度の取引のようなものではないはずです。だから、私は本当に洗練されたソリューションを作る必要はありません。私はそれが働き、年末までにすべてのデータを得ることができるだけです。
また、私はこれが単純なスタックオーバーフローのような質問ではないことを知っています(「どのようにリストを逆にすることができますか?」)。しかし、私が望んでいることは、誰かがこれを読んで、「同じようなことをして、XYZを使って...いいですよ!
私はこのタスクを達成するために使うことができることを誰もが知っていると思います(私はPython開発者であり、HadoopまたはJavaを知らず、 Hadoopのような新技術の学習や新しい言語の学習を妨げるタイトなタイムライン)
ありがとうございます。私はどんな提案も楽しみにしています。
生地+のboto
はhttp://ipython.org/ipython-doc/stable/parallel/parallel_demos.html
確かに、この作業のために良い組み合わせのように見えます。マルチインスタンス化モジュールから 'Pool'を使用することで、各インスタンスでタスクを並列化することは価値があります(1200インスタンス、ファイルごとに1インスタンスが必要な場合を除き)。また、ファイルを解析して結果を編集する方法は、おそらく合計時間に大きな影響を与えます。 'numpy'を調べましたか? – goncalopp
だから誰も考えられる提案を繰り返そうとしません - あなたの既存のスクリプトでやったことが遅すぎるということを記述できますか?そのため、私たちはそのルートを辿ることはできないと知っています:) –
@JonClements - Bascially、私は2つのアプローチを試みました。私は、一時的なスキーマにデータを入れて(必要に応じて)インデックスを作成し、それに対してクエリを実行してデータを「マッサージ」し、要求されたフォーマットにすることを試みました。インデックスがPostgreSQLのキャッシュよりもはるかに大きかったと思うので、遅すぎました。注:私はHeroku上で動作する小さなPostgreSQLインスタンスを持っています。 (次のコメントに続きます) –