Spark 基础教程

2023-10-27

Spark是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。

Spark特点

  • 运行速度快:Spark使用先进的DAG(Directed Acyclic Graph,有向无环图)执行引擎,以支持循环数据流与内存计算,基于内存的执行速度可比Hadoop MapReduce快上百倍,基于磁盘的执行速度也能快10倍。
  • 容易使用:Spark支持使用Scala、Java、Python和R语言进行编程,简洁的API设计有助于用户轻松构建并行程序,并且可以通过Spark Shell进行交互式编程
  • 通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件。这些组件可以无缝整合在一个应用中,足以面对复杂的计算。
  • 运行模式多样:Standalone,Spark on Mesos,Spark on Yarn

Spark相对于Hadoop的优势
Hadoop已经成为大数据技术的事实标准,但是它仍然有很多缺陷,如:MapReduce计算模型延迟过高,无法胜任实时、快速计算的需求,因此只适用于离线批处理的应用场景。
Hadoop的缺点:

  • 表达能力有限,计算都必须转成Map和Reduce两个操作,着并不适合所有的情况,难以描述复杂的数据处理过程。
  • 磁盘IO开销大,每次执行时都需要从磁盘读取数据,并且在计算完成后需要将中间结果写入到磁盘中,IO开销过大
  • 延迟高,一次计算可能需要分解成一系列按照循序执行的MapReduce任务,任务之间的衔接涉及IO开销,会产生较高的延迟

Spark的优点:

  • Spark的计算模式也属于MapReduce,但是不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比MapReduce更加灵活
  • Spark提供了内存计算,中间结果直接放到内存中,带来了更高的迭代运算效率
  • Spark基于DAG的任务调度执行机制,要优于MapReduce的迭代执行机制

Spark最大的特点是将计算数据、中间数据都保存在内存中,大大减少了IO开销。Spark不能替代Hadoop,主要用于替代Hadoop中的MapReduce计算模型。它可以借助Yarn实现资源调度管理,借助HDFS实现分布式存储。

Spark基本概念

  • Master:负责管理worker节点,我们从master节点提交应用
  • Worker:负责与master节点通信,并且管理executor进程
  • RDD:弹性分布式数据集,是分布式内存的一个抽象概念,提供了一种高度共享的内存模型
  • DAG:Directed Acyclic Graph(有向无环图),反应了RDD之间的依赖关系
  • Executor:是运行在工作节点(Worker Node)上的一个进程,负责运行任务,并为应用程序存储数据
  • Driver:Driver进程是应用程序的main函数,并且构建SparkContext对象,当我们提交应用后,变回启动对应的Driver进程,Driver本身会根据我们设置的参数占有一定的资源。
    Driver可以运行在master上,也可以运行在worker(根据部署模式的不同,-deploy-mode端运行在Client上还是Cluster上)。Driver首先会向集群资源管理者申请Spark应用所需的资源,也就是container,用来启动executor。然后,集群资源管理者会根据Spark应用程序所设置的参数在各个Worker上分配一定数量的executor,每个executor都占用一定数量的CPU和Memory。Driver进程会将我们编写的Spark应用代码拆分成多个Stage,每个Stage执行一部分代码片段,并为每个stage创建一批task,然后将task分配到各个executor中执行。
    executor进程在worker节点上,一个worker节点有多个executor进程。每个executor进程有一个线程池,每个线程可以执行一个task,executor执行完task后,将结果返回给Driver。
  • Application:用户编写的Spark应用程序
  • Task:运行在Executor上的工作单元
  • job:一个作业包含多个RDD及作用在RDD上的各自操作
  • stage:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者被称为任务集

Spark结构设计

Spark运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个工作节点上负责具体任务的执行进程(Executor)。集群资源管理器可以是Spark自带的资源管理器,也可以是Yarn等资源管理框架。

在这里插入图片描述
Spark各自概念之间的关系

在Spark中,一个应用(Application)由一个任务控制节点(Driver)和若干个作业(Job)组成。一个作业由多个阶段(Stage)构成,一个阶段由多个任务(Task)组成。当执行一个应用时,任务控制节点会向集群管理器(Cluster Manager)申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后再Executor上执行任务,运行任务结束后,执行结果会返回给任务控制节点,或者写到HDFS或者其他数据库中。

Executor的优点

  1. 利用多线程来执行具体的任务(Hadoop MapReduce采用的是进程模型),减少任务的启动开销
  2. Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,当需要多代迭代计算时,可以将中间结果存储到这个存储模块里,以便下次直接读存储模块里的数据,而不需要读写到HDFS文件系统里,因而有效减少了IO开销;或者在交互式查询场景下,预先将表缓存到该存储系统上,从而提高读写IO性能。

Spark运行基本流程

  1. 当一个Spark应用程序被提交时,首先需要这个应用构建基本的运行环境,即由任务控制节点(Driver)创建一个SparkContext,由SparkContext负责与资源管理器(Cluster Manager)进行通信,以及资源的申请,任务的分配和监控等
  2. 资源管理器为Executor分配资源,并启动Executor进程,Executor运行情况将随着心跳发送给资源管理器上
  3. SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAG调度器(DAGScheduler)进行解析,将DAG图分解为多个"阶段"(每个阶段都是一个任务集),并且计算出各个阶段之间的依赖关系,然后将一个个的任务集提交给底层的任务调度器(TaskScheduler)进行处理;Executor向SparkContext申请任务,任务调度器将任务分发给Executor运行,同时,SparkContext将应用程序发放给Executor。
  4. 任务在Executor上运行,把执行结果反馈给任务调度器,返回反馈给DAG调度器,运行完毕后写入数据释放所有的资源。
    在这里插入图片描述
    Spark运行架构的特点

1 每个应用都有属于自己的Executor进程,并且该进程在应用程序期一直驻留。Executor进程以多线程方式运行任务,减少了多进程任务频繁的启动开销,使得任务执行变得非常高效和可靠。
2 Spark运行过程与资源管理器无关,只要能够获取Executor进程并保持通信即可
3 Executor上有一个BlockManager存储模块,类似于键值存储系统(把内存和磁盘共同作为存储设备),在处理迭代计算任务时,不需要将中间结果写入到HDFS等文件系统,而是直接放到这个存储系统上,后续有需要就可以直接读取;在交互式查询的场景下,也可以把表提前缓存到这个存储系统上,提高IO性能。
4 任务采用了数据本地性和推测执行等优化机制。数据本地性是尽量将计算移到数据所在的节点上进行,即"计算向数据靠拢",因为移动计算比移动数据所占的网络资源要少得多。Spark采用了延迟调度机制,可以在更大的程度上实现执行过程优化。比如,拥有数据的节点当前正被其他的任务占用,那么在这种情况下是否需要将数据移动到其他的空闲节点呢?答案是不一定,因为,如果经过预测发现当前节点结束当前任务的时间,要比移动数据的时间要少,那么调度就会等待,直到当前节点可用。

Spark的部署模式

Spark支持三种典型集群部署模式,即standalone、Spark on Mesos和Spark on Yarn;在企业实际开发环境中,针对不同的应用场景,可用采用不同的部署应用方式,或者采用Spark完全替代原有的Hadoop架构,或者Spark和Hadoop一起部署的方式。

Spark三种部署方式

Spark应用程序在集群上部署运行时,可用由不同的组件为其提供资源管理调度服务(资源包含CPU,内存)。比如,可用使用自带的独立集群管理器(standalone),或者使用Yarn,也可以使用Mesos。因此,Spark包括三种不同类型的集群部署方式,包括standalone,Spark on Yarn和Spark on Mesos。

  1. standalone模式
    与MapReduce1.0框架类似,Spark框架本身自带了完整的资源调度管理服务,可以独立部署到一个集群中,而不需要依赖其它系统来为其提供资源管理调度服务。在架构的设计上,Spark与MapReduce1.0完全一致,都是由一个Master和若干个Slave构成,并且以槽(slot)作为资源分配单位。不同的是,Spark中的槽不再像MapReduce1.0那样分为Map槽和Reduce槽,而是只设计了统一的一种槽提供给各种任务来使用。
  2. Spark on Messos模式
    Messos是一种资源调度管理框架,可以为运行在它上面的Spark提供服务,Spark on Messos模式中,Spark程序所需要的各种资源,都是由Messos负责调度。由于Mesos和Spark有一定的血缘关系,因为,Spark这个框架在进行设计开发的时候,就需要充分考虑了对Mesos的充分支持。因此Spark上运行Mesos要比运行Yarn上更加灵活、自然。目前,Spark官方推荐使用这这模式。
  3. Spark on Yarn模式
    Spark可运行在Yarn之上,与Hadoop进行统一部署,架构如下,资源管理和调度依赖Yarn,分布式存储则依赖HDFS。
    Spark On Yarn支持Client和Cluster模式:通过-deploy-mode指定将Driver端运行在Client还是Cluster。
    在这里插入图片描述
    Hadoop和Spark的统一部署
    一方面,由于Hadoop生态系统中的一些组件所实现的功能,目前不能由Spark取代,比如Storm可以实现毫秒级响应的流计算,但是,Spark则无法做到毫秒级别的响应。
    另一方面,企业中现有的应用,都是基于现有的Hadoop组件开发的,完全转移到Spark上需要一定的成本。因此,在许多企业实际应用中,Hadoop和Spark的统一部署是一种比较现实合理的选择。

由于Hadoop MapReduce、HBase、Storm和Spark等,都可以运行在资源管理框架Yarn之上。因此,可以在Yarn之上统一部署。这些不同的计算框架统一运行在Yarn中,可以有以下的好处

  • 计算资源按需伸缩
  • 不用负载应用混搭,集群利用率高
  • 共享底层存储,避免数据跨集群迁移

在这里插入图片描述
此博客借鉴于饥渴的小苹果的笔记

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 基础教程 的相关文章

  • Spark集群安装部署

    目录 一 环境准备 二 安装步骤 三 使用Standalone模式 四 使用Yarn模式 一 环境准备 由于Spark仅仅是一种计算机框架 不负责数据的存储和管理 因此 通常都会将Spark和Hadoop进行统一部署 由Hadoop中的HD
  • windows下安装spark及hadoop

    windows下安装spark 1 安装jdk 2 安装scala 3 下载spark spark下载地址 3 1安装spark 将下载的文件解压到一个目录 注意目录不能有空格 比如说不能解压到C Program Files 作者解压到了这
  • 【Spark NLP】第 3 章:Apache Spark 上的 NLP

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • SparkSession和sparkSQL

    一 概述 spark 有三大引擎 spark core sparkSQL sparkStreaming spark core 的关键抽象是 SparkContext RDD SparkSQL 的关键抽象是 SparkSession Data
  • Compressed Sparse Column format(CSC)

    CSR Compressed Sparse Row format 和CSC Compressed Spare Column format 都是一种稀疏矩阵的存储格式 这里分别给出实例 假设有如下矩阵 1360
  • Kafka/Spark消费topic到写出到topic

    1 Kafka的工具类 1 1 从kafka消费数据的方法 消费者代码 def getKafkaDStream ssc StreamingContext topic String groupId String consumerConfigs
  • spark算子执行位置研究,driver端?executor端?

    参考资料 https cloud tencent com developer article 1545723 前言 spark算子的执行位置 driver端 还是executor端 这些之前其实没有注意过 最近在学流处理 发现这个还是很重要
  • 基于Spark的电商用户行为实时分析可视化系统(Flask-SocketIO)

    基于Spark的电商用户行为实时分析可视化系统 Flask SocketIO 项目简介 该项目已上线蓝桥课程 有需要的可凭邀请码 UB5mdLbl 学习哦 有优惠 课程地址 https www lanqiao cn courses 2629
  • Spark 从入门到放弃(一)Spark基础概念

    一 Spark基础概念 1 Application Spark应用程序 application 应用 其实就是用spark submit提交的程序 一个application通常包含三部分 从数据源 比方说HDFS 取数据形成RDD 通过R
  • Hudi和Kudu的比较

    与Kudu相比 Kudu是一个支持OLTP workload的数据存储系统 而Hudi的设计目标是基于Hadoop兼容的文件系统 如HDFS S3等 重度依赖Spark的数据处理能力来实现增量处理和丰富的查询能力 Hudi支持Increme
  • 大数据—— Flink 的优化

    目录 一 Flink内存优化 1 1 Flink 内存配置 二 配置进程参数 2 1 场景 2 2 操作步骤 三 解决数据倾斜 3 1 场景描述 3 2 解决方式 3 2 1 数据源的消费不均匀 调整并发度 3 2 2 数据分布不均匀 四
  • spark内存模型

    Spark 1 6 开始使用了统一内存管理模块 UnifiedMemoryManager 并引入了堆外内存 Off heap memory 1 6之前的内存管理就不进行介绍了 spark堆内和堆外内存模型的示意图 注意 堆外内存是依赖于wo
  • Flume之:二、企业开发案例

    Flume之 二 企业开发案例 文章目录 Flume之 二 企业开发案例 三 企业开发案例 1 监控端口数据官方案例 2 实时读取本地文件到HDFS案例 3 实时读取目录文件到HDFS案例 4 flume监控Kafka gt Spark知识
  • 2020-10-24 大数据面试问题

    上周面试数据开发职位主要从公司的视角讲一下记录下面试流水 1 三面技术一轮hr 面到了cto 整体来看是这一周技术含量最高信息量最大的一个 1到4轮过了4个小时 技术上的问题主要问的对数据分层的理解 1 一面自我介绍 目前团队的规模多大 2
  • spark-3.1.2兼容多版本hive

    2 3 9版本Hive的支持 直接在实例化SparkSession时 启用hive支持即可 例如 val spark SparkSession builder appName Spark Hive Example config spark
  • sparkstreamming 消费kafka(2)

    spark streaming提供了两种获取方式 一种是同storm一样 实时读取缓存到内存中 另一种是定时批量读取 这两种方式分别是 Receiver base Direct 一 Receiver base Spark官方最先提供了基于R
  • spark SQL基础教程

    1 sparkSQL入门 sparksql专门用于处理结构化的数据 而RDD还可以处理非结构化的数据 sparksql的优点之一是sparkfsql使用统一的api读取不同的数据 第二个优点是可以在语言中使用其他语言 例如python 另外
  • Spark 配置

    文章目录 1 Spark 配置 1 1 Spark 属性 1 1 1 动态加载Spark属性 1 1 2 查看Spark属性 1 2 环境变量 2 重新指定配置文件目录 3 继承Hadoop集群配置 4 定制的Hadoop Hive配置 1
  • python+django基于Spark的国漫画推荐系统 可视化大屏分析

    国漫推荐信息是现如今社会信息交流中一个重要的组成部分 本文将从国漫推荐管理的需求和现状进行分析 使得本系统的设计实现具有可使用的价 做出一个实用性好的国漫推荐系统 使其能满足用户的需求 并可以让用户更方便快捷地国漫推荐 国漫推荐系统的设计开
  • Spark 中 BroadCast 导致的内存溢出(SparkFatalException)

    背景 本文基于 Spark 3 1 1 open jdk 1 8 0 352 目前在排查 Spark 任务的时候 遇到了一个很奇怪的问题 在此记录一下 现象描述 一个 Spark Application Driver端的内存为 5GB 一直

随机推荐

  • openEuler 22.03-LTS 基础配置

    文章目录 1 设置语言环境 1 1 显示当前语言环境状态 1 2 列出可用的语言环境 1 3 设置语言环境 2 设置键盘 2 1 显示当前设置 2 2 列出可用的键盘布局 2 3 设置键盘布局 3 设置日期和时间 3 1 使用timedat
  • 聚合工程是什么?与微服务有什么区别和联系?

    1 聚合的概念 把项目的各个模块 子工程 聚合在一起构建 一般用于分模块开发 最后整体打包发布 Maven Project独立运行 Maven Module无法独立运行 2 聚合工程开发步骤 1 根项目是一个pom项目 2 子模块 Mave
  • Eigen 简单矩阵运算

    用到 Eigen Core 和 Eigen Dense 模块 矩阵定义 Eigen Matrix lt 数据类型 行数 列数 gt 矩阵名称 已经提供的矩阵类型 Vector3d 向量名称 实质上是 Eigen Matrix
  • Python 中 import 的机制与实现

    转自 http python jobbole com 82604 本文所涉及到的代码在github上 概述 Python 是一门优美简单 功能强大的动态语言 在刚刚接触这门语言时 我们会被其优美的格式 简洁的语法和无穷无尽的类库所震撼 在真
  • pandas简单学习(Spyder)

    1 导入Excel文件 data pd read excel D 下载 PlayTennis xlsx 2 查看数据维度 data7 data shape 3 查看数据类型 type data 4 索引 索引某一列 data1 data D
  • Linux之——添加VIP

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net l1028386804 article details 81347068 转载请注明出处 https blog csdn net l10283868
  • 使用VNA(Vector Network Analyzer)对S参数进行去嵌(二)

    使用VNA Vector Network Analyzer 对S参数进行去嵌 一 小孟boy的博客 CSDN博客 vna测s11公式 去嵌过程 无论是使用 EM 仿真工具创建的简化模型 如一段理想传输线 还是复杂模型用于测试夹具 现在都需要
  • Check failed: registry.count(type) == 1 (0 vs. 1) Unknown solver type: SGD (known types: )

    问题 在xcode下面编译调试caffe cpp时出现 Check failed registry count type 1 0 vs 1 Unknown solver type SGD known types 解决方法 在caffe cp
  • 4PCS、super4PCS粗配准算法理解

    参考了泡泡点云时空的文章4PCS点云粗配准算法介绍 一 4PCS系列的点云配准方法有点类似Ransac 通过找出目标点云和带配准点云中对应的两组点进行旋转平移求解出T 然后在众多的候选T中旋转一组最大重合的T 只是怎么找出对应点方法不一样
  • 关于深度学习中迭代次数iter和epoch等的关系

    1 在深度学习的训练中 epoch指的是所有的数据遍历了几次 而iter指的是整个batchsize输入到网络多少次 如果非得说关系 那 iter batchsize sum photos epoch
  • arch linux 安装教程(包括安装桌面环境,以及一些常用软件,输入法,网易云 等)

    2019 11 03添加 官方关于base组内所删除的包组情况 详细信息参照 wiki archlinux org 关于启动盘制作可以看 windows下安装grub2 可制作多功能U盘 和 grub2各种手动命令引导教程 这两篇文章 说明
  • java中执行js代码块_在Java中执行js代码

    Performance Monitor2 Peformance Counter Performance Counter 是量化系统状态或活动的一个数值 Windows Performance Monitor在一定时间间隔内 默认的取样间隔是
  • 使用timerfd实现定时器功能

    依旧以muduo为例 使用timerfd可以使用与socketfd类型相同的方式在IO复用中使用 使用timerfd create 创建一个timerfd 接着使用timerfd settime 设置定时器的到期时间 我们只需要注册time
  • 基于streamlit的表格展示-完美解决方案

    问题 用streamlit开发web app非常实用 但是streamlit的表格展示非常不友好 只有两个简单的接口函数 st table df 和st dataframe df 对于字段稍微比较多的dataframe显示效果相当不友好 s
  • linux安装中文、中文输入法以及火狐浏览器中文

    emm 今天突然想用下linux版本的web项目 发现进入浏览器后无法输入中文 鹅且也不知道中文输入法的入口 OTZ 摸索了一会 整理出来分享下 这里是分割线 啦啦啦啦 第一步 设置中文 话不多说直接看图 保存好 退出终端 重启系统 界面啥
  • 报错 LINK : fatal error LNK1181: 无法打开输入文件“cxcore.lib”

    转自 http www cnblogs com lxt287994374 archive 2012 11 23 2785274 html vs2010报错 1 gt LINK fatal error LNK1181 无法打开输入文件 cxc
  • C++头文件容器库——vector

    vector的使用 首先添加头文件 include
  • GDI+使用步骤

    相比较GDI GDI 增加了渐变的画刷 支持多种图像格式等 不过最大的变化 还是编程模型上的变化 GDI 使用了面向对象的思想 对接口进行了类封装 使用更加方便 在应用程序中使用GDI 库应该遵循一下步骤 1 引入Gdiplus h头文件
  • 辟谣、催债、倒闭.....2018年后,将再无创业黄金期!

    导读 上下游没钱了 信贷机构没钱了 风险投资人也没钱了 中小企业成本和资金压力大 企业违约 到期没法还债 非银行金融机构爆雷 大量出问题 股市非理性下滑 所有人进入新一轮升级性迷茫 由于各项成本的抬升 未来 不缺钱也不缺资源的头部企业将变得
  • Spark 基础教程

    Spark是基于内存计算的大数据并行计算框架 可用于构建大型的 低延迟的数据分析应用程序 Spark特点 运行速度快 Spark使用先进的DAG Directed Acyclic Graph 有向无环图 执行引擎 以支持循环数据流与内存计算