我们正在开始一个基于大数据的分析项目,我们正在考虑采用scala(类型安全堆栈)。我想知道各种scala API /项目可用于做hadoop,map reduce程序。
答案 0 :(得分:20)
绝对查看Scalding。作为用户和偶尔的撰稿人,我发现它是一个非常有用的工具。 Scalding API也与标准Scala集合API非常兼容。正如您可以在普通集合上调用flatMap,map或groupBy一样,您可以在烫印管道上执行相同操作,您可以将其视为分布式元组列表。还有一个API的类型版本,提供更强的类型安全保证。我没有使用过Scoobi,但API看起来与它们的相似。
此外,还有一些其他好处:
答案 1 :(得分:8)
我在Scoobi取得了成功。它很容易使用,强类型,隐藏大部分Hadoop混乱(通过做自动序列化对象的事情),以及完全Scala。我喜欢它的API的一个原因是设计人员希望Scoobi集合感觉就像标准的Scala集合一样,所以你实际上以相同的方式使用它们,除了操作在Hadoop而不是本地运行。这实际上使您在开发和测试时可以很容易地在Scoobi集合和Scala集合之间切换。
我还使用了Scrunch,它建立在基于Java的Crunch之上。我有一段时间没有使用它,但它现在是Apache的一部分。
答案 2 :(得分:4)
Twitter正在为Scalding投入大量精力,包括一个可用于各种机器学习任务的漂亮的Matrix库。我也需要尝试一下Scoobi。
为了完整起见,如果您没有结合MapReduce,请查看Spark项目。它在许多场景中表现得更好,包括在他们的Hive to Spark端口中,适当地称为Shark。作为一个频繁的Hive用户,我对此感到很兴奋。
答案 3 :(得分:1)
答案 4 :(得分:1)
另一个选项是Stratosphere,它提供了Scala API,可将Scala类型转换为Stratosphere的内部数据类型。
API与Scalding非常相似,但Stratosphere本身支持高级数据流(因此您不必链接MapReduce作业)。与Stalosphere相比,你的表现要好于Scalding。
Stratosphere不会在Hadoop MapReduce上运行,而是在Hadoop YARN上运行,因此您可以use your existing YARN cluster。
这是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))