ビッグデータベースの分析プロジェクトを開始しており、scala(タイプセーフスタック)の採用を検討しています。さまざまなscala API's /を知りたいです。 Hadoop、MapReduceプログラムを実行できるプロジェクト。
間違いなくチェックアウト Scalding 。ユーザーとして、そして時折寄稿者として話すと、私はそれが非常に便利なツールであることに気づきました。 Scalding APIは、標準のScalaコレクションAPIとの互換性も非常に高いことを意味します。通常のコレクションでflatMap、map、またはgroupByを呼び出すことができるのと同様に、Scaldingパイプでも同じことができます。タプルの分散リストとして想像できます。より強力な型安全性の保証を提供するAPIの型付きバージョンもあります。私はScoobiを使用していませんが、APIはそれらが持っているものと似ているようです。
さらに、他にもいくつかの利点があります。
Scoobi で成功しました。使用するのは簡単で、強く型付けされ、Hadoopの混乱のほとんどを隠し(オブジェクトを自動的にシリアル化するなどのことを行うことで)、完全にScalaです。そのAPIについて私が気に入っていることの1つは、デザイナーがScoobiコレクションを標準のScalaコレクションと同じように感じさせたいということです。したがって、操作が実行されることを除いて、実際にはほとんど同じように使用します。ローカルではなくHadoop。これにより、開発およびテスト中にScoobiコレクションとScalaコレクションを簡単に切り替えることができます。
また、JavaベースのCrunchの上に構築された Scrunch も使用しました。しばらく使用していませんが、現在はApacheの一部です。
別のオプションは Stratosphere です。これは、Scala型をStratosphereの内部データ型に変換する Scala API を提供します。
APIはScaldingと非常に似ていますが、Stratosphereは高度なデータフローをネイティブにサポートしています(したがって、MapReduceジョブをチェーンする必要はありません)。 Stratosphereの方が、Scaldingよりもはるかに優れたパフォーマンスを発揮します。
StratosphereはHadoopMapReduceでは実行されませんが、 Hadoop YARN で実行されるため、 既存のYARNクラスターを使用 で実行できます。
これはStratosphereでの単語カウントの例です(Scala APIを使用):
val input = TextFile(textInput)
val words = input.flatMap { line => line.split(" ") }
val counts = words
.groupBy { Word => Word }
.count()
val output = counts.write(wordsOutput, CsvOutputFormat())
val plan = new ScalaPlan(Seq(output))