前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【推荐】Spark知识点

【推荐】Spark知识点

作者头像
木野归郎
发布2022-04-14 21:01:12
3400
发布2022-04-14 21:01:12
举报
文章被收录于专栏:share ai happiness

客户那边需要快速出一个版本,开发的这块使用到的之前没怎么用过,比如用oozie调度spark程序时候,你可能在你本地调试代码没有问题,上传到集群上之后,运行就出各种错,加上我们使用的服务器配置很差,导致各种服务需要的资源都不都用,然后每天就是在各种配置,话不多说了,赶紧来复习一下spark;

大概从以下几点进行说明:

1、Spark有哪些特点

2、Spark的部署方式有哪些?

3、Spark提交作业流程?

Spark有哪些特点?

Spark有速度快、容错性高、通用性强、兼容性强等特点;

速度快

我们先来说一下rdd,rdd 全英文 Resilient Distributed Datasets。

Resilient:能复原的,弹回的,有弹性的。谈谈spark的内存机制,spark的内存整体分为堆内内存和堆外内存,而在内存的使用上又分为数据内存和运行内存,就是数据存储和程序运行。

Distributed 分布式,就指的是spark的partition,spark就是将一整块特别大的数据按照一定规则分到各个机器上,然后将代码也发送过去,每个分区执行完逻辑后,最后将结果汇总到一块就是最终的结果。

Datasets spark的数据处理快还要得益于它的数据的处理方式,就像早上坐地铁一样,大家排队上地铁,坐满之后等待下一个地铁过来,下一个地铁过来大家再坐上去,以此类推,也是它为什么称为pipeline处理方式。但是要注意的是,并不是每处理完一个rdd就交给这个下一个节点,一般是小批量的方式传递,这一般也是优化考虑的地方。

每一个rdd, 不管它经历了多少个算子,rdd只用来存储他们之间的关系,这样spark就会知道他的来龙去脉,当出现问题的时候,很容易根据记录的关系(r又称为“血缘关系”)重新计算出数据。

Spark把运算过程中间的数据(如:shuffle阶段产生的数据存放在内存,这样迭代计算效率会更高);在计算时,为了节省内存,不把所有的数据一次全部加载到内存中,有一种设计模式叫迭代器模式。

Spark RDD迭代器模式是什么呢?

迭代器模式:在逻辑代码执行时,真正的逻辑并未执行,而是创建了新的迭代器,新的迭代器保存着对当前迭代器的引用从而形成链表,每个迭代器需要实现hasNext(),next()两个方法。当触发计算时,最后一个创建的迭代器会调用next方法,next方法会调用父迭代器的next方法。而且rdd之间是串联的关系,在一块就称为迭代器串联;

容错性高

相邻的两个RDD的关系称之为依赖关系,新的RDD依赖于旧的RDD,多个连续的RDD的依赖关系,称之为血缘关系;每个RDD会保存血缘关系,但每个RDD不会保存数据,如果在reduceByKey过程中出现错误时,由于RDD2不会保存数据,但可以根据血缘关系将数据源重新读取进行计算;黄色区域就是每个RDD保存的血缘关系,reducrByKey出现错误后,会根据RDD2存储的血缘关系重新计算。

通用性:

以Spark为基础建立起来的模块(库)有Spark SQL,Spark Streaming,MLlib和GraphX。我们可以很容易地在同一个应用中将这些库结合起来使用,以满足我们的实际需求。并且提供了transformation和action这两大类的多功能api。

兼容性:

Spark任务支持多种调度方式包括Yarn、mesos、Standalone等。可通过Spark直接对接大数据生态中Hbase、Hdfs、Kafka等多种数据源。

Spark的部署方式有哪些?

Spark有以下四种部署方式,分别是:Local,Standalone,Yarn,Mesos

本地模式(Local)

该模式运行任务不会提交在集群中,只在本节点执行,有两种情况:

本地模式: 测试或实验性质的本地运行模式 (单机)

运行该模式非常简单,只需要把Spark的安装包解压后,改一些常用的配置即可使用,而不用启动Spark的Master、Worker守护进程( 只有集群的Standalone方式时,才需要这两个角色),也不用启动Hadoop的各服务(除非你要用到HDFS)。

Spark不一定非要跑在hadoop集群,可以在本地,起多个线程的方式来指定。将Spark应用以多线程的方式直接运行在本地,一般都是为了方便调试,本地单机模式分三类:

local:只启动一个executor

local[k]:启动k个executor

local[*]:启动跟cpu数目相同的 executor

Yarn

通常,生产环境中,我们是把Spark程序在YARN中执行。而Spark程序在YARN中运行有两种模式,一种是Cluster模式、一种是Client模式。这两种模式的关键区别就在于Spark的driver是运行在什么地方。

client模式:

1、spark-submit脚本提交,Driver在客户端本地运行;

2、Client向RM申请启动AM,同时在SC(client上)中创建DAGScheduler和TaskScheduler。

3、RM收到请求之后,查询NM并选择其中一个,分配container,并在container中开启AM

4、client中的SC初始化完成之后,与AM进行通信,向RM注册,根据任务信息向RM申请资源

5、AM申请到资源之后,与AM进行通信,要求在它申请的container中开启CoarseGrainedExecutorBackend(executor)。Executor在启动之后会向SC注册并申请task

6、SC分配task给executor,executor执行任务并向Driver(运行在client之上的)汇报,以便客户端可以随时监控任务的运行状态

7、任务运行完成之后,client的SC向RM注销自己并关闭自己

cluster模式:

1、spark-submit脚本提交,向yarn(RM)中提交ApplicationMaster程序、AM启动的命令和需要在Executor中运行的程序等

2、RM收到请求之后,选择一个NM,在其上开启一个container,在container中开启AM,并在AM中完成SC的初始化

3、SC向RM注册并请求资源,这样用户可以在RM中查看任务的运行情况。RM根据请求采用轮询的方式和RPC协议向各个NM申请资源并监控任务的运行状况直到结束

4、AM申请到资源之后,与对应的NM进行通信,要求在其上获取到的Container中开启CoarseGrainedExecutorBackend(executor), executor 开启之后,向AM中的SC注册并申请task

5、AM中的SC分配task给executor,executor运行task并向AM中的SC汇报自己的状态和进度

6、应用程序完成之后(各个task都完成之后),AM向RM申请注销自己并关闭自己;

Standalone独立模式

自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。它是Spark实现的资源调度框架,其主要的节点有Client节点、Master节点和Worker节点;

在standalone部署模式下又分为client模式和cluster模式

client模式:driver和client运行于同一JVM中,不在worker上启动,该JVM进程直到spark application计算完成返回结果后才退出;

cluster模式:driver由worker启动,client在确认spark application成功提交给cluster后直接退出,并不等待spark application运行结果返回;

总结:

yarn-cluster本地进程则仅仅只是一个client,它会优先向yarn申请AppMaster资源运行AppMaster,在运行AppMaster的时候通过反射启动Driver(我们的应用代码),在SparkContext初始化成功后,再向yarn注册自己并申请Executor资源,此时Driver与AppMaster运行在同一个container里,是两个不同的线程,当Driver运行完毕,AppMaster会释放资源并注销自己。所以在该模式下如果结束了该进程,整个Spark任务也不会退出,因为Driver是在远程运行的;

如果是Client模式,Driver就运行在提交spark程序的地方,Spark Driver是需要不断与任务运行的Container交互的,所以运行Driver的client是必须在网络中可用的,直到应用程序结束。在本地环境测试的时候经常使用;

Spark on Yarn作业提交流程

YARN Client模式

在YARN Client模式下,Driver在任务提交的本地机器上运行,Driver启动后会和ResourceManager通讯申请启动ApplicationMaster,随后ResourceManager分配container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster的功能相当于一个ExecutorLaucher,只负责向ResourceManager申请Executor内存。

ResourceManager接到ApplicationMaster的资源申请后会分配container,然后ApplicationMaster在资源分配指定的NodeManager上启动Executor进程,Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数,之后执行到Action算子时,触发一个job,并根据宽依赖开始划分stage,每个stage生成对应的taskSet,之后将task分发到各个Executor上执行。

YARN Cluster模式

在YARN Cluster模式下,任务提交后会和ResourceManager通讯申请启动ApplicationMaster,随后ResourceManager分配container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster就是Driver。

Driver启动后向ResourceManager申请Executor内存,ResourceManager接到ApplicationMaster的资源申请后会分配container,然后在合适的NodeManager上启动Executor进程,Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数,之后执行到Action算子时,触发一个job,并根据宽依赖开始划分stage,每个stage生成对应的taskSet,之后将task分发到各个Executor上执行。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OnlyCoding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档