欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 【Spark计算引擎----上篇:(全网最详细)带你从零基础通往精通之路】

【Spark计算引擎----上篇:(全网最详细)带你从零基础通往精通之路】

2024/10/24 1:51:36 来源:https://blog.csdn.net/zjm521521/article/details/140816327  浏览:    关键词:【Spark计算引擎----上篇:(全网最详细)带你从零基础通往精通之路】

前言:
💞💞大家好,我是书生♡,本阶段和大家一起分享和探索大数据技术–spark计算引擎,本篇文章主要讲述了:spark的概念,spark的起源,Spark的计算框架,Spark组成架构,Spark部署方式,Spark开发方式等等。欢迎大家一起探索讨论!!!
💞💞代码是你的画笔,创新是你的画布,用它们绘出属于你的精彩世界,不断挑战,无限可能!

个人主页⭐: 书生♡
gitee主页🙋‍♂:闲客
专栏主页💞:大数据开发
博客领域💥:大数据开发,java编程,前端,算法,Python
写作风格💞:超前知识点,干货,思路讲解,通俗易懂
支持博主💖:关注⭐,点赞、收藏⭐、留言💬

目录

  • 1. Spark的概念
  • 2. Spark的起源
  • 3. Spark和Hadoop的区别
  • 4. Spark特性
  • 5. Spark架构--流程
    • 5.1 MapReduce架构--流程
    • 5.2 HIve计算流程
    • 5.3 Spark计算流程
    • 5.4 Spark组成架构
    • 5.5 Spark Core 和RDD的关系
      • 5.5.1 RDD是什么
      • 5.5.1 Spark Core是什么
      • 5.5.3 Spark Core 和RDD的关系
  • 6. Spark部署方式
  • 7. spark开发方式
    • 7.1 交互式开发
      • 7.1.1 Scala交互式开发
      • 7.1.2 Python交互式开发
    • 7.2 脚本式开发
  • 8. PyCharm远程开发配置

1. Spark的概念

定义:

  • Apache Spark是专为大规模数据处理而设计的快速通用的分布式计算引擎(基于内存),是开源的类Hadoop MapReduce的通用分布式计算框架。和MapReduce一样,都是完成大规模数据的计算处理。
  • Spark 被设计用于处理诸如批处理、流处理、机器学习、图计算等多种类型的数据处理任务,并且可以在各种数据源上运行,包括结构化与非结构化的数据。
    在这里插入图片描述

RDD是整个 Spark 的核心数据结构,Spark整个平台都围绕着RDD进行

在这里插入图片描述
小结:

  • Spark 保留了分布式并行计算的优点并改进了其明显的缺陷。
  • 中间数据存储在内存中
  • 提供丰富的操作数据的API提高了开发速度。

2. Spark的起源

在这里插入图片描述

3. Spark和Hadoop的区别

HadoopSpark
类型分布式存储和处理大规模数据的框架,包含计算、存储、调度分布式计算引擎
场景大规模数据的批处理(离线)迭代计算、交互式计算、流计算(实时)
价格对机器要求低,便宜对内存有要求,相对较贵
编程范式Map+Reduce,API 较为底层,算法适应性差API 较为顶层,方便使用
数据存储结构MapReduce中间计算结果在HDFS磁盘上,速度慢RDD中间运算结果在内存中,速度快
运行方式Task以进程方式执行Task以线程方式执行

Spark能完全取代Hadoop? —》不能

  • Spark主要用于替代Hadoop中的MapReduce计算模型。存储依然可以使用HDFS,但是中间结果可以存放在内存中,内存数据的读写速度要比磁盘快的多,所以Spark的计算速度要比MapReduce快
  • Spark已经很好地融入了Hadoop生态圈,它可以借助于YARN实现资源调度管理,借助于HDFS实现分布式存储

注意:Presto也是基于内存计算的,Presto不适合海量数据处理,而且不能创建库表。Spark对海量数据在内存上的计算做了优化,内存不足是会将结果存在磁盘上,适合海量数据处理,并且可以进行库表创建

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

Hadoop MapReduce (基于进程)

  • 优点:

容错性: MapReduce 框架提供了强大的容错机制,当任务失败时,它会自动重新调度失败的任务。 大规模数据处理:
适用于处理大规模的数据集,因为每个Map或Reduce任务都是独立运行的,可以并行执行。

  • 缺点:

高延迟: MapReduce 中的进程启动和关闭成本较高,导致较高的延迟。 不适合迭代计算:
对于需要多次迭代的算法,每次迭代都需要读取和写入磁盘,效率较低。

Apache Spark (基于线程)

  • 优点:

内存计算: Spark 可以将中间结果缓存在内存中,减少磁盘I/O操作,从而提高处理速度。
低延迟: 基于线程的执行模型减少了任务启动的开销,提高了整体性能。
支持多种类型的数据处理:如批处理、流处理、机器学习等。

  • 缺点:

内存消耗:内存中的数据存储可能会导致较大的内存占用
线程安全问题:多线程并发访问共享资源时需要考虑线程安全问题。
资源竞争:在多任务环境下,多个Spark作业可能会竞争有限的资源,影响性能。

进程和线程的区别:

  • 进程是操作系统资源分配的基本单位,分配资源需要花费时间
  • 线程是处理器任务调度和执行的基本单位,使用进程创建的资源执行任务
  • 一个进程一般包含多个线程, 一个进程下的多个线程共享进程的资源
  • 进程之间不共享资源
  • 不同进程之间的线程相互不可见
  • 线程不能独立执行,必须依附在进程中执行

4. Spark特性

Spark四大特性:高效性易用性通用性兼容性

  • 高效性

    计算速度快,由于Apache Spark支持内存计算,并且是通过线程执行计算任务,所以在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快10倍。

  • 易用性

    支持多种编程语言开发 (Python,Java,Scala,SQL,R等),降低了学习难度

  • 通用性

    • 支持多种计算方式
      • RDD计算 -> Spark core
      • SQL计算(离线计算)-> Spark SQL
      • 图计算 -> Spark GraphX
      • 机器学习计算 -> Spark MLlib
      • 流式数据计算(实时数仓中使用)-> Spark Streaming
    • 支持多种开发方式
      • 交互式开发 -> 通过输入命令完成程序运行
      • 脚本式开发 -> 通过编写代码文件完成程序运行
  • 兼容性

    • 支持三方工具接入
      • 数据存储工具
        • hdfs
        • kafka
        • hbase
        • es
        • mysql
      • 资源调度工具
        • yarn
        • standalone(spark自带)
        • mesos
      • 高可用工具
        • zookeeper
    • 支持多种操作系统
      • Linux
      • Windows
      • Mac

5. Spark架构–流程

5.1 MapReduce架构–流程

在这里插入图片描述

  • 客户端提交一个MR程序给ResourceManager(校验请求是否合法…)
  • 如果请求合法,ResourceManager随机选择一个NodeManager用于生成appmaster(应用程序控制者,每个应用程序都单独有一个appmaster)
  • appmaster会主动向ResourceManager应用管理器(application manager)注册自己,告知自己的状态信息,并且保持心跳
  • appmaster会根据任务情况计算自己所需要的container资源(cpu,内存),主动向ResourceManager资源调度器(resource
    scheduler)申请并获取这些container资源
  • appmaster获取到container资源后,把对应指令和container分发给其他NodeManager,让NodeManager启动task任务(maptask,reducetask)
  • NodeManager要和appmaster保持心跳,把自己任务计算进度和状态信息等同步给appmaster,(注意当maptask任务完成后会通知appmaster,appmaster接到消息后会通知reducetask去maptask那儿拉取数据)直到最后任务完成
  • appmaster会主动向ResourceManager注销自己(告知ResourceManager可以把自己的资源进行回收了,回收后自己就销毁了)

5.2 HIve计算流程

在这里插入图片描述

HIve就是将HIveSql语言转换为MR的计算语言,其他的和MR一样

5.3 Spark计算流程

在这里插入图片描述

Spark就是将SparkSql语言转换为Spark的RDD计算方式,中间数据存储在内存上,最终结果是存储在HDFS上的

5.4 Spark组成架构

  • Spark Core: 基于RDD计算, 处理非结构化数据(多维数据), spark的核心数据结构, 所有组件基于RDD进行计算
  • Spark SQL: 基于DataFrame/DataSet计算, 处理结构化数据, 提供了DSL方式和SQL两种编写方式。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。
  • Spark/Structured Streaming: 流计算, 进行实时计算。Spark Streaming允许程序能够像普通RDD一样处理实时数据
  • Spark ML/MLlib: 机器学习, AI项目开发, 推荐系统 了解
  • Spark Graphx: 图计算组件, 控制图、并行图操作和计算的一组算法和工具的集合

在这里插入图片描述

5.5 Spark Core 和RDD的关系

5.5.1 RDD是什么

  • RDD (Resilient Distributed Datasets)

RDD弹性分布式数据集 的缩写,它是 Apache Spark 中最基本的数据抽象。RDD 代表一个不可变的、可分区的、包含元素的集合,这些元素可以并行地在集群的不同节点上进行计算。

以下是 RDD 的一些关键特点:

  1. 不可变性:一旦创建,RDD 就不能改变其内部的状态或结构。
  2. 分区:RDD 可以被划分为多个分区,这些分区可以在集群的不同节点上进行并行处理。
  3. 容错性:RDD 具有自动恢复丢失数据的能力,并且能够从失败中恢复。
  4. 懒加载:许多 RDD 操作都是惰性的,这意味着它们不会立即执行,直到遇到一个行动(action)操作时才会触发实际的计算。
  5. 血统:RDD 之间的转换操作会形成一种依赖关系,这种依赖关系被称为“血统”,Spark 使用血统信息来重新计算丢失的数据分区。

5.5.1 Spark Core是什么

  • Spark Core

Spark Core 是 Apache Spark 的核心组件,提供了 Spark 的基础功能,包括任务调度、内存管理、故障恢复以及与存储系统的交互等。Spark Core 提供了一个运行时环境,支持所有其他的 Spark 模块,例如 Spark SQL、Spark Streaming、MLlib(机器学习库)和 GraphX(图处理库)。

Spark Core 的主要组成部分包括:

  1. RDD API:提供了用于操作和处理数据集的功能。
  2. 任务调度器:负责任务的分配和执行。
  3. 内存管理器:管理应用程序使用的内存。
  4. 容错机制:确保即使在硬件故障的情况下也能正确执行程序。

5.5.3 Spark Core 和RDD的关系

通俗点来说就是:Spark Core是Spark的核心组件,他的底层引擎就是RDD ,Spark Core 的编程模型允许开发者以 RDD 为基础编写应用程序,SparkCore要遵守RDD的规则。
我们如果要使用SparkSQL去Sql语句的话,sql要遵守DataFrame/DataSet类型,然后转化为RDD能执行的代码(DataFrame 和 Dataset API 内部已经实现了对 RDD 的封装和优化。当你使用 DataFrame 或 Dataset API 时,Spark 会自动将这些操作转换为一系列的 RDD 转换操作),但是Spark Core不需要进行转化,即可以直接进行计算执行代码,因为他的底层引擎就是RDD

总结

  • Spark Core 是 Spark 的核心组件,支持 RDD 作为其主要的数据抽象。
  • RDD是一种低级别的数据抽象,适用于更细粒度的控制和自定义逻辑。
  • DataFrame 和 Dataset是更高层次的抽象,提供了更简单的接口和更好的性能优化。
  • 当使用 DataFrame 和 Dataset 时,Spark 会自动将操作转换为RDD 操作,但用户通常不需要关心这个细节。

6. Spark部署方式

Spark部署模式分为Local模式(本地单机模式)和集群模式

  1. Local 模式(本地模式)
  • 本地模式部署,使用一台服务器进行部署,一般用于测试代码,在本地能运行成功的代码在集群下也能运行成功
  1. 集群模式
  • spark on standalone模式
  • Standalone模式被称为集群单机模式。Spark框架自带了完整的资源调度管理服务,可以独立部署到一个集群中,无需依赖任何其他的资源管理系统。在该模式下,Spark集群架构为主从模式,即一台Master节点与多台Slave节点,Slave节点启动的进程名称为Worker。此时集群会存在单点故障问题,利用Zookeeper搭建Spark HA集群解决单点问题。

在这里插入图片描述

集群主从架构

  • cluster manager: 主节点, 管理集群,控制整个集群,监控worker。在YARN模式中为资源管理器
  • worker: 从节点, 控制计算任务, 创建executor或driver进程
  • driver: 进程程序, 负责管理计算任务, 当spark的计算代码程序运行Application的main()函数时就会产生一个drive。
  • executor: 进程程序, 负责执行计算任务, 在executor进程中创建线程执行task
  • spark on yarn模式
  • Yarn模式被称为Spark on Yarn模式,即把Spark作为一个客户端,将作业提交给Yarn服务,由于在生产环境中,很多时候都要与Hadoop使用同一个集群,因此采用Yarn来管理资源调度,可以有效提高资源利用率,Yarn模式又分为Yarn Cluster模式和Yarn Client模式:
  • yarn cluster模式: 由yarn自行选择资源充足的节点创建driver进程, 生成环境中使用
  • yarn client模式: spark应用程序提交到哪台节点, 就由哪台节点创建driver进程, 测试环境中使用

在这里插入图片描述

  • spark on mesos模式 了解
  • mesos资源调度工具管理spark集群资源,Mesos模式被称为Spark on Mesos模式,Mesos与Yarn同样是一款资源调度管理系统,可以为Spark提供服务,由于Spark与Mesos存在密切的关系,因此在设计Spark框架时充分考虑到了对Mesos的集成,但如果你同时运行Hadoop和Spark,从兼容性的角度来看,Spark on Yarn是更好的选择。

7. spark开发方式

spark开发方式有两种:

  • 交互式开发:交互式开发是指在开发过程中,程序员可以即时地测试代码片段或者函数的效果,而不必等到整个程序完成后再进行测试
  • 脚本开发:脚本开发是一种传统的编程方式,程序员编写完整的脚本或程序文件,然后一次性运行整个脚本。这种方式适用于自动化任务和构建大型应用程序。

7.1 交互式开发

交互式开发有 2中模式:

  • Scala交互式开发
  • Python交互式开发

Scala 交互式开发 :
   Scala 是一种静态类型的函数式编程语言,同时兼容面向对象编程风格。在 Scala 中进行交互式开发通常涉及到使用
REPL(Read-Eval-Print Loop)环境,如 scala 命令行工具或集成开发环境中的 Scala REPL 特性。

Python 交互式开发:
   Python 是一种动态类型的解释型语言,广泛应用于数据分析领域。在 Python 中进行交互式开发通常涉及到使用 Jupyter Notebook、Zeppelin 或 IPython shell 等工具。

准备前提:启动Hadoop集群 ,因为Spark的最终结果是存储在HDFS上面的因此我们其实要启动的是HDFS

#  启动Hadoop集群
start-all.sh  

7.1.1 Scala交互式开发

  • 输入spark-shell指令进入终端进行开发
spark-shell

在这里插入图片描述

7.1.2 Python交互式开发

注意:park依赖的Python解析器版本是Python3,系统中如果没有Python3会报如下错误

python3:没有那个文件或目录

  • 安装Anaconda工具, 自带python3解析器

python3的安装可以借助Anconada工具完成,Anconada中自带Python3,同时还集成了各种Python的科学计算库(Pandas,Numpy等)Anconada的安装参考《部署文档》注意安装完成后需要重启服务
init 6

anaconda虚拟环境操作指令:

# 查看所有的虚拟环境
conda info --envs
# 创建新的虚拟环境, 并安装python解析器 conda create -n 虚拟环境名 python=版本号
conda create -n itcast python=3.9
# 切换进入虚拟环境 conda activate 虚拟环境名
conda activate itcast
# 退出虚拟环境
conda deactivate
# 删除 conda remove -n 虚拟环境名 --all
conda remove -n itcast --all

conda activate base # 要先进入base虚拟环境
输入pyspark
进入python终端

在这里插入图片描述
我们可以在这里进行计算(注意:相当在内存中进行了计算,结果不会保留)
在这里插入图片描述

7.2 脚本式开发

先写一个以.py 结尾的文件
然后执行
示例:要自信root下面的sparkshell1.py文件
在这里插入图片描述

我们既可以通过python3 来执行
在这里插入图片描述
注意:

我们需要在文件中 导入 pyspark这个模块,如果环境中没有,那么就会报错,这个时候我们只需要下载pyspark这个模块就可以了。

pip install pyspark==3.1.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

然后再次运行程序,即可以正常的出结果。

注意:一般不同spark应用程序可以使用不同的spark和python解析器, 可以通过以下代码指定spark和python解析器
也可以将以下spark和python解析器路径添加到 /etc/bashrc 文件中, 此时就不需要在每个应用程序中手动指定spark和python解析器(练习时可以设置, 实际工作中不建议使用此方式)

我们在进入etc目录下会有一个bashrc文件

在这里插入图片描述
这个文件里面就存放我们的spark和python解析器的路径,这样我们就可以避免每一次都需要写路径
在这里插入图片描述

8. PyCharm远程开发配置

  • 创建一个pycharm项目
  • 创建好项目之后,我们点击“文件”–“设置”–“SSH连接”
    这一步是为了我们的pycharm能够连接上我们的服务器
    在这里插入图片描述
    我们需要连接几台这里就连接几台
  • 配置远程的Python环境
    pycharm中点击File,选择Settings,选择项目python解析器: Python Interpreter, 添加新的python解析器
    在这里插入图片描述
    我们这里选择我们刚那个连接好的服务器,看python具体在那一台上面
    在这里插入图片描述
    一直点击下一步,然后选择系统解释器,我们可以修改服务器上同步文件夹的位置
    在这里插入图片描述
    最后点击创建就可以了
  • 配置sftp服务

当配置Python远程环境时,指定了远程映射目录后,会自动配置sftp。

  • 使用sftp操作远程服务器的文件
  • 将本地开发的代码自动上传服务器

我们这里选择自动上传文件在这里插入图片描述

下面这个配置是自动生成的,如果出现问题可以自行修改
在这里插入图片描述
在这里插入图片描述

  • 第一个python spark开发程序
    创建一个文件写入数据
    在这里插入图片描述
    右键执行查看结果,是否能正常运行
    在这里插入图片描述
  • 配置数据库
    点击右边的数据库标识
    在这里插入图片描述

点击加号,选择数据源
在这里插入图片描述
进入后填写数据库的链接信息,最后测试通过就可以。第一次连接时候需要下载驱动

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com