返回首页> Spark > Spark基本工作流程及YARN cluster模式原理
跳过导航链接

Spark基本工作流程及YARN cluster模式原理

文章摘要: Spark基本工作流程及YARN cluster模式原理,Spark应用程序相关的几个术语: Worker:集群中任何可以运行Application代码的节点,类似于YARN中的NodeManager节点。在Spark on Yarn模式中指的就是NodeManager节点; Executor:Application运行在Worker 节点上的一个进程,该进程负责运行Task,并且负责将数据存在内...
 

Spark基本工作流程及YARN cluster模式原理,Spark应用程序相关的几个术语:

Worker:集群中任何可以运行Application代码的节点,类似于YARN中的NodeManager节点。在Spark on Yarn模式中指的就是NodeManager节点;

ExecutorApplication运行在Worker 节点上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上,每个Application都有各自独立的一批Executor

SparkContext:由用户程序启动,通过资源调度模块与Executor通信。

Driver:运行Applicationmain()函数,并创建SparkContext。其中创建SparkContext的目的是为了准备Spark应用程序的运行环境。在Spark中由SparkContext负责和ClusterManager通信,进行资源的申请、任务的分配和监控等;当Executor部分运行完毕后,Driver负责将SparkContext关闭。通常用SparkContext代表Drive

基本运行流程

Spark应用程序有多种运行模式。SparkContextExecutor这两部分的核心代码实现在各种运行模式中都是公用的,在这两部分之上,根据运行部署模式(例如:Local[N]Yarn cluster等)的不同,有不同的调度模块以及对应的适配代码。

具体来说,以SparkContext为程序运行的总入口,在SparkContext的初始化过程中,Spark会分别创建DAGScheduler作业和TaskScheduler任务调度两级调度模块。

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

详细的运行流程为:

构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(可以是StandaloneMesosYARN)注册并申请运行Executor资源;

资源管理器分配Executor资源并启动StandaloneExecutorBackendExecutor运行情况将随着心跳发送到资源管理器上;

SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task SchedulerExecutorSparkContext申请TaskTask SchedulerTask发放给Executor运行同时SparkContext将应用程序代码发放给Executor

TaskExecutor上运行,运行完毕释放所有资源。

sparkProcessDetail

作业调度模块和具体的部署运行模式无关,在各种运行模式下逻辑相同。不同运行模式的区别主要体现在任务调度模块。不同的部署和运行模式,根据底层资源调度方式的不同,各自实现了自己特定的任务调度模块,用来将任务实际调度给对应的计算资源。接下来重点介绍下YARN cluster模式的实现原理和实现细节。

YARN cluster运行模式的内部实现原理

Spark有多种运行模式,在这里主要介绍下YARN cluster模式的内部实现原理。YARN cluster模式的原理框图,相对于其他模式,该模式比较特殊的是它需要由外部程序辅助启动APP。用户的应用程序通过辅助的YARN Client类启动。YARN cluster模式和YARN client模式的区别在于:YARN client模式的AM是运行在提交任务的节点,而YARN cluster模式的AM是由YARN在集群中选取一个节点运行,不一定是在提交任务的节点运行。例如spark-shell如果需要使用YARN模式运行,只能为yarn-client模式,启动命令可以使用spark-shell --master yarn-client

Client类通过YARN Client API提交请求,在Hadoop集群上启动一个Spark ApplicationMasterSpark ApplicationMaster首先注册自己为一个YARN ApplicationMaster,之后启动用户程序,SparkContext在用户程序中初始化时,使用CoarseGrainedSchedulerBackend配合YARNClusterSchedulerYARNClusterScheduler只是对TaskSchedulerImpl的一个简单包装,增加了对Executor的等待逻辑等。

根据Client类传递的参数,Spark ApplicationMaster通过YARN ResourceManager/NodeManager的接口在集群中启动若干个Container,用于运行CoarseGrainedExecutorBackend.CoarseGrainedExecutorBackend在启动过程中会向CoarseGrainedSchedulerBackend注册。

CoarseGrainedSchedulerBackend是一个基于Akka Actor实现的粗粒度的资源调度类,在整个Spark作业运行期间,CoarseGrainedSchedulerBackend主要负责如下功能:

监听并持有注册给它的Executor资源

根据现有的Executor资源,进行Executor的注册、状态更新、相应Scheduler的请求等任务的调度

模式的实现细节

Spark的各种运行模式虽然在启动方式、运行为之、调度手段上有所不同,但它们所要完成的任务基本是一致的,就是在合适的位置安全可靠的根据用户的配置和作业的需要管理和运行任务,在运行调度过程中需要考虑的问题主要为:

环境变量的传递

JAR包和各种依赖文件的分发

任务的管理和序列化等

用户参数配置

用户及权限控制

环境变量的传递

Spark的运行参数有很大一部分是通过环境变量来设置的,例如Executor的内存设置、Library路径等。在Cluster模式下就涉及到环境变量在各个Worker节点的传递问题。不同的运行模式有不同的传递方式。需要指出的是,在Local模式下,不存在环境变量的传递问题。

在这里主要说明一下再YARN相关模式下的参数传递。在YARN相关模式中,这些环境变量首先要通过YARN client设置到Spark AM的运行环境中,之后Spark AM在启动Executor时再将环境变量设置到Executor中。

JAR包和依赖文件的分发

Spark程序的运行主要有两类依赖:

Spark运行库及其依赖

应用程序自身的额外依赖

Local模式下,不存在JAR包分发的问题。在这里主要介绍下YARN模式下的文件分发。

YARN相关模式中,运行库和程序运行所以来的其他文件首先通过HDFS客户端API上传到作业的.sparkStaing目录下,然后将对应的文件和URL映射关系通知YARNYARNNode Manager在启动Container的时候会从指定URL处下载相关文件作为运行环境的一部分。

对于需要进一步分发到Executor运行环境的文件,Spark YARN客户端将需要分发的文件的相关属性(例:URL、时间戳、尺寸等)打包成字符串,通过特定的环境变量(SPARK_YARN_CACHE_XXXX)传递给Spark AMSpark AM在创建ExecutorContainer时还原特定环境变中的各个文件,并通过调用setLocalResources函数初始化Container

任务管理和序列化

Spark任务的运行要解决的问题为:

以正确的顺序运行任务,有效地管理和分派任务

将任务及运行所需相关数据有效地发送到远端

收集运行结果

Spark任务通过DAGScheduler调用TaskScheduler.submitTasks进行派发,该接口将相关的一组任务一起提交并进行调度。

任务的运行结果在Executor端被序列化并发送回SchedulerBackend,由于受到Akka帧尺寸的限制,如果运行结果数据过大,结果会存储到BlockManager中,这时候发送到SchedulerBackend的是对应数据的BlockIDTaskScheduler最终会调用TaskResultGetter在线程池中以异步的方式读取结果,TaskSetManager再根据运行结果更新任务状态(比如失败重试等)并汇报给DAGScheduler等。

 

更多推荐:Spark培训  Spark认证  大数据Spark培训
上一篇:spark作业调优
下一篇:从Spark 2.0版的推出,看开源大数据技术的商业化发展
文章摘要: 从Spark 2.0版的推出,看开源大数据技术的商业化发展,Hadoop商业版的发展方向: Hadoop生态开源技术的成长已逐步朝企业级应用能力方向发展,兑现了他们当初的承诺。Hadoop商业版的技术发展方向正在围绕着界面友好、架构灵活、操作易用等方面来发展,形成一个对Hadoop技术管理统一完备的大数据平台,不再将关注点聚焦在开源技术底层的改造上,通俗点来讲底层技术应该交给社区去发展,商业版应该从商业化应用角度去考虑。...
◆Apache Spark也有不完美 ◆Spark将机器学习与GPU加速机制纳入自身 ◆spark作业调优 ◆Spark基本工作流程及YARN cluster模式原理 ◆从Spark 2.0版的推出,看开源大数据技术的商业化发展 ◆微软将在Office中引入人工智能 ◆微软发Surface Pro 4/Studio固件更新日志 ◆微软:AI人工智能应该帮助,而不是替代人 ◆微软推出WDATP强化企业终端威胁防护 ◆Windows申请免费SSL证书-Let's Encrypt ◆思科ASAP助力全数字化时代数据中心创新 ◆怎样选择合适的PoE交换机? ◆思科持续保持企业基础设施市场优势 ◆网络工程师需要的8项技能 ◆思科IOS中改善CLI的用户体验 ◆H3C交换机以太网端口类型 ◆H3C交换机做DHCP ◆H3C交换机常用配置命令 ◆新华三集团总裁兼首席执行官于英涛2017年会致辞 ◆新华三加速云落地 ◆RHEL7 配置VNC远程桌面 ◆RHEL7利用iso镜像制作本地yum源 ◆RHEL6 学习笔记 ◆RedHat5和RedHat6 配置yum源详解 ◆RedHat7上为Nginx编译安装nginx_push_stream_module ◆是否有必要参加PMP考试培训 ◆该怎么选择PMP培训公司 ◆企业为什么需要IT配置管理及其如何使用 ◆PMP考试心得 ◆IT资产管理与ITIL配置管理的区别和联系 ◆Juniper用户快更新:Junos OS、SRX有DoS漏洞 ◆Juniper防火墙之恢复出厂默认设置 ◆Juniper SSG双机高可用(HA)平滑升级经验分享 ◆高盛:Juniper市场表现将超过Cisco和Arista ◆Juniper收购云管理公司AppFormix ◆F5 Network:让爱点亮世界 ◆F5发布2017年应用交付状态报告 ◆除F5外,其他负载均衡软件的优缺点 ◆负载均衡的那些算法们 ◆F5配置手册:设备初始化配置 ◆Oracle培训:Oracle数据泵导入dmp文件 ◆Oracle培训:Oracle手工建库出现ORA-01519错误 ◆Oracle培训:Oracle CDC部署 ◆Oracle培训:Oracle 12c创建可插拔数据库(PDB)及用户 ◆Oracle EXP和IMP使用方法介绍 ◆VMware中CentOS 6.6的kdump启动失败解决 ◆VMware NSX升级:微细分、安全启动和支持非vSphere环境 ◆VMware虚拟化培训:虚拟化的基础知识 ◆VMware发布2016数字化工作空间现状报告 ◆VMware助力广州科政实现恒大集团打造全虚拟化数据中心 ◆戴尔EMC补丁在VMAX存储系统中出现漏洞 ◆EMC进行SAN拆分,解决更细化的存储需求 ◆EMC数据中心全闪存年,机架级闪存可让Hadoop提速10倍 ◆EMC发布2016年新品和技术路线 ◆重新定义企业IT,EMC联手VMware推超融合 ◆最近面试的大数据岗位的公司经历 ◆用大数据预测雾霾,已获得环保部订单的微软是如何做到的? ◆大数据学习经验 ◆身处大数据时代,大数据这些误区你知道吗 ◆大数据分析促进人才招聘 ◆云计算SaaS采用要考虑的5大因素 ◆如何构建一个私有存储云 ◆云计算的三大支柱 ◆云计算的真正价值不仅仅是节省开支 ◆云计算将改变我们的生活? ◆Apache Spark也有不完美 ◆Spark将机器学习与GPU加速机制纳入自身 ◆spark作业调优 ◆Spark基本工作流程及YARN cluster模式原理 ◆从Spark 2.0版的推出,看开源大数据技术的商业化发展 ◆EasyStack郭长波当选OpenStack基金董事 ◆OpenStack私有云:好处、挑战和未来 ◆在Openstack上创建并访问Kubernetes集群 ◆思科公司关闭基于OpenStack的公共云 ◆2017年OpenStack管理员认证会不会火? ◆IBM和Bell联手共同打造苹果iOS企业应用 ◆IBM首席执行官提出人工智能部署三大基本原则 ◆调研IBM与西门子:软件将是工业的未来! ◆IBM在美获专利最多 ◆IBM闪存迎接新挑战 ◆Hadoop创始人Doug Cutting寄语2017:五种让开源项目成功的方法 ◆基于Ubuntu Hadoop的群集搭建Hive ◆HDFS以及HBase动态增加和删除节点 ◆Cloudera提供课程帮助缩小数据技能差距 ◆Cloudera提供课程帮助缩小数据技能差距 ◆扩大与Azure合作,思杰力推超融合基础设施上部署VDI ◆MapReduce工作流多种实现方式 ◆Citrix虚拟化技术:XenServer6.2资源池配置 ◆Citrix虚拟化技术:XenServer6.2虚拟机创建 ◆Citrix虚拟化技术:XenServer6.2存储管理 ◆2017年十大最热IT技能:安全位列其中 ◆筑牢个人信息安全防火墙 ◆2016年最热门的六大IT职位 ◆CISP认证和CISSP认证区别 ◆成为CISSP的理由