"プレーンな" JavaプログラムとHadoopベースのMapReduceベースの実装は、非常に異なるビーストであり、比較するのは難しいです。 Hadoopがあなたのプログラムを少しでも並列化するようなものではありません。それは上から下へ全く異なる形で書かれています。
Hadoopにはオーバーヘッドがあります。ジョブを開始し、マッパーやレデューサーのような作業を開始するだけのオーバーヘッドです。データのシリアライズ/デシリアライズ、ローカルでの書き込み、HDFSへの転送に多くの時間を費やしています。
Hadoopベースの実装は、常により多くのリソースを消費します。あなたがそれを避けることができない限り、避けるべきことです。あるマシンで非分散計算を実行できるのであれば、最も簡単な実践的なアドバイスは配布しないことです。あなた自身の問題を解決してください。
Mahoutの推薦者の場合、Hadoopの仕事は同じデータの非分散実装より2〜4倍多く計算されます。明らかに、それはアルゴリズムとチューニングの選択肢に大きく依存します。しかし、あなたに数字を教えてください:私は4台以下のマシンのHadoopクラスターでは気にしません。
明らかに、あなたの計算があなたのマシンの1つに収まらない場合は、あなたは配布するしかありません。次に、あなたが許可できる壁時計の時間と、どれだけのコンピューティングパワーを捧げることができるかというトレードオフがあります。 Amdahlの法律への言及は正しいが、Hadoopの重大なオーバーヘッドは考慮されていない。たとえば、N個の方法を並列化するには、少なくともN個のマッパー/レデューサーが必要で、マッパー/レデューサーのオーバーヘッドのN倍が必要です。固定スタートアップ/シャットダウン時間もあります。
文字列の長さはどのくらいですか? –
@Shaggy Frog、ジェフフォスター申し訳ありませんが、私は最初は明確ではありませんでした。問題は「どれくらい早く進むことができる」ということではなく、「遅くなるのではなく、ずっと速くするために必要な機械の台数」でした。つまり、それは、ハープ・マップ、マップ・リダクション、マハウトを実行することの計算コストになります。私のせいではないのは間違いだ。 –