Spark 框架概述

news2025/4/28 17:02:16

目录

一、Spark 是什么

1.1 统一分析引擎? 

二、Spark 风雨十年

​三、Spark VS Hadoop(MapReduce)

3.1 面试题:Hadoop 的基于进程的计算和 Spark 基于线程方式优缺点?

四、Spark 四大特点 

​4.1 速度快 

4.2 易于使用 

4.3 通用性强 

​4.4 运行方式 

五、Spark 框架模块

5.1 介绍 

5.2 Spark 的运行模式 

5.3 Spark 的架构角色 

5.3.1 YARN 角色回顾 

​5.3.2 Spark 运行角色 


 

一、Spark 是什么

Apache Spark 是用于大规模数据(large-scala data)处理的统一(unified)分析引擎。

        Spark 最早源于一篇论文 Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing,该论文是由加州大学柏克莱分校的 Matei Zaharia 等人发表的。论文中提出了一种弹性分布式数据集(即 RDD)的概念。 

        翻译过来就是:RDD 是一种分布式内存抽象,其使得程序员能够在大规模集群中做内存运算,并且有一定的容错方式。而这也是整个 Spark 的核心数据结构,Spark 整个平台都围绕着 RDD 进行。 

        简而言之,Spark 借鉴了 MapReduce 思想发展而来,保留了其分布式并行计算的优点并改进了其明显的缺陷。让中间数据存储在内存中提高了运行速度、并提供丰富的操作数据的 API 提高了开发速度。 

1.1 统一分析引擎? 

        Spark 是一款分布式内存计算的统一分析引擎。其特点就是对任意类型的数据进行自定义计算。Spark 可以计算:结构化、半结构化、非结构化等各种类型的数据结构,同时也支持使用 Python、Java、Scala、R 以及 SQL 语言去开发应用程序计算数据。

Spark 的适用面非常广泛,所以,被称之为统一的(适用面广)的分析引擎(数据处理) 。

二、Spark 风雨十年

        Spark 是加州大学伯克利分校 AMP 实验室(Algorithms Machines and People Lab)开发的通用大数据处理框架。

Spark 的发展历史,经历过几大重要阶段,如下图所示: 

        从下面的 Stack Overflow 的数据可以看出,2015 年开始 Spark 每月的问题提交数量已经超越 Hadoop,而 2018 年 Spark Python 版本的 API PySpark 每月的问题提交数量也已超过 Hadoop。2019 年排名 Spark 第一,PySpark 第二;而十年的累计排名是 Spark 第一,PySpark 第三。按照这个趋势发展下去,Spark 和 PySpark 在未来很长一段时间内应该还会处于垄断地位。 

三、Spark VS Hadoop(MapReduce)

尽管 Spark 相对于 Hadoop 而言具有较大优势,但 Spark 并不能完全替代 Hadoop:

  • 在计算层面,Spark 相比较 MR(MapReduce)有巨大的性能优势,但至今仍有许多计算工具基于 MR 构架,比如非常成熟的 Hive;
  • Spark 仅做计算,而 Hadoop 生态圈不仅有计算(MR)也有存储(HDFS)和资源管理调度(YARN),HDFS 和 YARN 仍是许多大数据体系的核心架构。 

3.1 面试题:Hadoop 的基于进程的计算和 Spark 基于线程方式优缺点?

答案:Hadoop 中的 MR 中每个 map/reduce task 都是一个 java 进程方式运行,好处在于进程之间是互相独立的,每个 task 独享进程资源,没有互相干扰,监控方便,但是问题在于 task 之间不方便共享数据,执行效率比较低。比如多个 map task 读取不同数据源文件需要将数据源加载到每个 map task 中,造成重复加载和浪费内存。而基于线程的方式计算是为了数据共享和提高执行效率,Spark 采用了线程的最小的执行单位,但缺点是线程之间会有资源竞争。 

【扩展阅读】:线程基本概念

  • 线程是 CPU 的基本调度单位;
  • 一个进程一般包含多个线程, 一个进程下的多个线程共享进程的资源;
  • 不同进程之间的线程相互不可见;
  • 线程不能独立执行;
  • 一个线程可以创建和撤销另外一个线程 。

四、Spark 四大特点 

4.1 速度快 

        由于 Apache Spark 支持内存计算,并且通过 DAG(有向无环图)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比 Hadoop 的 MapReduce 快 100 倍,在硬盘中要快 10 倍。 

Spark 处理数据与 MapReduce 处理数据相比,有如下两个不同点:

  1. Spark 处理数据时,可以将中间处理结果数据存储到内存中;
  2. Spark 提供了非常丰富的算子(API),可以做到复杂任务在一个 Spark 程序中完成。

4.2 易于使用 

        Spark 的版本已经更新到 Spark 3.2.0(截止日期 2021.10.13),支持了包括 Java、Scala、Python 、R 和 SQL 语言在内的多种语言。为了兼容 Spark2.x 企业级应用场景,Spark 仍然持续更新 Spark2 版本。 

4.3 通用性强 

        在 Spark 的基础上,Spark 还提供了包括 Spark SQL、Spark Streaming、MLib 及GraphX 在内的多个工具库,我们可以在一个应用中无缝地使用这些工具库。 

4.4 运行方式 

        Spark 支持多种运行方式,包括在 Hadoop 和 Mesos 上,也支持 Standalone 的独立运行模式,同时也可以运行在云 Kubernetes(Spark 2.3 开始支持)上。 

对于数据源而言,Spark 支持从 HDFS、HBase、Cassandra 及 Kafka 等多种途径获取数据。 

五、Spark 框架模块

5.1 介绍 

        整个 Spark 框架模块包含:Spark Core、Spark SQL、Spark Streaming、Spark GraphX、Spark MLlib,而后四项的能力都是建立在核心引擎之上。

  • Spark Core:Spark 的核心,Spark 核心功能均由 Spark Core 模块提供,是 Spark 运行的基础。Spark Core 以 RDD 为数据抽象,提供 Python、Java、Scala、R 语言的 API,可以编程进行海量离线数据批处理计算。
  • SparkSQL:基于 SparkCore 之上,提供结构化数据的处理模块。SparkSQL 支持以 SQL 语言对数据进行处理,SparkSQL 本身针对离线计算场景。同时基于 SparkSQL,Spark 提供了 StructuredStreaming 模块,可以以 SparkSQL 为基础,进行数据的流式计算。
  • SparkStreaming:以 SparkCore 为基础,提供数据的流式计算功能。
  • MLlib:以 SparkCore 为基础,进行机器学习计算,内置了大量的机器学习库和 API 算法等。方便用户以分布式计算的模式进行机器学习计算。
  • GraphX:以 SparkCore 为基础,进行图计算,提供了大量的图计算 API,方便用于以分布式计算模式进行图计算。 

5.2 Spark 的运行模式 

Spark提供多种运行模式,包括:

  • 本地模式(单机)

本地模式就是以一个独立的进程,通过其内部的多个线程来模拟整个 Spark 运行时环境。

  • Standalone 模式(集群)

Spark 中的各个角色以独立进程的形式存在,并组成 Spark 集群环境。

  • Hadoop YARN 模式(集群)

Spark 中的各个角色运行在 YARN 的容器内部,并组成 Spark 集群环境。

  • -Kubernetes 模式(容器集群)

Spark 中的各个角色运行在 Kubernetes 的容器内部,并组成 Spark 集群环境。

5.3 Spark 的架构角色 

5.3.1 YARN 角色回顾 

YARN 主要有 4 类角色,从 2 个层面去看:

资源管理层面

  • 集群资源管理者(Master):ResourceManager
  • 单机资源管理者(Worker):NodeManager

任务计算层面

  • 单任务管理者(Master):ApplicationMaster
  • 单任务执行者(Worker):Task(容器内计算框架的工作角色) 

5.3.2 Spark 运行角色 

        注:正常情况下 Executor 是干活的角色,不过在特殊场景下(Local 模式)Driver 可以即管理又干活。 

上一篇文章:HDFS 架构剖析_Stars.Sky的博客-CSDN博客

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

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

相关文章

使用jib-maven-plugin插件构建镜像并推送至私服Harbor

jib-maven-plugin 插件配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apa…

19-springcloud(下)

一 分布式配置中心 1 Spring Cloud Config 分布式系统面临问题 在分布式系统中&#xff0c;由于服务数量巨多&#xff0c;为了方便服务配置文件统一管理&#xff0c;实时更新&#xff0c;所以需要分布式配置中心组件。 什么是Spring Cloud Config Spring Cloud Config项目是…

20230913java面经整理

1.hashmap为什么重写hashcode必须重写equals&#xff1f;不重写hashcode&#xff1f; hashcode判断对象存放的索引值&#xff0c;equals判断相同索引下对象是否相同&#xff0c;不同则存放&#xff08;链表&#xff09; hashcode提升查询效率&#xff0c;通过哈希计算&#xf…

【【萌新编写riscV之计算机体系结构之CPU 总二】】

萌新编写riscV之计算机体系结构之CPU 总二&#xff08;我水平太差总结不到位&#xff09; 在学习完软件是如何使用之后 我们接下来要面对的问题是 整个程序是如何运转的这一基本逻辑 中央处理器(central processing unit&#xff0c;CPU)的任务就是负责提取程序指令&#xff0…

2023年9月16日(星期六)骑行新海晏村

2023年9月16日 (星期六)&#xff1a;骑行新海晏村&#xff0c;早8:30到9:00&#xff0c; 大观楼门囗集合&#xff0c;9:30准时出发 【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点: 大观楼门囗集合&#xff0c;家住东&#xff0c;南&#xff0c…

Redis常用应用场景

Redis是一款开源的基于内存的键值存储系统&#xff0c;它提供了多种数据结构和丰富的功能&#xff0c;适用于各种不同的应用场景。以下是Redis常用的应用场景&#xff1a; 1.缓存&#xff1a;Redis最常见的用途就是作为缓存。由于Redis存储在内存中&#xff0c;读取速度非常快…

9.13-广读最新研究方向论文核心思路汇总

思路借鉴 GRILL: Grounded Vision-language Pre-training via Aligning Text and Image Regions 关键词&#xff1a; 对象文本对齐 摘要&#xff1a;泛化到未见过的任务是少量样本学习者在不熟悉的任务上实现更好零散视觉表现的重要能力。然而&#xff0c;这种泛化到视觉语言任…

通过小程序实现微信扫码授权登录,网站接入微信扫码登录功能(永久免费)

需求 网站如果想要实现微信扫码登录其实有很多种方案&#xff0c;常见的方案就是微信开放平台和微信公众号服务号。前者是目前大部分网站并且是微信认可的一种方式&#xff0c;后者是开发者发现服务号具备扫码关注后即可获取用户基本信息的能力后而开发的一种方式。 而这两者…

idea创建一个微服务项目

idea创建一个微服务项目 前提&#xff1a;懂得创建基于pom 的 springboot项目 1.像平时创建Maven项目一样创建一个项目 2.删掉src文件&#xff0c;只剩下下面的东西 3.基于这个项目创建model&#xff0c;model也是一个Maven项目&#xff0c;基于springboot mvc 都行&#xff…

openGauss学习笔记-68 openGauss 数据库管理-创建和管理普通表-向表中插入数据

文章目录 openGauss学习笔记-68 openGauss 数据库管理-创建和管理普通表-向表中插入数据68.1 背景信息68.2 操作步骤68.2.1 向表customer_t1中插入一行68.2.2 向表中插入多行68.2.3 从指定表插入数据到当前表68.2.4 删除备份表 openGauss学习笔记-68 openGauss 数据库管理-创建…

Python 图形化界面基础篇:添加复选框( Checkbutton )到 Tkinter 窗口

Python 图形化界面基础篇&#xff1a;添加复选框&#xff08; Checkbutton &#xff09;到 Tkinter 窗口 引言什么是 Tkinter 复选框&#xff08; Checkbutton &#xff09;&#xff1f;步骤1&#xff1a;导入 Tkinter 模块步骤2&#xff1a;创建 Tkinter 窗口步骤3&#xff1a…

【数据分享】2006-2021年我国城市级别的排水和污水处理相关指标(20多项指标)

《中国城市建设统计年鉴》中细致地统计了我国城市市政公用设施建设与发展情况&#xff0c;在之前的文章中&#xff0c;我们分享过基于2006-2021年《中国城市建设统计年鉴》整理的2006—2021年我国城市级别的市政设施水平相关指标、2006-2021年我国城市级别的各类建设用地面积数…

Vue3表单

文章目录 Vue3表单1. 概念2. 输入框3. 复选框4. 单选按钮5. select下拉列表5.1 下拉列表单选5.1 下拉列表多选时绑定到数组5.3 使用 v-for 循环输出选项 6. 值绑定7. 修饰符7.1 .lazy7.2 .number7.3 .trim Vue3表单 1. 概念 可以用 v-model 指令在表单 、 及 等元素上创建双向…

微信内测新功能:“微信分期”来了!

微信作为一款社交 App&#xff0c;早已成为了现在人们日常生活中不可缺少的一部分。 随着生态不断完善&#xff0c;它所涵盖的功能也是越来越多。 据镭射财经&#xff0c;微信近日正在测试一款名为“微信分期”的全系消费信贷产品。功能入口位于微信钱包中&#xff0c;资金方为…

预约微信小程序源码系统制作搭建 适用于多场景 支持万能DIY功能

分享一个预约微信小程序源码系统&#xff0c;适用于多种预约场景&#xff0c;含完整代码包前端后端详细的搭建教程&#xff0c;支持万能DIY功能&#xff0c;让你轻松开发制作一个属于自己的想要的预约小程序。 一、预约微信小程序源码系统制作搭建的基本步骤和注意事项&#xf…

【Flink实战】Flink 商品销量统计-实战Bahir Connetor实战存储 数据到Redis6.X

&#x1f680; 作者 &#xff1a;“大数据小禅” &#x1f680; 文章简介 &#xff1a;Flink 商品销量统计-实战Bahir Connetor实战存储 数据到Redis6.X &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 目录导航 Flink怎么操作RedisFlink 商品销量统…

宿舍考勤安全系数?这个答案全国统一!

在现代教育和住宿管理中&#xff0c;确保学生或员工的宿舍考勤管理变得越来越重要。传统的考勤方法可能受到人为错误和滥用的威胁&#xff0c;同时也可能耗费大量时间和资源。 人脸识别技术已经在各个领域展现了强大的潜力。它不仅提高了安全性&#xff0c;还改善了考勤管理的效…

GP08|财务估值因子过滤实盘小市值

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 大家好&#xff0c;今天我们来分享gp08策略。千呼万唤始出来&#xff0c;由于xxx原因&#xff08;不便说&#xff0c;好奇的可以私聊我&#xff09;&#xff0c;我们从9月份开始&#xff0c;后面分享的策…

深入解析顺序表:揭开数据结构的奥秘,掌握顺序表的精髓

&#x1f493; 博客主页&#xff1a;江池俊的博客⏩ 收录专栏&#xff1a;数据结构探索&#x1f449;专栏推荐&#xff1a;✅C语言初阶之路 ✅C语言进阶之路&#x1f4bb;代码仓库&#xff1a;江池俊的代码仓库&#x1f525;编译环境&#xff1a;Visual Studio 2022&#x1f38…

包装类、多线程的基本使用

包装类 1.基本数据类型对应的引用数据类型(包装类) 1.概述:所谓的包装类就是基本类型对应的类(引用类型),我们需要将基本类型转成包装类,从而让基本类型具有类的特性(说白了,就是将基本类型的数据转成包装类,就可以使用包装类中的方法来操作此数据)2.为啥要学包装类:a.将来有…