浅谈Spark的RDD、部署模式

一、RDD

Spark RDD(弹性分布式数据集),弹性是指Spark可以通过重新计算来自动重建丢失的分区。
从本质上讲,RDD 是数据元素的不可变分布式集合,跨集群中的节点进行分区,可以与提供转换和操作的低级 API 并行操作。

Spark RDD 相关操作:官方文档

1. 为什么 Spark 中需要 RDD?

RDD 解决了 MapReduce 在数据共享方面的缺点。当重用数据进行计算时,MapReduce 需要写入外部存储(HDFS、Cassandra、HBase 等)。作业之间的读写过程会消耗大量内存。

此外,由于复制、序列化和磁盘使用量的增加,任务之间的数据共享速度很慢。

RDD内存缓存

RDD 旨在通过利用内存计算操作存储来减少外部存储系统的使用。这种方法将任务之间的数据交换速度提高了 10 到 100 倍。

处理大量数据时,速度至关重要。Spark RDD 使训练机器学习算法和处理大量数据进行分析变得更加容易。

2. Spark RDD 操作

RDD 提供两种操作类型:

1.转换是对 RDD 进行的操作,从而创建 RDD。RDD的transformation操作是延迟计算的,只在遇到action时才真正进行计算。

2.action是不会导致 RDD 创建并提供一些其他值的操作。

RDD 操作和转换

2、RDD 持久化

Spark 中一个很重要的能力是将数据持久化(或称为缓存),在多个操作间都可以访问这些持久化的数据。当持久化一个 RDD 时,每个节点的其它分区都可以使用 RDD 在内存中进行计算,在该数据上的其他 action 操作将直接使用内存中的数据。这样会让以后的 action 操作计算速度加快(通常运行速度会加速 10 倍)。缓存是迭代算法和快速的交互式使用的重要工具。

RDD 可以使用 persist() 方法或 cache() 方法进行持久化。数据将会在第一次 action 操作时进行计算,并缓存在节点的内存中。Spark 的缓存具有容错机制,如果一个缓存的 RDD 的某个分区丢失了,Spark 将按照原来的计算过程,自动重新计算并进行缓存。

在 shuffle 操作中(例如 reduceByKey),即便是用户没有调用 persist 方法,Spark 也会自动缓存部分中间数据。这么做的目的是,在 shuffle 的过程中某个节点运行失败时,不需要重新计算所有的输入数据。如果用户想多次使用某个 RDD,强烈推荐在该 RDD 上调用 persist 方法。

3、RDD的cache和persist的区别

cache()调用的persist(),是使用默认存储级别的快捷设置方法
看一下源码

/*** Persist this RDD with the default storage level (`MEMORY_ONLY`).*/
def cache(): this.type = persist()/*** Persist this RDD with the default storage level (`MEMORY_ONLY`).
*/
def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)

通过源码可以看出cache()是persist()的简化方式,调用persist的无参版本,也就是调用persist(StorageLevel.MEMORY_ONLY),cache只有一个默认的缓存级别MEMORY_ONLY,即将数据持久化到内存中,而persist可以通过传递一个 StorageLevel 对象来设置缓存的存储级别。

二、执行器和集群管理器

本地模式 使用本地模式,有一个executor和driver运行在同一个JVM中,该模式一般是测试或小规模作业。这种模式主URL为local(一个线程)、local[n](n个线程)、local[*](每个内核一个线程)

standalone模式 运行了一个master和多个workder。当spark应用启动时,master要求worker代表应用启动多个executor线程。

YARN模式 YARN是Hadoop中的资源管理器。该模式优于独立模式集群管理器,因为考虑了在集群上运行的其他应用(MapReduce作业)的资源需求,并统筹实施调度策略。独立模式对集群资源采取静态分配方法,不能随时适应其他应用变化需求。

三、运行在YARN上的Spark

为了在YARN上运行,Spark提供了两种部署模式:YARN客户端模式和YARN集群模式。YARN客户端模式的driver在客户端运行,YARN集群模式的driver在YARN的application master集群上运行。

对于spark-shell必须使用YARN客户端模式,使用该模式,任何调试输出都是立即可见的。

另一方面,YARN集群模式适用生成作业,因为整个应用在集群上运行。如果application master出现故障,YARN可以尝试重新运行该应用。

在Spark on Yarn上,Driver会和AppMaster通信,资源的申请由AppMaster来完成,而任务的调度和执行则由Driver完成,Driver会通过与AppMaster通信来让Executor的执行具体的任务。

1. YARN客户端模式

在YARN客户端模式下,当driver构建新的SparkContext实例便启动了与Yarn的交互。该context向ResourceManager提交一个Yarn应用,ResourceManager启动NodeManager上的Yarn容器,运行一个application master。

ExecutorLauncher向ResourceManager申请资源来启动Yarn容器的executor。每个executor在启动时都会连接回sc,并注册自身。

2. YARN集群模式

对于YARN客户端模式和YARN集群模式的唯一区别在于,YARN客户端模式的Driver运行在本地,而AppMaster运行在YARN一个节点上,他们之间进行远程通信,AppMaster只负责资源申请和释放(当然还有DelegationToken的刷新),然后等待Driver的完成。

而YARN集群模式的Driver则运行在AppMaster所在的container里,Driver和AppMaster是同一个进程的两个不同线程,它们之间也会进行通信,AppMaster同样等待Driver的完成,从而释放资源。

参考链接

  1. 从源码角度看Spark on yarn client & cluster模式的本质区别
  2. Hadoop权威指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/82039.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滑动验证组件---设置movable-view组件的x属性在微信小程序端失效的问题

场景 采用uniapp的movable-view组件实现滑动验证组件。 流程 滑块未滑到最右端时,回弹到原点滑块滑到最右端时,则显示滑动结束,不可再滑动 问题 频繁设置uniapp的movable-view组件的x属性,在H5端正常,但在微信小程…

微调llama2模型教程:创建自己的Python代码生成器

本文将演示如何使用PEFT、QLoRa和Huggingface对新的lama-2进行微调,生成自己的代码生成器。所以本文将重点展示如何定制自己的llama2,进行快速训练,以完成特定任务。 一些知识点 llama2相比于前一代,令牌数量增加了40%&#xff0…

SpringBoot整合MyBatis

星光下的赶路人star的个人主页 碰到好的欢喜的东西,总是要留得一份清淡余地,才会有中正的缘分 文章目录 1、业务开发1.1 前端页面1.2 MVC1.3Bean1.4 Dao(Mapper)1.5 Service1.6 Controller 2、整合MyBatis2.1 依赖整合2.2 配置整合…

CentOS7安装jq命令

1. 安装依赖 yum install gmp-devel mpfr-devel libmpc-devel -y2. 安装gcc 2.1 离线环境 wget https://ftp.gnu.org/gnu/gcc/gcc-10.3.0/gcc-10.3.0.tar.gz tar -xzf gcc-10.3.0.tar.gz编译安装 yum -y install gcc c --skip-broken./configure --disable-multilib --enab…

linux文本三剑客

linux文本三剑客 1、grep2、sed 1、grep 过滤 参数用法作用-igrep -i STRING xxx.txt从xxx.txt文件查找不区分大小写STRING-wgrep -w STRING xxx.txt精确匹配STRING-egrep -e STRING1 -e STRING2 xxx.txt查找多个STRING行-ngrep -n STRING xxx.txt查看STRING 在第几行-vgrep …

运算放大器发展史

在内部集成了一个补偿电容 MPS公司OP07推出后,大受欢迎。各家厂商都推出了自己的 这4款都是可以替换的

蓝蓝设计ui设计公司作品--泛亚高科-光伏电站控制系统界面设计

泛亚高科(北京)科技有限公司(以下简称“泛亚高科”),一个以实时监控、高精度数值计算为基础的科技公司, 自成立以来,组成了以博士、硕士为核心的技术团队,整合了华北电力大学等高校资源,凭借在电…

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 四)

Observed装饰器和ObjectLink装饰器:嵌套类对象属性变化 上文所述的装饰器仅能观察到第一层的变化,但是在实际应用开发中,应用会根据开发需要,封装自己的数据模型。对于多层嵌套的情况,比如二维数组,或者数…

ROS通信机制之话题(Topics)的发布与订阅以及自定义消息的实现

我们知道在ROS中,由很多互不相干的节点组成了一个复杂的系统,单个的节点看起来是没起什么作用,但是节点之间进行了通信之后,相互之间能够交互信息和数据的时候,就变得很有意思了。 节点之间进行通信的一个常用方法就是…

同款爱心Python代码版来了

同款爱心就是一个动态的♥型效果,主要 Python 代码实现如下: def __init__(self, generate_frame20): # 原始爱心坐标集合 self._points set() # 边缘扩散效果点坐标集合 self._edge_diffusion_points set() # 中心扩散效果点坐标集合 self._cent…

SpringIoC基于注解配置

目录 一、Bean注解标记和扫描 (IoC) 二、组件(Bean)作用域和周期方法注解 三、Bean属性赋值:引用类型自动装配 (DI) 四、Bean属性赋值:基本类型属性赋值 (DI) 一、Bean注解标记和扫描 (IoC) 一、注解方式介绍 1.注解介绍 和…

行业追踪,2023-08-24

自动复盘 2023-08-24 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…