79

Spark Standalone 模式下,有主节点和工作节点。

这里有几个问题:

  1. 2 个工作实例是否意味着一个具有 2 个工作进程的工作节点?
  2. 是每个工作程序实例都为特定应用程序(管理存储、任务)持有一个执行程序,还是一个工作程序节点持有一个执行程序?
  3. 是否有解释 spark 在运行时如何工作的流程图,例如字数?
4

4 回答 4

60

我建议先阅读Spark 集群文档,但更重要的是这篇Cloudera 博客文章解释了这些模式。

您的第一个问题取决于“实例”的含义。节点是一台机器,没有充分的理由在每台机器上运行多个工作人员。因此,两个工作节点通常意味着两台机器,每台机器都是 Spark 工作人员。

对于许多应用程序,工人拥有许多执行者。一个应用程序有许多工人的执行者。

你的第三个问题不清楚。

于 2014-07-11T13:53:36.457 回答
56

扩展到其他很好的答案,我想用几张图片来描述。

在 Spark Standalone 模式下,有主节点和工作节点。

如果我们在一个地方同时代表 master 和 worker(如果 CPU 和内存可用,每个 worker 可以有多个 executor)以用于独立模式。

Spark 独立模式

如果您对 Spark 如何与 YARN 一起工作感到好奇?在 YARN 上查看这篇文章Spark

1. 两个worker实例是指一个worker节点有两个worker进程吗?

一般来说,我们称worker实例为slave,因为它是一个执行spark tasks/jobs的进程。节点(物理机或虚拟机)和工作人员的建议映射是,

1 Node = 1 Worker process

2. 每个工作程序实例是否为特定应用程序(管理存储、任务)持有一个执行程序,还是一个工作程序节点持有一个执行程序?

是的,如果一个工作节点有足够的 CPU、内存和存储,它可以拥有多个执行程序(进程)。

检查给定图像中的 Worker 节点。 集群中的 Worker 节点

顺便说一句,在给定时间点,工作节点中的执行程序数量完全取决于集群上的工作负载节点运行多少执行程序的能力。

3. 是否有流程图说明 spark 运行时如何?

如果我们从 Spark 的角度来看一个程序的任何资源管理器的执行,其中join两个rdds 并执行一些reduce操作然后filter

示例代码的 Spark 运行时

HIH

于 2017-12-07T07:07:58.420 回答
33

我知道这是一个老问题,肖恩的回答非常好。我的文章是关于MrQuestion评论中的 SPARK_WORKER_INSTANCES。如果你使用 Mesos 或 YARN 作为集群管理器,你可以在同一台机器上运行多个 executor,只有一个 worker,因此实际上没有必要在每台机器上运行多个 worker。但是,如果您使用独立的集群管理器,目前它仍然只允许每个物理机器上的每个工作进程有一个执行器。因此,如果您有一台超大型机器并想在其上运行多个执行器,则必须启动多个工作进程。这就是spark-env.sh中的SPARK_WORKER_INSTANCES的用途。默认值为 1。如果您使用此设置,请确保设置SPARK_WORKER_CORES明确限制每个工人的核心,否则每个工人将尝试使用所有核心。

这种独立的集群管理器限制应该很快就会消失。根据此SPARK-1706,此问题将在 Spark 1.4 中修复并发布。

于 2015-04-21T18:22:06.993 回答
8

正如 Lan 所说,使用多个工作实例仅在独立模式下相关。您想要多个实例的原因有两个:(1) 垃圾暂停收集器可能会损害大型 JVM 的吞吐量 (2) >32 GB 的堆大小不能使用 CompressedOoops

阅读有关如何设置多个工作实例的更多信息。

于 2015-06-05T08:47:15.070 回答