什么是Spark中的纱线客户端模式?

时间:2013-12-27 01:56:08

标签: yarn apache-spark

Apache Spark最近将版本更新为0.8.1,其中yarn-client模式可用。我的问题是,纱线客户端模式究竟意味着什么?在文档中说:

  

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

“本地推出”是什么意思?在哪里?在Spark集群上?
与纱线独立模式的具体区别是什么?

6 个答案:

答案 0 :(得分:43)

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

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

当Spark应用程序在YARN上运行时,它有自己的yarn client和yarn application master实现。

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

  1. 纱线独立模式:您的驱动程序作为纱线应用程序主机的一个线程运行,它本身在群集中的一个节点管理器上运行。 Yarn客户端只从应用程序主机中提取状态。此模式与mapreduce作业相同,MR应用程序主机协调容器以运行map / reduce任务。
  2. 纱线客户端模式:您的驱动程序正在纱线客户端上运行,您可以在其中键入提交火花应用程序的命令(可能不是纱线群集中的机器)。在此模式下,尽管驱动程序在客户端计算机上运行,​​但任务仍在YARN群集的节点管理器中的执行程序上执行。
  3. 参考:http://spark.incubator.apache.org/docs/latest/cluster-overview.html

答案 1 :(得分:43)

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

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

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

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

答案 2 :(得分:27)

中运行的Spark应用程序

yarn-client模式:

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

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

  3. 请参阅此cloudera article以获取更多信息。

    独立模式和纱线部署模式之间的区别,

    1. 资源优化在独立模式下无效。
    2. 在独立模式下,驱动程序在群集的每个节点中启动执行程序,而不管数据位置如何。
    3. standalone适用于用例,其中只有您的spark应用程序正在执行,并且集群不需要以有效的方式为其他作业分配资源。
    4. enter image description here

答案 3 :(得分:11)

火花和纱线都是分布式框架,但它们的作用是不同的:

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

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

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

将应用程序应用于纱线的常见过程是:

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

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

  3. ApplicationMaster启动后,ApplicationMaster将从Yarn请求此应用程序的资源并启动工作人员;

  4. 对于Spark,分布式计算框架,计算任务分为许多小任务,每个Executor将负责每个任务,Driver将收集所有Executor任务的结果并获得全局结果。 spark应用程序只有一个带有多个执行程序的驱动程序。

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

    • 在Yarn Cluster模式下,Spark客户端将提交spark应用程序 纱线,Spark Driver和Spark Executor都在监督之下 纱线从纱线的角度来看,Spark Driver和Spark Executor都有 没有区别,但正常的java进程,即一个应用程序 工人流程。因此,当客户端进程消失时,例如客户端 过程终止或终止,纱线上的Spark应用程序是 还在跑步。

    • 在纱线客户端模式下,只有Spark Executor位于中 纱线监督。 Yarn ApplicationMaster将请求资源 只是火花执行者。驱动程序正在客户端中运行 与纱线无关的过程,只是提交过程 应用于纱线。因此,当客户离开时,例如客户
      进程退出,驱动程序关闭,计算终止。

答案 4 :(得分:5)

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

答案 5 :(得分:3)

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

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

  • Spark主节点
  • 一些Spark Slaves节点,已注册"与Spark大师

所以:

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

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

  • YARN资源管理器(不断运行),接受新应用程序和新资源(YARN容器)的请求
  • 多个YARN节点管理器(不断运行),由工作池组成,资源管理器将在其中分配容器。
  • 应用程序主服务器(在YARN应用程序的持续时间内运行),负责从资源管理器请求容器并将命令发送到分配的容器。

请注意,在这种情况下有两种模式:cluster-modeclient-mode。在客户端模式中,您提到的是:

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

所以,回到你的问题:

  

这是什么意思"在本地推出"?在哪里?在火花上   集群?

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

  

纱线独立模式的具体区别是什么?

如上所述,不同之处在于独立模式下根本没有集群管理器。此article中提供了针对每种模式具体分析和分类所有差异的详细信息。