Spark On YARN
Posted 一剑侵心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark On YARN相关的知识,希望对你有一定的参考价值。
Hadoop Yarn解析:
1. Yarn是Hadoop推出整个分布式(大数据)集群的资源管理器,负责资源的管理和分配,基于Yarn,我们可以在同一个大数据集群上同时运行多个计算框架。例如:Spark、MapReduce、Storm等
2. Yarn基本工作流程:
注意:Container要向NodeManager汇报资源信息,Container要向App Mstr汇报计算信息
2.1 客户端向ResourceManager提交Application,
2.2 ResourceManager 接受应用并根据集群资源状况决定在某个具体 Node 上来启动当前提交的应用程序的任务调度器 Driver(ApplicationMaster),
2.3 决定后,ResourceManager 会命令某个具体的 Node上的资源管理器 NodeManager 来启动一个新的JVM进程运行程序的 Driver 部分,
2.4 当ApplicationMaster 启动的时候(会首先向ResourceManager注册说明自己负责当前程序的运行)会下载 当前 Application相关的Jar等各种资源,并基于此决定向ResourceMananger申请资源的具体内容。
2.5 ResourceManager 接受到 ApplicationMaster 的资源分配的请求之后,会最大化地满足资源分配的请求,并把资源的元数据信息发送给ApplicationMaster,
2.6 ApplicationMaster 收到资源的元数据信息后会根据元数据发指令给具体机器上的 NodeManager,让 NodeManager 来启动具体的 Container,
2.7 Container 在启动后必须向 ApplicationMaster 注册,当 ApplicationMaster 获得了用于计算的 Containers 后,开始进行任务的调度和计算,直到作业完成。
需要补充说明的是:
(1) 如果 ResourceManager 第一次没有能够完全完成 ApplicationMaster 分配的资源的请求,后续 ResourceManager 发现集群中有新的可用资源时,会主动向ApplicationMaster 发送新的可用资源的元数据信息以提供更多的资源用于当前程序的运行。
(2)如果是 hadoop 的 MapReduce 计算的话Container不可以复用,如果是 Spark On Yarn 的话,Container可以复用。
(3)Container 具体的销毁是由 ApplicationMaster 来决定的。
(4)ApplicationMaster 发指令给 NodeManager 让NM销毁Container.
Spark 运行在 YARN 上时,不需要启动 Spark 集群,只需要启动 YARN即可!! YARN的 ResourceManager 相当于 Spark Standalone 模式下的 Master
Spark on YARN 有两种运行模式:
1. Cluster -- Driver 运行在 YARN集群下的某台机器上的JVM进程中
2. Client -- Driver 运行在当前提交程序的机器上
Standalone 模式下启动Spark集群(Master 和 Worker),其实启动的是资源管理器。真正作业的计算和资源管理器没有关系。
Spark on Yarn模式下Driver和ApplicationMaster的关系:
Cluster: Driver位于ApplicationMaster进程中,我们需要通过Hadoop默认指定的8088端口来通过Web控制台查看当前Spark程序运行的信息。
Client: Driver为提交代码的机器上,此时ApplicationMaster依旧位于集群中且只负责资源的申请和launchExecutor,此时启动后的Executor并不会向ApplicationMaster进程注册,而是向Driver注册
另外几点说明:
在Spark on Yarn的模式下,Hadoop Yarn的配置yarn.nodemanager.local-dirs会覆盖Spark的spark.local.dir !!!
在实际生产环境下一般都采用Cluster,我们会通过HistoryServer来获取最终全部的运行信息。
如果想直接看运行的日志信息,可以使用以下命令:
yarn logs –applicationId <app ID>
以上是关于Spark On YARN的主要内容,如果未能解决你的问题,请参考以下文章
黑猴子的家:Spark on hive 与 hive on spark 的区别