52

Apache Spark 最近将版本更新为 0.8.1,在该yarn-client模式下可用。我的问题是,yarn-client 模式的真正含义是什么?在文档中它说:

使用 yarn-client 模式,应用程序将在本地启动。就像在 Local / Mesos / Standalone 模式下运行应用程序或 spark-shell 一样。启动方法也和他们类似,只要确保当你需要指定主 url 时,使用 “yarn-client” 代替

“本地启动”是什么意思?当地哪里?在 Spark 集群上?
与 yarn-standalone 模式的具体区别是什么?

4

6 回答 6

52

所以在火花中你有两个不同的组件。有司机和工人。在纱线集群模式下,驱动程序在数据节点上远程运行,工作人员在单独的数据节点上运行。在纱线客户端模式下,驱动程序位于启动作业的机器上,工作人员位于数据节点上。在本地模式下,司机和工人在开始工作的机器上。

当您运行 .collect() 时,来自工作节点的数据会被拉入驱动程序。它基本上是最后一点处理发生的地方。

就我自己而言,我发现当我在家使用 vpn 时,纱线集群模式会更好,但当我在数据中心内运行代码时,纱线客户端模式会更好。

Yarn-client 模式还意味着您可以为驱动程序少占用一个工作节点。

于 2015-05-12T03:02:16.083 回答
50

一个 Spark 应用程序由一个驱动程序和一个或多个执行程序组成。驱动程序是主程序(实例化的地方SparkContext),它协调执行程序以运行 Spark 应用程序。执行器运行由驱动程序分配的任务。

YARN 应用程序具有以下角色:yarn 客户端、yarn 应用程序主控器和在节点管理器上运行的容器列表。

当 Spark 应用程序在 YARN 上运行时,它有自己的 YARN 客户端和 YARN 应用程序主控实现。

在这些背景下,主要区别在于驱动程序运行的位置。

  1. Yarn 独立模式:您的驱动程序作为 yarn application master 的线程运行,它本身在集群中的一个节点管理器上运行。Yarn 客户端只是从应用程序主机中提取状态。此模式与 mapreduce 作业相同,其中 MR 应用程序主机协调容器以运行 map/reduce 任务。
  2. Yarn客户端模式:你的驱动程序运行在你输入命令提交spark应用程序的yarn客户端上(可能不是yarn集群中的机器)。在这种模式下,虽然驱动程序运行在客户端机器上,但任务是在 YARN 集群的节点管理器中的执行器上执行的。

参考:http ://spark.incubator.apache.org/docs/latest/cluster-overview.html

于 2014-01-08T16:03:19.327 回答
30

运行的 Spark 应用程序

纱线客户端模式:

  1. 驱动程序在客户端机器或应用程序已启动的本地机器中运行。

  2. 资源分配由 YARN 资源管理器根据数据节点上的数据局部性完成,本地机器的驱动程序将控制 Spark 集群上的执行器(节点管理器)。

请参阅此 cloudera文章以获取更多信息。

Standalone模式和yarn部署模式的区别,

  1. 资源优化在独立模式下效率不高。
  2. 在独立模式下,驱动程序在集群的每个节点中启动一个执行程序,而与数据位置无关。
  3. 独立适用于仅执行 Spark 应用程序且集群不需要以有效方式为其他作业分配资源的用例。

在此处输入图像描述

于 2016-08-26T02:10:17.323 回答
14

spark 和 yarn 都是分布式框架,但作用不同:

Yarn 是一个资源管理框架,对于每个应用程序,它具有以下角色:

ApplicationMaster:单个应用程序的资源管理,包括从 Yarn 请求/释放资源用于应用程序和监视器。

尝试:尝试只是一个正常的过程,它完成了应用程序的整个工作的一部分。例如,一个由多个 mapper 和 reducer 组成的 mapreduce 作业,每个 mapper 和 reducer 都是一个 Attempt。

将应用程序升级到 yarn 的常见过程是:

  1. 客户端向 yarn 提交应用请求。在请求中,Yarn 应该知道 ApplicationMaster 类;对于 SparkApplication,它是 org.apache.spark.deploy.yarn.ApplicationMaster,对于 MapReduce 作业,它是org.apache.hadoop.mapreduce.v2.app.MRAppMaster

  2. Yarn 为 ApplicationMaster 进程分配一些资源,并在其中一个集群节点中启动 ApplicationMaster 进程;

  3. ApplicationMaster 启动后,ApplicationMaster 会为这个Application 向Yarn 申请资源并启动worker;

对于分布式计算框架 Spark 来说,一个计算作业被分成许多小任务,每个 Executor 将负责每个任务,Driver 将收集所有 Executor 任务的结果并得到一个全局结果。Spark 应用程序只有一个驱动程序和多个执行程序。

那么,当 Spark 使用 Yarn 作为集群中的资源管理工具时,问题就来了:

  • 在 Yarn Cluster 模式下,Spark 客户端会向 yarn 提交 Spark 应用程序,Spark Driver 和 Spark Executor 都在 yarn 的监督之下。在yarn看来,Spark Driver和Spark Executor没有区别,都是普通的java进程,即一个application worker进程。因此,当客户端进程消失时,例如客户端进程被终止或杀死,纱线上的 Spark 应用程序仍在运行。

  • 在 yarn 客户端模式下,只有 Spark Executor 处于
    yarn 的监督之下。Yarn ApplicationMaster 将为 spark executor 请求资源。驱动程序运行在与yarn无关的客户端进程中,只是一个向yarn提交应用程序的进程。因此,当客户端离开时,例如客户端
    进程退出,驱动程序关闭,计算终止。

于 2017-08-18T10:44:21.457 回答
9

首先,让我们弄清楚以独立模式运行 Spark 和在集群管理器(Mesos 或 YARN)上运行 Spark 有什么区别。


在独立模式下运行 Spark 时,您有:

  • Spark 主节点
  • 一些 Spark slaves 节点,它们已经在 Spark master 上“注册”了

所以:

  • 主节点将执行 Spark 驱动程序,将任务发送给执行程序,还将执行任何资源协商,这是非常基本的。例如,默认情况下,每个作业都会消耗所有现有资源。
  • 从节点将运行 Spark 执行器,运行从驱动程序提交给它们的任务。

当使用集群管理器时(我将描述 YARN,这是最常见的情况),你有:

  • YARN 资源管理器(持续运行),它接受对新应用程序和新资源(YARN 容器)的请求
  • 多个 YARN 节点管理器(持续运行),由工作人员池组成,资源管理器将在其中分配容器。
  • Application Master(在 YARN 应用程序期间运行),负责从资源管理器请求容器并将命令发送到分配的容器。

请注意,在这种情况下有 2 种模式:cluster-modeclient-mode. 在客户端模式下,也就是你提到的那个:

  • Spark 驱动程序将在执行命令的机器中运行。
  • Application Master 将在集群中分配的容器中运行。
  • Spark 执行器将在分配的容器中运行。
  • Spark 驱动程序将负责指示 Application Master 请求资源并向分配的容器发送命令,接收它们的结果并提供结果。

所以,回到你的问题:

“本地启动”是什么意思?当地哪里?在 Spark 集群上?

本地意味着在您正在执行命令的服务器中(可能是 aspark-submit或 a spark-shell)。这意味着您可以在集群的主节点中运行它,或者您也可以在集群外部的服务器(例如您的笔记本电脑)中运行它,只要适当的配置到位,以便该服务器可以与集群通信并反之亦然。

与 yarn-standalone 模式的具体区别是什么?

如上所述,不同之处在于,在独立模式下,根本没有集群管理器。本文对每种模式的所有差异进行了更详细的分析和分类。

于 2018-03-30T16:20:08.360 回答
5

使用 yarn-client 模式,您的 spark 应用程序正在本地机器上运行。在 yarn-standalone 模式下,您的 spark 应用程序将作为 yarn ApplicationMaster 提交给 YARN 的 ResourceManager,并且您的应用程序在运行 ApplicationMaster 的 yarn 节点中运行。在这两种情况下,yarn 都充当 spark 的集群管理器。您的应用程序(SparkContext)将任务发送到纱线。

于 2014-01-08T10:44:57.590 回答