24

我们正在启动一个基于大数据的分析项目,并且我们正在考虑采用 scala(类型安全堆栈)。我想知道可用于执行 hadoop、map reduce 程序的各种 scala API/项目。

4

5 回答 5

20

绝对检查烫伤。作为用户和偶尔的贡献者,我发现它是一个非常有用的工具。Scalding API 也意味着与标准 Scala 集合 API 非常兼容。就像你可以在普通集合上调用 flatMap、map 或 groupBy 一样,你可以在 scalding Pipes 上做同样的事情,你可以把它想象成一个分布式的元组列表。还有一个 API 的类型化版本,它提供了更强的类型安全保证。我没有使用 Scoobi,但 API 看起来与他们所拥有的相似。

此外,还有一些其他好处:

  • Scalding 在 Twitter 的生产中大量使用,并且已经在 Twitter 规模的数据集上进行了实战测试。
  • 它在 Twitter 内部和外部都有几个积极的贡献者,他们致力于让它变得更好。
  • 它可以与您现有的 Cascading 作业互操作。
  • 除了 Typed API 之外,它还有一个 Fields API,对于 R 和数据框架框架的用户来说可能更熟悉。
  • 它提供了一个强大的矩阵库
于 2013-03-05T21:58:54.790 回答
8

我在Scoobi上取得了成功。它使用简单,强类型,隐藏了大部分 Hadoop 混乱(通过为您自动序列化您的对象之类的事情),并且完全是 Scala。我喜欢它的 API 的一件事是设计者希望 Scoobi 集合感觉就像标准的 Scala 集合,所以你实际上以几乎相同的方式使用它们,除了操作在 Hadoop 上而不是在本地运行。这实际上使得在开发和测试时在 Scoobi 集合和 Scala 集合之间切换变得非常容易。

我还使用了 Scrunch,它建立在基于 Java 的 Crunch 之上。我有一段时间没有使用它了,但它现在是 Apache 的一部分。

于 2013-01-30T06:33:38.340 回答
4

Twitter 在 Scalding 上投入了大量精力,包括一个不错的 Matrix 库,可用于各种机器学习任务。我也需要试试 Scoobi。

为了完整起见,如果您不喜欢 MapReduce,请查看Spark项目。它在许多场景中的表现要好得多,包括在他们的 Hive 到 Spark 的端口中,适当地称为Shark。作为 Hive 的频繁用户,我对此感到很兴奋。

于 2013-01-30T14:11:34.593 回答
1

我可能会研究的前两个是Scalding(建立在Cascading之上)和Scoobi。不过,我也没有使用过,但特别是 Scalding,看起来它提供了一个非常好的 API。

于 2013-01-30T04:34:55.787 回答
1

另一个选择是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))
于 2014-01-03T10:51:31.457 回答