请选择 进入手机版 | 继续访问电脑版
7670 0

第27课:Spark on yarn 彻底解密 [推广有奖]

  • 1关注
  • 8粉丝

硕士生

34%

还不是VIP/贵宾

-

威望
0
论坛币
305 个
通用积分
0
学术水平
5 点
热心指数
14 点
信用等级
2 点
经验
22942 点
帖子
73
精华
0
在线时间
135 小时
注册时间
2016-2-27
最后登录
2016-9-11

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

本期内容:

1、Hadoop yarn解密

2、Spark on yarn 解密


一、HadoopYarn 解析

1、Yarn是Hadoop推出整个分布式(大数据)集群的资源管理器,负责资源的管理和分配,基于Yarn我们可以在同一个大数据集群上同时运行多个计算框架,例如Spark,MapReduce、Storm等;

2、SparkOn Yarn运行工作流程图

_DMESW2T]C]L@0{_ZG$XSE2.png

图1 Spark on Yarn 工作流程

3、Client端向ResourceManager提交Application,ResourceManager接收应用并根据集群资源状况决定在具体某个Node上来启动当前提交的应用程序的任务调度器Driver(ApplicationMaster),然后决定命令具体的某个Node上的资源管理器NodeManager来启动一个新的JVM基础运行程序的Driver部分,当ApplicationMaster启动的时候会下载当前Application相关的Jar等各种资源并基于此决定向ResourceManager申请资源的具体内容(例如需要多少个Container,和Container的配置),ResourceManager接受到ApplicationMaster的资源分配的请求后会最大化的满足资源分配的请求,并把资源的元数据信息发送给ApplicationMaster,ApplicationMaster收到资源的元数据信息后,会根据元数据的信息发送指令给具体机器上的NodeManager,让NodeManager来启动具体的Container,Container在启动后必须向ApplicationMaster注册,当ApplicationMaster获得了用于计算的Container后,开始并行任务的调度和计算,直到作业运行完成。

需要说明的是:如果ResourceManager第一次没有能够完全完成资源分配的请求,后续ResourceManager发现集群中有新的可用资源时,会主动向ApplicationMaster发送新的可用资源的元数据信息,以提供跟多的资源用于当前程序的运行。补充说明:

1)如果是Hadoop的MapReduce计算的话Container不可以复用,如果是Spark on Yarn的话Container可以复用;

2)Container具体的销毁是由ApplicationMaster来决定的;

3)ApplicationMaster 发指令给NodeManager让NodeManager销毁Container。


二、Spark on Yarn的两种运行模式实战

此时不需要启动Spark集群,只需要启动Yarn即可,Yarn的ResourceManager就相对于Spark Standalone模式下的Master!(我们启动spark集群是要用到standalone,现在有yarn了,就不用spark集群了)

1、Spark on Yarn的两种运行模式:唯一的决定因素是当前Application从任务调度器Driver运行在什么地方!

a) Cluster:(如果Spark运行在on Yarn上,根本就没必要启动Spark集群,Master是ResourceManager)

b) Client:Driver运行在当前提交程序的客户机器上。

需要说明的是:无论什么模式,只要当前机器运行了Spark,首先需要安装Spark、Scala、Java,不用启动Spark集群,但是SparkOn Yarn模式下,应用程序提交后资源和集群的管理模式不同,但作业实际是运行在Spark集群架构中,Standalone模式下有Master,Worker,Spark On Yarn模式下Master相当于ResourceManager。

实战运行Sparkon yarn

启动Hadoop、HDFS

  1. ./start-dfs.
复制代码

启动Yarn

  1. ./start-yarn.sh
复制代码

启动jobHistoryServer

  1. root@Master:/usr/local/spark-1.6.0-bin-hadoop2.6/# jps23432 jps6543 NameNode7456 HistoryServer9734 ResourceManager8398 SecondaryNameNode
复制代码

提交应用程序:

  1. ./spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-modeclient ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 50000
复制代码

以上命令提交作业,其中:

a)--class org.apache.spark.examples.SparkPi:运行SparkPi;

b)--master yarn:指定作业运行在yarn上;

c)--deploy-modeclient:使用yarn的Client模式运行作业;

d)../lib/spark-examples-1.6.0-hadoop2.6.0.jar:SparkPi所在的jar的位置;

e)50000:指定并行度50000(即50000JVM虚拟机)

将并行任务变成50000个(50000台虚拟机)


2、Spark on Yarn的运行实战:

a) Client模式:方便在命令终端

天机解密:Standalone模式下启动Spark集群(也就是启动Master和Worker)其实启动的是资源管理器,真正作业计算的时候和集群资源管理器没有任何关系,所以Spark的Job真正执行作业的时候不是运行在我们启动的Spark集群中的,而是运行在一个个JVM中的,只要在JVM所在的集群上安装配置了Spark即可!当没有启动yarn和spark-all的时候运行提交上述作业,会提示找不到Server,此时集群会一直尝试retry连接,如下图2所示:

X}K51TJDB~KGF7TXZ5124)U.png

图2

当在retry的过程中启动了yarn后,集群自动连接,此时上传jar文件到HDFS文件系统,如下代码所示:

  1. Uploading resource file:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/lib/spark-assembly-1.6.0-hadoop2.6.0.jar-> hdfs://Master:9000/user/root/.sparkStaging/application_1454420297706_0001/spark-assembly-1.6.0-hadoop2.6.0.jar
复制代码

注:通过http://Master:8088查看作业运行情况

D)}@7[TFZXG_%TOFJ}AG4$C.png

图3 运行SparkPi产生的DAG

因为SparkPi中只有map和reduce操作,所以只有一个Stage。

4S7IE%X3{CFE~%1`)NA[R%H.png

图4

cluster的模式下driver在AppMaster中,driver收集了作业运行的主要信息,而yarn资源管理器管理了作业运行信息的端口,因此在http://Master:8088中查看作业运行的详细信息。

b) Client模式:

  1. ./spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-modecluster ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 50000
复制代码

注:可以通过http://Master:4040查看日志信息


3、Spark on Yarn模式下Driver与ApplicationMaster的关系:

a) Cluster:Driver位于ApplicationMaster进程中,我们需要通过Hadoop默认指定的8088端口来通过Web控制台查看当前的Spark程序运行的信息,例如进度、资源的使用(Cluster的模式中Driver在AppMaster中);

IBO3T[I4V[H[V7ZUKODR`O1.png

图5 Cluster模式


b)Driver为提交代码的机器上,此时ApplicationMaster依旧位于集群中且只负责资源的申请和launchExecutor,此时启动后的Eexcutor并不会向ApplicationMaster进程注册,而是向Driver注册!!!

HEEJG`}65OJ]F5%33S}P$AN.png

图6 Client模式

可以看到Driver在客户机上,App Master中主要是用来向ResourceManager申请资源和ExecutorLauncher启动Executor,Executor启动后是向Driver注册的。


三、最佳实践

1、在Spark on Yarn的模式下HadoopYarn的配置yarn.nodemanager.local-dirs会覆盖Spark的Spark.local.dir;

2、在 实际生产环境下一班都是采用Cluster,我们会通过HistoryServer来获取最终全部的集群运行的信息;

3、如果想直接看运行的日志信息,可以使用以下命令:

  1. yarn logs -ApplicationId<app ID>
复制代码

XNOADC66~27`YLV_VY9L}D8.png

图7 Spark On Yarn运行机制图



注:本学习笔记来自DT大数据梦工厂

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Spark SPAR Park Yarn SPA Spark scala DT_Spark 大数据

已有 1 人评分论坛币 收起 理由
daazx + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

本帖被以下文库推荐

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 09:59