我们正在启动一个基于大数据的分析项目,并且我们正在考虑采用 scala(类型安全堆栈)。我想知道可用于执行 hadoop、map reduce 程序的各种 scala API/项目。
5 回答
绝对检查烫伤。作为用户和偶尔的贡献者,我发现它是一个非常有用的工具。Scalding API 也意味着与标准 Scala 集合 API 非常兼容。就像你可以在普通集合上调用 flatMap、map 或 groupBy 一样,你可以在 scalding Pipes 上做同样的事情,你可以把它想象成一个分布式的元组列表。还有一个 API 的类型化版本,它提供了更强的类型安全保证。我没有使用 Scoobi,但 API 看起来与他们所拥有的相似。
此外,还有一些其他好处:
- Scalding 在 Twitter 的生产中大量使用,并且已经在 Twitter 规模的数据集上进行了实战测试。
- 它在 Twitter 内部和外部都有几个积极的贡献者,他们致力于让它变得更好。
- 它可以与您现有的 Cascading 作业互操作。
- 除了 Typed API 之外,它还有一个 Fields API,对于 R 和数据框架框架的用户来说可能更熟悉。
- 它提供了一个强大的矩阵库。
我在Scoobi上取得了成功。它使用简单,强类型,隐藏了大部分 Hadoop 混乱(通过为您自动序列化您的对象之类的事情),并且完全是 Scala。我喜欢它的 API 的一件事是设计者希望 Scoobi 集合感觉就像标准的 Scala 集合,所以你实际上以几乎相同的方式使用它们,除了操作在 Hadoop 上而不是在本地运行。这实际上使得在开发和测试时在 Scoobi 集合和 Scala 集合之间切换变得非常容易。
我还使用了 Scrunch,它建立在基于 Java 的 Crunch 之上。我有一段时间没有使用它了,但它现在是 Apache 的一部分。
另一个选择是Stratosphere,它提供了一个Scala API,可以将 Scala 类型转换为 Stratosphere 的内部数据类型。
API 与 Scalding 非常相似,但 Stratosphere 本身支持高级数据流(因此您不必链接 MapReduce 作业)。使用 Stratosphere 将比使用 Scalding 获得更好的性能。
Stratosphere 不在 Hadoop MapReduce 上运行,而是在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))