私はアプリケーションでシナリオを持っています。長期実行ETLプロセス - バックグラウンドジョブ、Spark、Hadoop
- HTTP/JSON WebサービスといくつかのFTP
- は、それらのデータを処理し、中央データベース(Postgresqlの)に配置する必要がありますされている
- (10以上)、複数のソースからデータをロードするためにほとんどのソースを持って
現在の実装は、バックグラウンドジョブを使用してRubyで実行されます。しかし、私はそれに続く問題を見る。
- 非常に高いメモリ使用量
- ジョブズは
- 水平スケーリングは、このシナリオではないセットアップ
にトリッキーで、どのような方法SparkまたはHadoopのが、助けたり、より良いことができます任意のエラーレポートなしで時々立ち往生オプション。
いくつかの良い推論をしてください。
更新: コメントごとに、私はさらに詳しく説明する必要があります。ここで私がSparkやHadoopと思った点があります。
- 実行中のジョブの並行性を調整すると、DBサーバーの負荷も大きくなります。私は読んでいたが、SparkとHadoopはDB側でもこのような重い負荷に直面するように構築されている。
- Rubyの並行処理は実際にはGILに依存していますが、実際には並行処理はサポートされていません。したがって、各ジョブは単一の中央データソースをフェッチすることができます.IOコールにスタックされていれば、ソースはロックされます。
上記のすべての点は、Hadoopの組み込みアーキテクチャの一部であると考えられています。& Spark。だから私はこれらのツールを調べるためにラインを考えていた。
これは奇妙な質問です。私はRuby、Spark、Hadoopを使用する場所で働いています。私はそれらがアーキテクチャ的に互換性がないと言うことができます。ハープープベースのソリューションが全体的にあなたの状況に適しているかどうかにかかわらず、あなたが言及した問題は、適切に設計されたRubyシステムで解決できます。それがどのように構築され、人々があなたを助けることができるかについての詳細を提供する。 –
@MarkThomasあなたは、主にアプリケーションのシナリオに基づいて意見を募集した質問です。質問を編集して、それに多くの考えを加えてみましょう。 –
resque-retryプラグインでResqueを試してみてください。小さいジョブの場合は、resque-multi-job-forksプラグインも必要です。 (本当に必要な場合にはスケーリングのためのresque-kubernetes) –