我是 Apache Spark 的新手,我刚刚了解到 Spark 支持三种类型的集群:
- 独立 - 意味着 Spark 将管理自己的集群
- YARN - 使用 Hadoop 的 YARN 资源管理器
- Mesos - Apache 的专用资源管理器项目
我想我应该先试试Standalone。将来,我需要构建一个大型集群(数百个实例)。
我应该选择哪种集群类型?
我是 Apache Spark 的新手,我刚刚了解到 Spark 支持三种类型的集群:
我想我应该先试试Standalone。将来,我需要构建一个大型集群(数百个实例)。
我应该选择哪种集群类型?
Spark Standalone Manager:Spark 附带的简单集群管理器,可以轻松设置集群。默认情况下,每个应用程序都使用集群中的所有可用节点。
YARN 相对于 Standalone 和 Mesos的一些好处:
YARN允许您在YARN上运行的所有框架之间动态共享和集中配置相同的集群资源池。
您可以利用YARN调度程序的所有功能对工作负载进行分类、隔离和优先级排序。
Spark 独立模式要求每个应用程序在集群中的每个节点上运行一个执行器;而使用 YARN,您可以选择要使用的执行器的数量
YARN直接处理您请求中的机架和机器位置,这很方便。
奇怪的是,资源请求模型在Mesos中倒退了。在YARN中,您(框架)请求具有给定规范的容器并给出位置偏好。在 Mesos 中,您可以获得资源“报价”,并根据您自己的调度策略选择接受或拒绝这些资源。Mesos 模型可以说是更灵活,但对于实施框架的人来说似乎需要更多的工作。
如果您已经有一个大型 Hadoop 集群,YARN是更好的选择。
独立管理器要求用户使用共享密钥配置每个节点。Mesos的默认身份验证模块 Cyrus SASL 可以替换为自定义模块。YARN具有身份验证、服务级别授权、Web 控制台身份验证和数据机密性的安全性。Hadoop 身份验证使用 Kerberos 来验证每个用户和服务是否经过 Kerberos 身份验证。
有用的链接:
火花文档页面
敏捷数据文章
我认为最好的答案是那些在 Spark 上工作的人。所以,从学习火花
如果这是一个新部署,请从独立集群开始。独立模式是最容易设置的,如果您只运行 Spark,它将提供与其他集群管理器几乎所有相同的功能。
如果您想与其他应用程序一起运行 Spark,或者使用更丰富的资源调度功能(例如队列),YARN 和 Mesos 都提供了这些功能。其中,YARN 可能会预装在许多 Hadoop 发行版中。
Mesos 相对于 YARN 和独立模式的一个优势是它的细粒度共享选项,它可以让 Spark shell 等交互式应用程序缩减它们在命令之间的 CPU 分配。这使得它在多个用户运行交互式 shell 的环境中具有吸引力。
在所有情况下,最好在与 HDFS 相同的节点上运行 Spark,以便快速访问存储。您可以手动在相同节点上安装 Mesos 或独立集群管理器,或者大多数 Hadoop 发行版已经将 YARN 和 HDFS 安装在一起。
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 应用程序并且您希望动态地向上和向下扩展它时,这一点才重要。
在这种情况下以及数据工程中的类似困境中,在选择一种分布方法而不是另一种分布方法之前,有许多附带问题需要回答。例如,如果您没有在超过 3 个节点上运行您的处理引擎,那么您通常不会面临太大的问题来处理,因此您在 YARN 和 SparkStandalone 之间的性能调整余量(基于经验)不会阐明您的决定。因为通常您会尝试使您的管道变得简单,特别是当您的服务不是由云自行管理并且错误和故障经常发生时。
对于相对较小或不复杂的管道,我选择独立的,但如果我感觉还好并且已经有一个 Hadoop 集群,我更喜欢利用 Hadoop(Yarn) 可以给我的所有额外配置。
Mesos 有更复杂的调度设计,允许像 Spark 这样的应用程序与之协商。它更适合当今应用的多样性。我发现这个网站非常有见地:
https://www.oreilly.com/ideas/a-tale-of-two-clusters-mesos-and-yarn
“... YARN 已针对调度 Hadoop 作业进行了优化,这些作业在历史上(并且仍然通常)是运行时间较长的批处理作业。这意味着 YARN 不是为长时间运行的服务设计的,也不是为短期交互式查询(如小型和快速的 Spark 作业),虽然它可以调度其他类型的工作负载,但这不是一个理想的模型。MapReduce 的资源需求、执行模型和架构需求与长时间运行的服务有很大不同,例如作为 Web 服务器或 SOA 应用程序,或 Spark 或 Storm 等实时工作负载......”