让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 条评论
登录 后参与评论

相关文章

来自专栏数据之美

windows 安装 spark 及 pycharm 调试 TopN 实例

首先声明本文搭建的环境为:windows8.1 + spark1.6.0 + python2.7 + jdk8,spark on windows 对 windo...

2676
来自专栏行者悟空

Spark的容错机制

1574
来自专栏积累沉淀

30分钟--Spark快速入门指南

Spark快速入门指南 – Spark安装与基础使用  2016-01-15 (updated: 2016-03-07) 6309 29 Apache Spa...

2909
来自专栏Hadoop实操

如何使用Cloudera Manager启用YARN的HA

前面Fayson写过《如何使用Cloudera Manager启用HDFS的HA》,YARN的HA架构和HDFS的HA类似,需要启动两个ResourceMana...

3759
来自专栏闵开慧

job监控与hadoop权限管理

监测Hadoop控制中心及作业运行状况 MapReduce框架由一个单独的Master JobTracker和集群节点上的Slave TaskTracker共...

35112
来自专栏Albert陈凯

3.2 Spark调度机制

3.2 Spark调度机制 Spark调度机制是保证Spark应用高效执行的关键。本节从Application、job、stage和task的维度,从上层到底层...

2887
来自专栏Netkiller

Apache Hive 快速入门

本文节选自《Netkiller Database 手札》 CentOS 7.3 + Server JRE 1.8 + Hadoop-2.8.0 + Hive-...

2817
来自专栏https://www.cnblogs.com/L

【Spark篇】---Spark中资源和任务调度源码分析与资源配置参数应用

Spark中资源调度是一个非常核心的模块,尤其对于我们提交参数来说,需要具体到某些配置,所以提交配置的参数于源码一一对应,掌握此节对于Spark在任务执行过程中...

1223
来自专栏别先生

Hbase启动hbase shell运行命令报Class path contains multiple SLF4J bindings.错误

1:Hbase启动hbase shell运行命令报Class path contains multiple SLF4J bindings.错误,是因为jar包冲...

3536
来自专栏庄涵的专栏

图文解析spark2.0核心技术

spark2.0于2016-07-27正式发布,伴随着更简单、更快速、更智慧的新特性,spark 已经逐步替代 hadoop 在大数据中的地位,成为大数据处理的...

2K1

扫码关注云+社区