83

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

  • 独立 - 意味着 Spark 将管理自己的集群
  • YARN - 使用 Hadoop 的 YARN 资源管理器
  • Mesos - Apache 的专用资源管理器项目

我想我应该先试试Standalone。将来,我需要构建一个大型集群(数百个实例)。

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

4

5 回答 5

77

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

YARN 相对于 Standalone 和 Mesos的一些好处:

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

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

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

  4. YARN直接处理您请求中的机架和机器位置,这很方便。

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

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

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

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

有用的链接:

火花文档页面

敏捷数据文章

于 2016-01-07T14:32:43.493 回答
76

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

如果这是一个新部署,请从独立集群开始。独立模式是最容易设置的,如果您只运行 Spark,它将提供与其他集群管理器几乎所有相同的功能。

如果您想与其他应用程序一起运行 Spark,或者使用更丰富的资源调度功能(例如队列),YARN 和 Mesos 都提供了这些功能。其中,YARN 可能会预装在许多 Hadoop 发行版中。

Mesos 相对于 YARN 和独立模式的一个优势是它的细粒度共享选项,它可以让 Spark shell 等交互式应用程序缩减它们在命令之间的 CPU 分配。这使得它在多个用户运行交互式 shell 的环境中具有吸引力。

在所有情况下,最好在与 HDFS 相同的节点上运行 Spark,以便快速访问存储。您可以手动在相同节点上安装 Mesos 或独立集群管理器,或者大多数 Hadoop 发行版已经将 YARN 和 HDFS 安装在一起。

于 2015-02-23T02:09:19.143 回答
9

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 不会干涉,而 Mesos 会。同样,只有当您有一个长时间运行的 spark 应用程序并且您希望动态地向上和向下扩展它时,这一点才重要。

于 2016-12-08T17:13:21.403 回答
0

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

对于相对较小或不复杂的管道,我选择独立的,但如果我感觉还好并且已经有一个 Hadoop 集群,我更喜欢利用 Hadoop(Yarn) 可以给我的所有额外配置。

于 2022-02-08T21:28:38.680 回答
-2

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

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

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

于 2018-07-03T17:06:02.927 回答