让Spark运行在YARN上(Spark on YARN)

在Spark Standalone模式下,集群资源调度由Master节点负责。Spark也可以将资源调度交给YARN来负责,其好处是YARN支持动态资源调度。Standalone模式只支持简单的固定资源分配策略,每个任务固定数量的core,各Job按顺序依次分配资源,资源不够时排队等待。这种策略适用单用户的场景,但在多用户时,各用户的程序差别很大,这种简单粗暴的策略很可能导致有些用户总是分配不到资源,而YARN的动态资源分配策略可以很好地解决这个问题。关于资源调度,第3章中还会详细讲解。

另外,YARN作为通用的资源调度平台,除了为Spark提供调度服务外,还可以为其他子系统(比如Hadoop MapReduce、Hive)提供调度,这样由YARN来统一为集群上的所有计算负载分配资源,可以避免资源分配的混乱无序。

在Spark Standalone集群部署完成之后,配置Spark支持YARN就相对容易多了,只需要进行如下两步操作。

(1) 在conf/spark-env.sh中增加一项配置HADOOP_CONF_DIR,指向Hadoop集群的配置文件目录,比如:

export HADOOP_CONF_DIR=/usr/local/rt_cluster/hadoop-2.6.0/conf

这里配置同样需要分发至所有节点。

(2) 重启集群。

另外,即便不部署Hadoop集群,Spark程序还是可以访问HDFS文件的:添加一些依赖的jar文件,然后通过以hdfs://开头的完整路径即可。但缺点也很明显,因为HDFS与Spark节点是分离的,数据移动成本很高,大部分情况下都会大于计算成本,因此应用的局限性很明显,不适合大数据量时的计算。

经过上述的部署,Spark可以很方便地访问HDFS上的文件,而且Spark程序在计算时,也会让计算尽可能地在数据所在的节点上进行,节省移动数据导致的网络IO开销。

Spark程序由Master还是YARN来调度执行,是由Spark程序在提交时决定的。以计算圆周率Pi的示例程序为例,Spark程序的提交方式是:

$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
    --master spark://<active-master-ip>:<port> \
    lib/spark-examples*.jar \
    10

其中参数--master决定调度方式:如果该参数的值以spark://开头,则使用Spark自己的Master节点来调度;如果其值是yarn-clientyarn-cluster,则是使用YARN来调度,而YARN的具体地址会从前面配置的Hadoop配置目录下的配置文件中得到。

YARN调度有如下两种模式。

  • yarn-cluster模式。YARN会先在集群的某个节点上为Spark程序启动一个称作Master的进程,然后Driver程序会运行在这个Master进程内部,由这个Master进程来启动Driver程序,客户端完成提交的步骤后就可以退出,不需要等待Spark程序运行结束。这是一种非常适合生产环境的运行方式。
  • yarn-client模式。跟yarn-cluster模式类似,这也有一个Master进程,但Driver程序不会运行在Master进程内部,而是运行在本地,只是通过Master来申请资源,直至程序运行结束。这种模式非常适合需要交互的计算。

Spark程序在运行时,大部分计算负载由集群提供,但Driver程序本身也会有一些计算负载。在yarn-cluster模式下,Driver进程在集群中的某个节点上运行,基本不占用本地资源。而在yarn-client模式下,Driver会对本地资源造成一些压力,但优势是Spark程序在运行过程中可以进行交互。所以,建议只在有交互需求的情况下才使用yarn-client模式,其他都使用yarn-cluster模式。

下面还是以计算圆周率为例来说明,因为不需要本地交互,所有可以使用yarn-cluster模式来运行:

$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
    --master yarn-cluster \
    lib/spark-examples*.jar \
    10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2586
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2717
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4737
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2988
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4928
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6948
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2192
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4878
来自专栏落花落雨不落叶

canvas画简单电路图

63311
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2070

扫码关注云+社区