これと同様の質問があることを知っています。
- https://stackoverflow.com/questions/8232194/pros-and-cons-of-celery-vs-disco-vs-hadoop-vs-other-distributed-computing-packag
- セロリ、昆布、PyAMQP、RabbitMQ/ironMQ を区別する
しかし、いくつかのユースケースの例に裏打ちされたより具体的な区別を探しているので、私はこれを求めています.
だから、私はどちらか/両方のプログラムを作りたいpythonユーザーです:
- 大きすぎて
- するのに時間がかかりすぎる
単一のマシンで実行し、複数のマシンで処理します。私は Python の (単一マシンの) マルチプロセッシング パッケージに精通しており、現在 mapreduce スタイルのコードを書いています。たとえば、私の関数は簡単に並列化できることを知っています。
いつもの賢明な CS のアドバイス提供者に尋ねる際に、私は自分の質問を次のように表現しました。
「タスクを取得し、それを多数のマシンで同時に実行される一連のサブタスクに分割し、それらの結果を集約して、reduce や命令などの他の関数に従って処理したい」たとえば、データベースに連続して追加します。」
この私のユースケースの内訳によると、Hadoop または一連の Celery ワーカー + RabbitMQ ブローカーを同様にうまく使用できると思います。しかし、賢明なアドバイスをくれる人に尋ねると、Hadoop と Celery を同等のソリューションと見なすことに完全に頭がおかしいかのように答えてくれます。私はHadoopとCeleryについてかなり読んだことがあります---両方が何をするかについてかなりよく理解していると思います---私が理解していないように見えるのは次のとおりです。
- なぜ彼らはそれほど離れており、非常に異なっていると考えられているのですか?
- まったく別の技術として受け取られているようですが、どのような点でしょうか。それぞれを区別するユースケース、またはどちらがより優れているユースケースは何ですか?
- 両方でどのような問題を解決できますか? また、どちらか一方を使用するのが特にばかげているのはどの分野ですか?
- マルチプロセッシングのような Pool.map() 機能を複数のマシンに実現するための、より良い、より簡単な方法はありますか? 私の問題がストレージによって制約されているのではなく、計算に必要な CPU と RAM によって制約されていると想像してください。したがって、ワーカーから返された結果を保持するためのスペースが少なすぎるという問題はありません。(つまり、データベースからの値によってシードされた小さなマシンで多くのものを生成する必要があるシミュレーションのようなことを行っていますが、これらはソース マシン/データベースに戻る前に削減されます。)
Hadoop がビッグ データの標準であることは理解していますが、Celery も十分にサポートされているようです。私はそれがJavaではないことを感謝しています(Pythonがhadoopに使用しなければならないストリーミングAPIは私には不快に見えました)ので、Celeryオプションを使用する傾向があります。