我应该为 Spark 选择哪种集群类型?

Which cluster type should I choose for Spark?

我是 Apache Spark 的新手,刚刚了解到 Spark 支持三种类型的集群:

我想我应该先尝试 Standalone。以后需要搭建一个大集群(上百个实例)

我应该选择哪种集群类型?

我认为最好的答案是那些在 Spark 上工作的人。所以,从 Learning Spark

Start with a standalone cluster if this is a new deployment. Standalone mode is the easiest to set up and will provide almost all the same features as the other cluster managers if you are only running Spark.

If you would like to run Spark alongside other applications, or to use richer resource scheduling capabilities (e.g. queues), both YARN and Mesos provide these features. Of these, YARN will likely be preinstalled in many Hadoop distributions.

One advantage of Mesos over both YARN and standalone mode is its fine-grained sharing option, which lets interactive applications such as the Spark shell scale down their CPU allocation between commands. This makes it attractive in environments where multiple users are running interactive shells.

In all cases, it is best to run Spark on the same nodes as HDFS for fast access to storage. You can install Mesos or the standalone cluster manager on the same nodes manually, or most Hadoop distributions already install YARN and HDFS together.

Spark Standalone Manager : Spark 附带的简单集群管理器,可以轻松设置集群。默认情况下,每个应用程序使用集群中的所有可用节点。

几个 benefits YARN over Standalone & Mesos:

  1. YARN 允许您在 运行 在 上的所有框架之间动态共享和集中配置相同的集群资源池纱.

  2. 您可以利用 YARN 调度程序的所有功能对工作负载进行分类、隔离和优先级排序。

  3. Spark 独立模式 要求每个应用程序在集群中的每个节点上运行 一个执行程序;而对于 YARN,您可以选择要使用的执行程序数量

  4. YARN直接处理你请求中的rack和machine locality,很方便。

  5. 奇怪的是,资源请求模型在 Mesos 中倒退了。在 YARN 中,您(框架)请求具有给定规范的容器并提供位置首选项。在 Mesos 中,您可以获得资源 "offers" 并根据您自己的调度策略选择接受或拒绝这些资源。 Mesos 模型可以说更灵活,但对于实施该框架的人来说似乎工作更多。

  6. 如果您已经有一个大型 Hadoop 集群,YARN 是更好的选择。

  7. 独立管理器要求用户使用共享密钥配置每个节点。 Mesos' 默认认证模块,Cyrus SASL,可以替换为自定义模块。 YARN 具有身份验证、服务级别授权、Web 控制台身份验证和数据机密性方面的安全性。 Hadoop 身份验证使用 Kerberos 来验证每个用户和服务是否已通过 Kerberos 进行身份验证。

  8. 所有三个集群管理器都提供高可用性,但 Hadoop YARN 不需要 运行 单独的 ZooKeeper 故障转移控制器。

有用的链接:

spark 文档页面

agildata篇文章

正如其他人提到的那样,Standalone 非常清楚,只有当您只有 spark 工作负载时才应该使用它。

在 yarn 和 mesos 之间,需要考虑的一件事是,与 mapreduce 不同,spark 作业会抓住执行程序并在作业的整个生命周期内保留它。在 mapreduce 中,作业可以在整个生命周期内获取和释放映射器和缩减器。

如果您有很长 运行 的 spark 作业,但在作业的生命周期内没有充分利用它在开始时获得的所有资源,您可能希望将这些资源共享给其他应用程序,并且您可以只能通过 Mesos 或 Spark 动态调度进行。 https://spark.apache.org/docs/2.0.2/job-scheduling.html#scheduling-across-applications 因此对于 yarn,只有使用 spark 提供的动态分配才能为 spark 进行动态分配。 Yarn 不会干涉,而 Mesos 会。同样,只有当您有一个很长的 运行 spark 应用程序并且您希望动态地向上和向下扩展它时,这一点才重要。

Mesos 具有更复杂的调度设计,允许像 Spark 这样的应用程序与其协商。它更适合当今应用程序的多样性。我发现这个网站很有见地:

https://www.oreilly.com/ideas/a-tale-of-two-clusters-mesos-and-yarn

"... YARN 针对调度 Hadoop 作业进行了优化,Hadoop 作业在历史上(现在仍然是典型的)具有长 运行 时间的批处理作业。这意味着 YARN 不是为长运行ning 服务,也不用于短期交互式查询(如小型和快速的 Spark 作业),虽然它可以安排其他类型的工作负载,但这不是一个理想的模型。资源需求、执行模型和架构需求MapReduce 与长期 运行ning 服务(如 Web 服务器或 SOA 应用程序)或实时工作负载(如 Spark 或 Storm 等)的服务非常不同...

在这种情况下以及数据工程中的类似困境中,在选择一种分配方法而不是另一种分配方法之前需要回答许多附带问题。 例如,如果你的处理引擎不是 运行 超过 3 个节点,你通常不会面临太大的问题来处理,所以你在 YARN 和 SparkStandalone 之间的性能调整余量(根据经验)不会澄清你的决定。因为通常您会尝试使您的管道简单,特别是当您的服务不是 self-managed 云并且经常发生错误和故障时。

我为相对较小的或 not-complex 管道选择独立,但如果我感觉不错并且已经有一个 Hadoop 集群,我更愿意利用 Hadoop(Yarn) 可以提供的所有额外配置给我。