浅谈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.rhkb.cn/news/101960.html

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

相关文章

RPC和HTTP协议

RPC 全称(Remote Procedure Call),它是一种针对跨进程或者跨网络节点的应用之间的远程过程调用协议。 它的核心目标是,让开发人员在进行远程方法调用的时候,就像调用本地方法一样,不需要额外为了完成这个交…

docker 报错

问题说明:我是服务器上面的docker拉到本地30卡想用的,但是失败,报错如下: 服务器上面显存驱动是450,本地30卡驱动是470 nvidia-docker run -it --name 20230821_3 --shm-size 16g -p 10029:22 --privileged 20230821_i…

QT通过ODBC连接GBase 8s数据库(Windows)示例

示例环境: 操作系统:Windows 10 64位数据库及CSDK版本:GBase 8s V8.8_3.0.0_1 64位QT:5.12.0 64位 1,CSDK安装及ODBC配置 1.1,免安装版CSDK 下载免安装版的CSDK驱动,地址:https:…

HTTP协议(JavaEE初阶系列15)

目录 前言: 1.HTTP协议 1.1HTTP协议是什么 1.2HTTP协议的报文格式 1.2.1抓包工具的使用 1.2.2HTTP请求 1.2.3HTTP响应 2.HTTP请求 2.1首行的组成 2.2.1URL的组成 2.2认识“方法”(method) 2.2.1GET方法 2.2.2POST方法 2.2.3GET…

jvm-运行时数据区概述及线程

1.运行时数据区内部结构 不同的jvm对于内存的划分方式和管理机制存在着部分差异 java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机的启动而创建,随着虚拟机的退出而销毁,另外一些则是与线程一一对应的&…

【算法刷题之链表篇(1)】

目录 1.leetcode-82. 删除排序链表中的重复元素 II(1)题目描述(2)方法及思路(一次遍历)(3)代码实现 2.leetcode-19. 删除链表的倒数第 N 个结点(1)题目描述&a…

测试平台metersphere

metersphere可以做接口测试、UI测试、性能测试。 metersphere接口测试底层是jmeter,可以做API管理,快捷调试,接口用例管理,接口自动化场景执行一键选取用例范围,生成测试报告。 会用jmeter,metersphere会…

小程序数据可视化:使用图表和可视化工具展示数据

在当今信息爆炸的时代,数据无疑是最珍贵的资源之一。然而,海量的数据如果不加以整理和展示,很难从中获取有价值的信息。这时候,数据可视化就发挥了重要作用,它能够通过图表和可视化工具将复杂的数据转化为直观的视觉形…

《Java极简设计模式》第04章:建造者模式(Builder)

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 源码地址:https://github.com/binghe001/java-simple-design-patterns/tree/master/j…

ssm+Vue.js在线购物系统源码和论文

ssmVue.js在线购物系统源码和论文049 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势…

手机直播源码开发,协议讨论篇(三):RTMP实时消息传输协议

实时消息传输协议RTMP简介 RTMP又称实时消息传输协议,是一种实时通信协议。在当今数字化时代,手机直播源码平台为全球用户进行服务,如何才能增加用户,提升用户黏性?就需要让一对一直播平台能够为用户提供优质的体验。…

“石头剪刀布”游戏:while、函数自调用实现循环游戏

if…else实现“石头剪刀布”游戏,while、函数自调用实现循环游戏。 (本笔记适合学过if…else的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》&#xff0c…

〔016〕Stable Diffusion 之 模型工具箱和图片背景移除 篇

✨ 目录 🎈 下载插件🎈 基础使用界面🎈 高级使用界面🎈 下载背景移除插件🎈 移除插件使用 🎈 下载插件 由于模型很多,而且底模也非常大,对于空间占用比较大,如果想缩小模…

Nexus2迁移升级到Nexus3

与 Nexus 2.x 相比,Nexus 3.x 为我们提供了更多实用的新特性。SonaType 官方建议我们,使用最新版本 Nexus 2.x 升级到最新版本 Nexus 3.x,并在 Nexus 升级兼容性 一文中为我们提供了各个版本 Nexus 升级到最新版本 Nexus 3.x 的流程&#xff…

《金字塔原理》(表达的逻辑)

前言:在思考和表达上,很多时候显得很混乱,源于不了解结构化思想、表达,如何让话讲得更有逻辑?事做得更有条理?接触到了一本书:《金字塔原理》,通过这本书的学习,希望可以…

把握潮流:服装定制小程序的发展与趋势

随着互联网的快速发展,小程序成为了人们生活中不可或缺的一部分。尤其在服装行业,定制化已经成为了一种趋势。为了满足消费者个性化的需求,服装定制小程序应运而生。 为了方便开发者的设计和制作,我们可以使用第三方的制作平台来创…

Redis数据结构之List

Redis 中列表(List)类型是用来存储多个有序的字符串,列表中的每个字符串成为元素 Eelement),一个列表最多可以存储 2^32-1 个元素。 在 Redis 中,可以对列表两端插入(push)和弹出&am…

【Spring框架】Spring事务的介绍与使用方法

⚠️ 再提醒一次:Spring 本身并不实现事务,Spring事务 的本质还是底层数据库对事务的支持。你的程序是否支持事务首先取决于数据库 ,比如使用 MySQL 的话,如果你选择的是 innodb 引擎,那么恭喜你,是可以支持…

QT中的按钮控件Buttons介绍

目录 Buttons 按钮控件 1、常用属性介绍 2、按钮介绍 2.1QPushButton 普通按钮 2.2QtoolButton 工具按钮 2.3Radio Button单选按钮 2.4CheckButton复选按钮 2.5Commam Link Button命令链接按钮 2.6Dialog Button Box命令链接按钮 Buttons 按钮控件 在Qt里,…

纯手写Tomcat,看不懂你来揍我【附源码、图文详解】

源码放在了文章末尾 理论知识 何为Tomcat Tomcat是一个开源的Servlet容器,它实现了Java Servlet、JavaServer Pages (JSP)、WebSocket等Java EE规范,用于在Web服务器上运行Java Web应用程序。 说的简单点,Tomcat能处理网络传输来的请求。 …