Spark on YARN

举报
Smy1121 发表于 2019/06/22 15:32:03 2019/06/22
【摘要】 Apache Hadoop YARN(Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

YARN概述


YARN是什么

        Apache Hadoop YARN(Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。


YARN在Hadoop生态系统中的位置:

image.png


YARN产生的背景

        随着互联网高速发展导致数据量剧增,MapReduce 这种基于磁盘的离线计算框架已经不能满足应用要求,从而出现了一些新的计算框架以应对各种场景,包括内存计算框架、流式计算框架和迭代式计算框架等,而MRv1 不能支持多种计算框架并存。

image.png

image.png


YARN基本架构YARN基本架构

image.png


ResourceManager(RM)


ResourceManager负责集群资源的统一管理和调度,承担了 JobTracker 的角色,整个集群只有“一个”,总的来说,RM有以下作用:

1.处理客户端请求

2.启动或监控ApplicationMaster

3.监控NodeManager

4.资源的分配与调度


NodeManager(NM)

NodeManager管理YARN集群中的每个节点。NodeManager 提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康。MRv1 通过slot管理 Map 和 Reduce 任务的执行,而 NodeManager 管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。


NM有以下作用:

1.管理单个节点上的资源

2.处理来自ResourceManager的命令

3.处理来自ApplicationMaster的命令


ApplicationMaster(AM)

每个应用有一个,负责应用程序的管理 。ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源使用(CPU、内存等的资源分配)。请注意,尽管目前的资源更加传统(CPU 核心、内存),但未来会支持新资源类型(比如图形处理单元或专用处理设备)。


AM有以下作用:

1.负责数据的切分

2.为应用程序申请资源并分配给内部的任务

3.任务的监控与容错


Container

●Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。Container有以下作用:

1.对任务运行环境进行抽象,封装CPU、内存等多维度的资源以及环境变量、启动命令等任务运行相关的信息


Spark on YARN配置与部署

编译时包含YARN:

mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.7.1 -Phive -Phive-thriftserver -Psparkr -DskipTests clean package


/make-distribution.sh --name hadoop2.7.1 --tgz -Psparkr -Phadoop-2.6 -Dhadoop.version=2.7.1 -Phive -Phive-thriftserver –Pyarn


注意:

hadoop的版本跟你使用的hadoop要对应,建议使用CDH或者HDP的hadoop发行版,对应关系已经处理好了。

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"



Spark on YARN的安装

Spark On YARN安装非常简单,只需要下载编译好的Spark安装包,在一台带有Hadoop Yarn客户端的机器上解压即可


基本配置


配置HADOOP_CONF_DIR或者YARN_CONF_DIR环境变量,让Spark知道Yarn的配置信息。有三种方式:

配置在spark-env.sh中

在提交Spark应用之前export

配置到操作系统的环境变量中


如果使用的是HDP,请在spark-defaults.conf中加入:

spark.driver.extraJavaOptions -Dhdp.version=current

spark.yarn.am.extraJavaOptions -Dhdp.version=current

spark-shell运行在YARN上


登陆安装Spark那台机器

./spark-shell --master yarn

提交Spark job给YARN

./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster [options] [app options]


例子:

./spark-submit --master yarn --class com.dajiangtai.spark.MyWordCout ~/learning-saprk-1.0-SNAPSHOT.jar /tmp/test /tmp/output



Spark on YARN运行架构解析

回顾Spark基本工作流程


        以SparkContext为程序运行的总入口,在SparkContext的初始化过程中,Spark会分别创建DAGScheduler作业调度和TaskScheduler任务调度两级调度模块。其中作业调度模块是基于任务阶段的高层调度模块,它为每个Spark作业计算具有依赖关系的多个调度阶段(通常根据shuffle来划分),然后为每个阶段构建出一组具体的任务(通常会考虑数据的本地性等),然后以TaskSets(任务组)的形式提交给任务调度模块来具体执行。而任务调度模块则负责具体启动任务、监控和汇报任务运行情况。

image.png


YARN standalone/YARN cluster


YARN standalone是0.9及之前版本的叫法,1.0开始更名为YARN cluster


yarn-cluster(YarnClusterScheduler)


Driver和AM运行在起,Client单独的:

./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster [options] [app options]



YARN standalone/YARN cluster

        Spark Driver首选作为一个ApplicationMaster在Yarn集群中启动,客户端提交给ResourceManager的每一个job都会在集群的worker节点上分配一个唯一的ApplicationMaster,由该ApplicationMaster管理全生命周期的应用。因为Driver程序在YARN中运行,所以事先不用启动Spark Master/Client,应用的运行结果不能再客户端显示(可以在history server中查看)



YARN standalone/YARN cluster

image.png


YARN client

yarn-client(YarnClientClusterScheduler)

Client和Driver运行在一起(运行在本地),AM只用来管理资源

./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode client [options] [app options]


YARN client

        在Yarn-client模式下,Driver运行在Client上,通过ApplicationMaster向RM获取资源。本地Driver负责与所有的executor container进行交互,并将最后的结果汇总。结束掉终端,相当于kill掉这个spark应用。一般来说,如果运行的结果仅仅返回到terminal上时需要配置这个。


如何选择:

如果需要返回数据到client就用YARN client模式

数据存储到hdfs的建议用YARN cluster模式


其他配置和注意事项

如何更改默认配置


spark_home/conf/spark-defaults.conf,每个app提交时都会使用他里面的配置

--conf PROP=VALUE,为单独的app指定个性化参数


环境变量

spark_home/conf/spark-defaults.conf,每个app提交时都会使用他里面的配置

spark.yarn.appMasterEnv.[EnvironmentVariableName]


相关配置

image.png


特别注意:

在cluster mode下,yarn.nodemanager.local-dirs对?Spark executors 和Spark driver都管用, spark.local.dir将被忽略

在client mode下, Spark executors 使用yarn.nodemanager.local-dirs, Spark driver使用spark.local.dir


--files and –archives支持用#映射到hdfs

--jars


至此.

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。