大数据IMF传奇行动绝密课程第27课:Spark on Yarn彻底解密

来源:互联网 发布:起重机制造 知乎 编辑:程序博客网 时间:2024/04/28 09:32

Spark on Yarn彻底解密

1、Hadoop Yarn的工作流程解密
2、Spark on Yarn两种运行模式实战
3、Spark on Yarn工作流程解密
4、Spark on Yarn工作内幕解密
5、Spark on Yarn最佳实战

1、Hadoop Yarn的工作流程解密
1)Hadoop Yarn解析
Yarn是Hadoop推出的整个分布式(大数据)集群的资源管理器,负责资源的管理和资源分配,基于Yarn我们可以在同一个大数据集群上同时运行多个计算框架,例如Spark、MapReduce、Storm等;
2)Yarn基本工作流程图:
图27-1 Yarn基本工作流程
Resource Manager管理所有机器的具体的计算资源,每台机器又有一个Node Manager,其管理当前机器的资源,并向Resource Manager汇报自己的资源状况。当客户端提交一个程序给ResourceManager的时候,ResourceManager会根据自己对集群资源的掌握情况,在一台机器上启动一个进程,此时ResourceManager就是整个集群的Master。ResourceManager命令那台机器的NodeManager来启动任务。ApplicationMaster是当前提交程序的Driver,启动后要向ResourceManager注册和申请资源,ResourceManager会根据情况,将元数据返回Application Master,Application Master去直接找对应的机器Node Manager去要资源。Resource Manager以Container来封装CPU和内存。Application Master拿到元数据后找Node Manager启动Container,Container是jvm,加载代码后向Application Master注册。如果资源不够,则在队列中等待。

注意:Container要向Node Manager汇报资源信息,Container要向Application Master汇报计算信息;

3)客户端Client向ResourceManager提交Application,ResourceManager接受应用并根据集群资源状况决定在某个具体Node上来启动当前提交的应用程序的任务调度器Driver(ApplicationMaster),决定后ResourceManager会命令具体的某个Node上的资源管理器NodeManager来启动一个新的JVM进程运行程序的Driver部分,当ApplicationMaster启动的时候(会首先向ResourceManager注册说明自己负责当前程序的运行)会下载当前Application相关的Jar等各种资源并基于此决定具体向ResourceManager申请资源的具体内容,ResourceManager接收到ApplicationMaster的资源分配的请求之后会最大化的满足资源分配的请求并把资源的元数据信息发送给ApplicationMaster,ApplicationMaster收到资源的元数据信息后,会根据元数据信息发指令给具体机器上的NodeManager让NodeManager来启动具体的Container,Container在启动后必须向ApplicationMaster注册,当ApplicationMaster获得了用于计算的Containers后,开始进行任务的调度和计算,直到作业的完成。需要补充说明的是:如果ResourceManager第一次没有能够完全完成ApplicationMaster分配资源的请求,后续ResourceManager发现集群中有新的可用资源的时候,会主动向ApplicationMaster发送新的可用资源的元数据信息以提供更多的资源用于当前程序的运行。

补充说明:1、如果是Hadoop的MapReduce计算的话Container不可以复用,如果是Spark on Yarn 的话Container可以复用。
2、Container具体的销毁是由ApplicationMaster来决定的;ApplicationMaster发指令给NodeManager让其销毁Container。

2、Spark on Yarn两种运行模式实战:此时不需要启动Spark集群,只需要启动Yarn即可!Yarn的ResourceManager就相当于Spark Standalone模式下的Master!
1)Spark on Yarn的两种运行模式:唯一的决定因素是当前Application的任务调度器Driver运行在什么地方!
a)Cluster:Driver在Yarn集群下的某台机器上的JVM进程中。
b)Client: Driver运行在当前提交程序的客户机器上。
需要说明的是:无论是什么模式,只要当前机器运行了Spark代码,就必须安装Spark!
2)Spark on Yarn的运行实战:
a)Client模式:方便在命令终端直接看到运行的过程信息,尤其方便做测试使用 ./spark-submit –class org.apache.spark.examples.SparkPi –master yarn –deploy-mode client ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 50000

Spark天机解密:Standalone模式下启动Spark集群(也就是启动Master和Worker)其实启动的是资源管理器,真正做计算的时候和集群资源管理器没有任何关系,所以Spark的Job真正执行作业的时候不是运行在你启动的Spark集群中的,而是运行在一个个JVM中的,只要在JVM所在的机器上安装配置了Spark即可!
b)Cluster模式: ./spark-submit –class org.apache.spark.examples.SparkPi –master yarn –deploy-mode cluster ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 50000

3) Spark on Yarn模式下Driver和ApplicationMaster的关系:
a)Cluster: Driver位于ApplicationMaster进程中,我们需要通过Hadoop默认指定的8088端口来通过Web控制台查看当前的Spark程序运行的信息,例如进度、资源的使用;
b)Client:Driver为提交代码的机器上,此时ApplicationMaster依旧位于集群中且只负责资源的申请和launchExecutor,此时启动后的Executor并不会向ApplicationMaster进程注册,而是向Driver注册。

图27-2 Spark on Yarn Client

3、最佳实践:
1)在Spark on Yarn的模式下,Hadoop on Yarn的配置yarn.nodemanager.local-dirs会覆盖spark的spark.local-dirs会覆盖spark的spark.local.dir
2)在实际生产环境下一般都是采用Cluster模式,我们会通过History Server来获取最终全部的运行信息;
3)如果想直接看运行的日志信息,可以使用以下命令yarn logs -applicationId

0 0
原创粉丝点击