Spark---核心概念(Spark,RDD,Spark的核心构成组件)详解

一、什么是Spark

Spark就是一个集成离线计算,实时计算,SQL查询,机器学习,图计算为一体的通用的计算框架。

二、Spark特点

1、速度快

相比较于MR,官方说,基于内存计算spark要快mr100倍,基于磁盘计算spark要快mr10倍。
原因:
(1)hadoop执行任务启动的是进程,而spark启动的是线程
(2)hadoop将中间结果保存到磁盘,而spark将中间结果保存到内存,也就是基于内存计算
(3)计算和数据的分离
(4)基于DAGScheduler的计算划分
(5)只有一次的Shuffle输出操作

2、Ease of Use

spark提供超过80多个高阶算子函数,来支持对数据集的各种各样的计算,使用的时候,可以使用Java,scala,Python,R非常灵活易用

3、通用性

在一个项目中,既可以使用离线计算,也可以使用其他比如,SQL查询,机器学习,图计算等等,而这是Spark最最最强大的优势,没有之一。

4、runs everyWhere

spark程序可以在多个平台上面运行

三、RDD概述

何为RDD?其实RDD就是一个不可变的scala的并行集合。
Spark的核心概念就是RDD,指的是一个不可变、可分区、里面元素可并行计算的集合,这个数据的全部或者部分可以缓存在内存中,在多次计算间被重用。

1、RDD的特性

(1)弹性
如果内存充足,那集合数据的存储和计算,就都在内存中完成;如果内存不足,需要有一部分数据溢出到磁盘,然后在磁盘完成存储和计算
(2)分布式
他是被分区的,分为多个分区,每个分区分布在集群中的不同worker节点上面,从而让RDD中的数据可以被并行操作。默认情况下,partition是和hdfs中data-block块对应的,spark加载hdfs文件时,一个data-block块对应一个partition。
所以,对RDD的操作,本质上是对着每一个RDD对应分区partition的操作。
(3)数据集
RDD再抽象来说是一种元素集合,包含了数据。也就是存放数据的集合。而Spark就是对这个RDD及其集合功能算子的实现。
(4)RDD之间是存在依赖关系的
可以自动从节点失败中恢复过来。即如果某个节点上的RDD Partition,因为节点故障,导致数据丢失,那么RDD会自动通过自己的数据来源重新计算该Partition。这一切对使用者是透明的,这一切的背后工作都是通过RDD的lineage(血统,血源)特性来实现的。RDD之间的依赖关系,就形成了一个RDD的有向无环图DAG,依赖关系称之为RDD血缘关系或者血统
(5)移动计算优于移动数据
partition提供最佳计算位置,利于数据处理的本地化即计算向数据移动而不是移动数据

四、RDD在Spark中的地位和作用

1、为什么会有Spark

因为传统的并行计算模型无法有效的进行交互式计算;而Spark的使命便是解决这个问题,这也是它存在的价值和理由。

2、Spark如何解决迭代计算

其主要实现思想就是RDD,把所有计算的数据保存在分布式的内存中。迭代计算通常情况下都是对同一个数据集做反复的迭代计算,数据在内存中将大大降低IO操作。这也是Spark设计的核心:内存计算。

3、Spark如何实现交互式计算

因为Spark是用scala语言实现的,Spark和scala能够紧密的集成。所以Spark可以完美的运用scala的解释器,使得其中的scala可以向操作本地集合对象一样轻松的操作分布式数据集。

4、Spark和RDD的关系

可以理解为:RDD是一种具有容错性,基于内存的集群计算抽象方法,Spark则是这个抽象方法的实现。

五、核心名词解释

1、ClusterManager:在Standalone(上述安装的模式,也就是依托于spark集群本身)模式中即为Master(主节点),控制整个集群,监控Worker。在YARN模式中为资源管理器ResourceManager(国内spark主要基于yarn集群运行,欧美主要基于mesos来运行)。
2、Application:Spark的应用程序,包含一个Driver program和若干Executor。
3、SparkContext:Spark应用程序的入口,负责调度各个运算资源,协调各个Worker Node上的Executor。
4、Worker:从节点,负责控制计算节点,启动Executor。在YARN模式中为NodeManager,负责计算节点的控制,启动的进程叫Container。
5、Driver:运行Application的main()函数并创建SparkContext(是spark中最重要的一个概念,是spark编程的入口,作用相当于mr中的Job)。
6、Executor:执行器,在worker node上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executors。
7、DAGScheduler:实现将Spark作业分解成一到多个Stage,每个Stage根据RDD的Partition个数决定Task的个数,然后生成相应的Task set放到TaskScheduler中。DAGScheduler就是Spark的大脑,中枢神经。
8、TaskScheduler:将任务(Task)分发给Executor执行。
9、Stage:一个Spark作业一般包含一到多个Stage。
10、Task:一个Stage包含一到多个Task,通过多个Task实现并行运行的功能。task的个数由rdd的partition分区决定,spark是一个分布式计算程序,所以一个大的计算任务,就会被拆分成多个小的部分,同时进行计算。一个partition对应一个task任务。
11、Transformations:转换(Transformations) (如:map, filter, groupBy, join等),Transformations操作是Lazy的,也就是说从一个RDD转换生成另一个RDD的操作不是马上执行,Spark在遇到Transformations操作时只会记录需要这样的操作,并不会去执行,需要等到有Actions操作的时候才会真正启动计算过程进行计算。
12、Actions:操作/行动(Actions)算子 (如:count, collect, foreach等),Actions操作会返回结果或把RDD数据写到存储系统中。Actions是触发Spark启动计算的动因。

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

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

相关文章

【智能算法】CEC2017测试集

目录 1.背景2.CEC2017测试集3.参考文献 1.背景 IEEE 国际进化计算大会(IEEE Congress on Evolutionary Computation,IEEE CEC)是进化计算领域中规模最大、影响最重要的会议之一。为了公平评估算法的优化性能,该会议在优化竞赛中提…

工作必备!快速了解多微信高效管理工具

在如今社交媒体和移动即时通信的时代,微信已成为人们工作和生活中不可或缺的一部分。而对于那些需要同时管理多个微信账号的用户来说,微信管理工具则是一项绝对必备的利器。 1、多微信同时登录 通过微信管理系统,我们可以在同一个界面内同时…

2024.4.18

思维导图 数据库 #include <myhead.h> //添加学生信息 void insert_stu(sqlite3* sq,char* errMsg) {char text[128];int ID,age,height;char name[10];scanf("%d%s%d%d",&ID,name,&age,&height);sprintf(text,"insert into Student values …

【论文速读】| 大语言模型是边缘情况模糊测试器:通过FuzzGPT测试深度学习库

本次分享论文为&#xff1a;Large Language Models are Edge-Case Fuzzers: Testing Deep Learning Libraries via FuzzGPT 基本信息 原文作者&#xff1a;Yinlin Deng, Chunqiu Steven Xia, Chenyuan Yang, Shizhuo Dylan Zhang, Shujing Yang, Lingming Zhang 作者单位&…

v-infinite-scroll 无限滚动组件

npm install vue-infinite-scroll --save <template><div class"showcase" v-infinite-scroll"loadMore" infinite-scroll-disabled"busy" infinite-scroll-distance"10"><!-- 判断列表是否为空 --><div class&q…

数学建模--蒙特卡罗法MATLAB代码保姆式解析

1.简单介绍 2.思想的实际运用 我们利用蒙特卡罗法的思想求解圆周率π的值&#xff0c;这里求得的肯定是近似值&#xff0c;我们是通过大量的模拟实验&#xff0c;利用概率求解的&#xff0c;但是这个值和我们的精确值之间还是有一定的误差的&#xff1b; 我们的思想就是在半径为…

npm怎么迁移到pnpm

下载的vue3模板用到了pnpm&#xff0c;就安装了一下 但是安装之后使用pnpm install 就发现包全被移动到ignored文件夹下面了,还报错 PS G:\Projects\gitProeject\TS_front> pnpm installWARN  Moving commitlint/config-conventional that was installed by a different …

基于springboot+vue+Mysql的论坛管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

清晰讲明 BFS实现的拓扑排序

前提&#xff1a; 图&#xff1a;就是结点和边组成的数据结构 有向无环图&#xff1a;就是每一个边都有方向&#xff0c;且无法构成一个环&#xff0c;只有没有环的图才能进行拓扑排序&#xff0c;所以拓扑排序也能用来证明该图有没有环 在有向无环图中有两个概念&#xff1…

原生支付宝小程序 - 获取“dom“元素

在支付宝中是不能获取到dom元素的&#xff0c;但是我门可以借助my.createSelectorQuery来实现 Page({data:{sq:{}},onLoad(){},onShow(){this.setData({sq: my.createSelectorQuery()})} })通过axml来查看 <view>{{sq}} </view>会发现它只是一个Object&#xff0…

面试算法-177-二叉搜索树中第K小的元素

题目 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#xff1a;1 解 class Solution…

鸿蒙TypeScript学习第19天【命名空间】

1、TypeScript 命名空间 命名空间一个最明确的目的就是解决重名问题。 假设这样一种情况&#xff0c;当一个班上有两个名叫小明的学生时&#xff0c;为了明确区分它们&#xff0c;我们在使用名字之外&#xff0c;不得不使用一些额外的信息&#xff0c;比如他们的姓&#xff0…

2024年华中杯数学建模A题思路与论文助攻

题目A 题 太阳能路灯光伏板的朝向设计问题 太阳能路灯由太阳能电池板组件部分&#xff08;包括支架&#xff09;、 LED 灯头、控制箱 &#xff08;包含控制器、蓄电池&#xff09;、市电辅助器和灯杆几部分构成。太阳能电池板通 过支架固定在灯杆上端。太阳能电池板也叫光伏板…

低成本的云MES更合适中小企业

长期以来&#xff0c;面对激烈的竞争压力&#xff0c;我国传统的制造企业逐渐从大规模、低成本向多品种、小批量、定制化转型&#xff0c;逐步由粗放式管理向精益化管理靠拢&#xff0c;如ERP、CAD、PLM、OA等多个信息化系统已在我国制造企业中得到了较为广泛的应用&#xff0c…

python 无处不在的二分搜索

我们知道二分查找算法。二分查找是最容易正确的算法。我提出了一些我在二分搜索中收集的有趣问题。有一些关于二分搜索的请求。我请求您遵守准则&#xff1a;“我真诚地尝试解决问题并确保不存在极端情况”。阅读完每个问题后&#xff0c;最小化浏览器并尝试解决它。 …

【个人博客搭建】(8)全局异常处理

1、net 8 webapi 全局异常处理: 在 .NET 8 WebAPI 中&#xff0c;全局异常处理可以通过实现**IExceptionHandler接口或使用IAsyncExceptionFilter接口来完成**。 首先&#xff0c;关于IExceptionHandler接口&#xff0c;它是ASP.NET Core中用于全局异常处理的新抽象。这个接口有…

刷好题,固基础-12

复盘c中string字符串的操作 reverse(开始位置&#xff0c;结束位置)&#xff1b;--左闭右开&#xff0c;实现字符串[l, r]区间的逆置 string s; int l, r; reverse(s.begin()l, s.begin()r1); s.substr(要截取的位置&#xff0c;要截取的长度)&#xff1b;--截取位置从1开始…

【C++】priority_queue(优先级队列介绍、仿函数控制大堆小堆、模拟实现)

一、优先级队列 1.1介绍 优先级队列&#xff08;Priority Queue&#xff09;是一种特殊的数据结构&#xff0c;其并不满足队列先进先出的原则&#xff0c;它结合了队列和堆的特点&#xff0c;允许我们在其中插入元素&#xff0c;并且能够保证任何时候提取出的元素都是当前队列…

不同性能压测工具对比

阿里云PTS 性能测试PTS&#xff08;Performance Testing Service&#xff09;是阿里云一款商业化的性能测试工具。支持按需发起压测任务&#xff0c;可支持百万并发、千万TPS流量发起能力&#xff0c;100%兼容JMeter。PTS支持的场景编排、API调试、流量定制、流量录制等功能&am…

服务器被入侵后该做些什么

服务器被入侵后该做些什么 一、备份数据&#xff1a;尽快备份所有数据&#xff0c;特别是敏感数据和重要文件。可以使用备份软件或云存储来确保数据的可靠性。 二、关闭系统&#xff1a;断开网络连接并关闭系统&#xff0c;以防止进一步的gong击。 三、检查漏洞&#xff1a;检…