【问题标题】:what are the options for hadoop on scalascala 上的 hadoop 有哪些选项
【发布时间】:2013-01-30 04:04:37
【问题描述】:

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

【问题讨论】:

    标签: scala hadoop mapreduce jvm-languages


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            另一个选项是Stratosphere,它提供了一个Scala API,可以将Scala 类型转换为Stratosphere 的内部数据类型。

            API 与 Scalding 非常相似,但 Stratosphere 本身支持高级数据流(因此您不必链接 MapReduce 作业)。与使用 Scalding 相比,使用 Stratosphere 的性能要好得多。

            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))
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-01-27
              • 2015-11-16
              • 1970-01-01
              • 1970-01-01
              • 2022-12-21
              相关资源
              最近更新 更多