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


76

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

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

由于我是Spark的新手,所以我认为我应该先尝试Standalone。但是我不知道推荐哪个。说,将来我需要构建一个大型集群(数百个实例),我应该选择哪种集群类型?

Answers:


74

我认为最好的答案是使用Spark的人员。因此,从Learning Spark

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

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

与YARN和独立模式相比,Mesos的一个优势是其细粒度的共享选项,该选项使交互式应用程序(例如Spark Shell)可以缩小命令之间的CPU分配。这使得它在多个用户正在运行交互式外壳程序的环境中具有吸引力。

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


12
“ Mesos与YARN和独立模式相比的一个优势是它的细粒度共享选项”:从Apache Spark 2.0.0开始不再支持细粒度共享
jgp

写得好,再说一点,独立集群仅支持python应用程序的客户端模式。
雏菊QL

70

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

YARN优于Standalone和Mesos的一些优点

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

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

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

  4. YARN可以根据您的要求直接处理机架和机器的本地位置,这很方便。

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

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

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

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

有用的链接:

Spark文档页面

agildata文章


1
桌子上没有提到Mesos。YARN群集和YARN客户端令人困惑。
flyrain

该表格不适
Ruslan

删除桌子
Ravindra babu

删除了我的减号:-)
Ruslan

“ Spark独立模式要求每个应用程序在集群中的每个节点上运行执行程序;而对于YARN,您选择要使用的执行程序数量”对于Spark 2.0及更高版本,此语句是否仍然适用?我知道在1.4之前是对的,但此后我看到了相互冲突的帐户。
Blaisem

9

独立运行非常清楚,正如其他人提到的那样,仅在只有火花工作负载时才应使用独立运行。

在纱线和中观之间,要考虑的一件事是,与mapreduce不同,spark作业会抓住执行者并将其保留在整个作业生命周期中。在mapreduce中的某个工作可以在整个生命周期中获得并释放mapper和reducers。

如果您运行的Spark作业运行时间较长,而在作业的生命周期中并未充分利用开始时获得的所有资源,则您可能希望将这些资源共享给其他应用,并且只能通过Mesos或Spark动态调度来执行。https://spark.apache.org/docs/2.0.2/job-scheduling.html#scheduling-across-applications 因此,对于yarn,只有针对spark进行动态分配的唯一方法是使用spark提供的动态分配。而Mesos会干扰纱线。同样,仅当您有一个运行时间很长的spark应用程序并且想要动态地放大和缩小它时,这一点才重要。


-2

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

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

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


1
该版本(2/2015)指的是Hadoop 2.x的早期版本,由于YARN调度在过去三年中发生了很大变化,以Hadoop 2.x和3.x次安全版本为目标,因此现在已完全不合时宜。其他问题和当前的YARN设计几乎与早期的MapReduce体系结构无关。–
路易斯·巴斯克斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.