部署 Spark 的最佳方式?

Best way to deploy Spark?

在 YARN 或 EMR 而非 EC2 之上部署 Spark 是否有实质性优势?这将主要用于研究和原型设计,并且可能使用 Scala。我们不愿意不使用 EC2 主要是因为其他选项涉及额外的基础设施和复杂性,但也许它们也提供了实质性的好处?

我们主要是 reading/writing 数据 from/to S3。

EMR 是 "same" EC2 但安装了 Hadoop。如果您不需要 Hive/Pig 或 Hadoop 本身,那么我认为您将免费支付 EMR 的额外费用。结论:如果你只需要 Spark 更好地使用 EC2,你可以用 "a couple of clicks" 得到一个带有 SPARK 的集群。只需要使用:spark-ec2脚本即可获取:

另一件事是当您说 YARN 时……我认为您误解了以下概念:EC2、EMR 和 YARN。我自己解释一下:YARN(Yet Another Resource Negotiator)是 SPARK 在大型机器集群上使用的两个选项之一 运行。您可以使用 Spark on Mesos or Spark on Yarn

请参考这里:http://radar.oreilly.com/2015/02/a-tale-of-two-clusters-mesos-and-yarn.html

我们在 spot 实例上生成的 mesos 集群上的 Spark 在哪里使用,这使得它非常昂贵。

此外,如果您使用 Spark 访问 S3,您可能需要使用 DirectOutputCommitter,它可以消除写入 Hadoop 时所需的一些开销

让我们区分不同的层: 有基础设施层,即 spark 作业应该在哪些(虚拟)机器上 运行。潜在的选择包括本地机器集群或从 EC2 租用的虚拟机集群。 特别是在写入大量数据 from/to S3 时,EC2 可能是一个不错的选择,因为这两种服务都很好地集成并且通常 运行 在相同的数据中心(为您提供更好的网络性能)。

然后第二层 software/scheduling 在上面,即什么软件连接所有这些机器以安排和 运行 你的 spark 作业。 这里的选项包括 Yarn (being the scheduler from the Hadoop project), Mesos (a general purpose scheduler being able to also handle non-hadoop workloads), and Myriad(本质上是 Mesos 上的 Yarn)。

可以找到 Yarn 和 Mesos 之间很好的比较 here

EMR 为您提供了轻松启动 Hadoop/YARN 集群的选项。甚至存在 bootstrap 操作让你 install spark 在这样的集群上。

希望这有助于回答您的问题!