Spark基础原理

这篇具有很好参考价值的文章主要介绍了Spark基础原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spark On Yarn

Spark On Yarn的本质

Spark专注于分布式计算,Yarn专注于资源管理,Spark将资源管理的工作交给了Yarn来负责

Spark On Yarn两种部署方式

Spark中有两种部署方式,Client和Cluster方式,默认是Client方式。这两种方式的本质区别,是Driver进程运行的地方不一样。

Client部署方式: Driver进程运行在你提交程序的那台机器上
优点: 将运行结果和运行日志全部输出到了提交程序的机器上,方便查看结果
缺点: Driver进程和Yarn集群可能不在同一个集群中,会导致Driver和Executor进程间进行数据交换的时候,效率比较低
使用: 一般用在开发和测试中

Cluster部署方式: Driver进程运行在集群中某个从节点上
优点: Driver进程和Yarn集群在同一个集群中,Driver和Executor进程间进行数据交换的时候,效率比较高
缺点: 需要去18080或者8088页面查看日志和运行结果
使用: 一般用在生产环境使用

spark-submit命令

后续需要将自己编写的Spark程序提交到相关的资源平台上,比如说: local yarn spark集群(standalone)

​ Spark为了方便任务的提交操作,专门提供了一个用于进行任务提交的脚本文件: spark-submit

​ spark-submit在提交的过程中,设置非常多参数,调整任务相关信息。如果忘记了,可以使用spark-submit --help进行查看

  • 基本参数设置
    Spark基础原理,spark,大数据,python
  • Driver的资源配置参数
    Spark基础原理,spark,大数据,python
  • executor的资源配置参数
    Spark基础原理,spark,大数据,python

PySpark程序与Spark交互流程

client on Spark集群(standalone)

Spark基础原理,spark,大数据,python

1- 在什么地方提交程序,就会在什么地方启动Driver进程
2- Driver进程启动后,它是JVM的进程,无法直接执行Python代码。底层是基于PY4J,将创建SparkContext对象的代码映射为Java进行创建
3- Driver进程连接到Spark集群中的Master主节点,根据资源配置要求,向主节点申请资源,用来启动Executor
4- 主节点接收到资源申请之后,进行资源分配,底层是基于FIFO(先进先出)。分配好资源资源之后,将方案返回给到Driver进程
   executor1:node1 2G 2CPU
   executor2:node3 2G 2CPU
5-Driver连接到对应的Worker从节点上,占用相应的资源。通知Worker启动Executor进程。启动以后会反向注册回Driver
6-Driver开始处理代码
 6.1- Driver加载RDD相关的算子,根据算子间的依赖关系绘制DAG有向无环图和划分Stage阶段,并且确定每个Stage阶段有多少个Task线程。需要分配给哪些Executor进行执行。
 6.2- Driver通知对应的Executor进程来执行相应的任务
 6.3- Executor开始执行具体的任务。但是发现代码中有大量的Python函数,而Executor是JVM进程,无法直接执行代码。因此会调用服务器上的Python解释器,将Python函数和输入数据传输给到Python解释器,执行完以后,将结果数据返回给Executor进程
 6.4- Executor在运行过程中,会判断是否需要将结果数据返回给到Driver进程。如果需要,就返回给Driver进程;如果不需要,直接输出,结束即可。
 6.5- Driver会定时检查多个Executor的执行状态。直到所有的Executor执行完成,就认为任务运行结束
7- Driver调用sc.stop()代码,通知Master回收资源。整个程序运行结束。

cluster on Spark集群

区别点: Driver进程就不是运行在提交任务的那台机器上了,而是在Spark集群中随机选择一个Worker从节点来启动和运行Driver进程

1- 将任务提交给到Spark集群的主节点Master
2- 主节点接收到任务信息以后,根据Driver的资源配置要求,在集群中随机选择(在资源充沛的众多从节点中随机选择)一个Worker从节点来启动和运行Driver进程
3- Driver进程启动以后,执行main函数,首先创建SparkContext对象。底层是基于PY4J,将创建SparkContext对象的代码映射为Java进行创建
4- Driver进程连接到Spark集群中的Master主节点,根据资源配置要求,向主节点申请资源,用来启动Executor
5- 主节点接收到资源申请之后,进行资源分配,底层是基于FIFO(先进先出)。分配好资源资源之后,将方案返回给到Driver进程
   executor1:node1 2G 2CPU
   executor2:node3 2G 2CPU
6-Driver连接到对应的Worker从节点上,占用相应的资源。通知Worker启动Executor进程。启动以后会反向注册回Driver
7-Driver开始处理代码
 7.1- Driver加载RDD相关的算子,根据算子间的依赖关系绘制DAG有向无环图和划分Stage阶段,并且确定每个Stage阶段有多少个Task线程。需要分配给哪些Executor进行执行。
 7.2- Driver通知对应的Executor进程来执行相应的任务
 7.3- Executor开始执行具体的任务。但是发现代码中有大量的Python函数,而Executor是JVM进程,无法直接执行代码。因此会调用服务器上的Python解释器,将Python函数和输入数据传输给到Python解释器,执行完以后,将结果数据返回给Executor进程
 7.4- Executor在运行过程中,会判断是否需要将结果数据返回给到Driver进程。如果需要,就返回给Driver进程;如果不需要,直接输出,结束即可。
 7.5- Driver会定时检查多个Executor的执行状态。直到所有的Executor执行完成,就认为任务运行结束
8- Driver调用sc.stop()代码,通知Master回收资源。整个程序运行结束。

client on Yarn集群

Spark基础原理,spark,大数据,python

区别点: 将Driver进程中负责资源申请的工作,转交给到Yarn的ApplicationMaster来负责。Driver主要负责任务的分配、任务的管理工作。

1- 首先会在提交的节点启动一个Driver进程

2- Driver进程启动以后,执行main函数,首先创建SparkContext对象。底层是基于PY4J,将创建SparkContext对象的代码映射为Java进行创建

3- 连接Yarn集群的主节点(ResourceManager),将需要申请的资源封装为一个任务,提交给到Yarn的主节点。主节点收到任务以后,首先随机选择一个从节点(NodeManager)启动ApplicationMaster

4- 当ApplicationMaster启动之后,会和Yarn的主节点建立心跳机制,告知已经启动成功。启动成功以后,就进行资源的申请工作,将需要申请的资源通过心跳包的形式发送给到主节点。主节点接收到资源申请后,开始进行资源分配工作,底层是基于资源调度器来实现(默认为Capacity容量调度器)。当主节点将资源分配完成以后,等待ApplicationMaster来拉取资源。ApplicationMaster会定时的通过心跳的方式询问主节点是否已经准备好了资源。一旦发现准备好了,就会立即拉取对应的资源信息。

5- ApplicationMaster根据拉取到的资源信息,连接到对应的从节点。占用相应的资源,通知从节点启动Executor进程。从节点启动完Executor之后,会反向注册回Driver进程

6-Driver开始处理代码
 6.1- Driver加载RDD相关的算子,根据算子间的依赖关系绘制DAG有向无环图和划分Stage阶段,并且确定每个Stage阶段有多少个Task线程。需要分配给哪些Executor进行执行。
 6.2- Driver通知对应的Executor进程来执行相应的任务
 6.3- Executor开始执行具体的任务。但是发现代码中有大量的Python函数,而Executor是JVM进程,无法直接执行代码。因此会调用服务器上的Python解释器,将Python函数和输入数据传输给到Python解释器,执行完以后,将结果数据返回给Executor进程
 6.4- Executor在运行过程中,会判断是否需要将结果数据返回给到Driver进程。如果需要,就返回给Driver进程;如果不需要,直接输出,结束即可。
 6.5- Driver会定时检查多个Executor的执行状态。直到所有的Executor执行完成,就认为任务运行结束。同时ApplicationMaster也会接收到各个节点的执行完成状态,然后通知主节点。任务执行完成了,主节点回收资源,关闭ApplicationMaster,并且通知Driver。
 
 7- Driver执行sc.stop()代码。Driver进程退出

cluster on Yarn集群

Spark基础原理,spark,大数据,python文章来源地址https://www.toymoban.com/news/detail-821268.html

区别点: 在集群模式下,Driver进程的功能和ApplicationMaster的功能(角色)合二为一了。Driver就是ApplicationMaster,ApplicationMaster就是Driver。既要负责资源申请,又要负责任务的分配和管理。


1- 首先会将任务提交给Yarn集群的主节点(ResourceManager)

2- ResourceManager接收到任务信息后,根据Driver(ApplicationMaster)的资源配置信息要求,选择一个
nodeManager节点(有资源的,如果都有随机)来启动Driver(ApplicationMaster)程序,并且占用相对应资源

3- Driver(ApplicationMaster)启动后,执行main函数。首先创建SparkContext对象(底层是基于PY4J,识
别python的构建方式,将其映射为Java代码)。创建成功后,会向ResourceManager进行建立心跳机制,告知已经
启动成功了

4- 根据executor的资源配置要求,向ResourceManager通过心跳的方式申请资源,用于启动executor(提交的任
务的时候,可以自定义资源信息)

5- ResourceManager接收到资源申请后,根据申请要求,进行分配资源。底层是基于资源调度器来资源分配(默认
为Capacity容量调度)。然后将分配好的资源准备好,等待Driver(ApplicationMaster)拉取操作
	executor1: node1 2个CPU 2GB内存
	executor2: node3 2个CPU 2GB内存

6- Driver(ApplicationMaster)会定时询问是否准备好资源,一旦准备好,立即获取。根据资源信息连接对应的
节点,通知nodeManager启动executor,并占用相应资源。nodeManager对应的executor启动完成后,反向注册
回给Driver(ApplicationMaster)程序(已经启动完成)

7- Driver(ApplicationMaster)开始处理代码:
	7.1 首先会加载所有的RDD相关的API(算子),基于算子之间的依赖关系,形成DAG执行流程图,划分stage阶
段,并且确定每个阶段应该运行多少个线程以及每个线程应该交给哪个executor来运行(任务分配)
	7.2 Driver(ApplicationMaster)程序通知对应的executor程序, 来执行具体的任务
	7.3 Executor接收到任务信息后, 启动线程, 开始执行处理即可: executor在执行的时候, 由于RDD代
码中有大量的Python的函数,Executor是一个JVM程序 ,无法解析Python函数, 此时会调用Python解析器,执
行函数, 并将函数结果返回给Executor
	7.4 Executor在运行过程中,如果发现最终的结果需要返回给Driver(ApplicationMaster),直接返回
Driver(ApplicationMaster),如果不需要返回,直接输出 结束即可
	7.5 Driver(ApplicationMaster)程序监听这个executor执行的状态信息,当Executor都执行完成后,
Driver(ApplicationMaster)认为任务运行完成了

8- 当任务执行完成后,Driver执行sc.stop()通知ResourceManager执行完成,ResourceManager回收资源,
Driver程序退出即可

到了这里,关于Spark基础原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Spark大数据分析与实战笔记(第二章 Spark基础-02)

    Spark大数据分析与实战笔记(第二章 Spark基础-02)

    人生就像赛跑,不在乎你是否第一个到达尽头,而在乎你有没有跑完全程。 Spark于2009年诞生于美国加州大学伯克利分校的AMP实验室,它是一个可应用于大规模数据处理的统一分析引擎。Spark不仅计算速度快,而且内置了丰富的API,使得我们能够更加容易编写程序。 请参考《

    2024年02月03日
    浏览(50)
  • Spark大数据分析与实战笔记(第二章 Spark基础-03)

    Spark大数据分析与实战笔记(第二章 Spark基础-03)

    又回到了原点,就从现在开始我的新生活吧。 章节概要:Spark运行架构与原理 I. 引言 A. 概述Spark B. Spark的特点和优势 II. Spark运行架构概述 A. Spark集群模式 B. Spark运行模式 C. Spark执行引擎:Spark Core D. Spark计算模块:RDD E. Spark数据抽象模块:DataFrame和Dataset F. Spark资源管理器:

    2024年02月03日
    浏览(50)
  • Spark大数据分析与实战笔记(第二章 Spark基础-04)

    Spark大数据分析与实战笔记(第二章 Spark基础-04)

    “春风十里,不如你。” 这句来自现代作家安妮宝贝的经典句子,它表达了对他人的赞美与崇拜。每个人都有着不同的闪光点和特长,在这个世界上,不必去羡慕别人的光芒,自己所拥有的价值是独一无二的。每个人都有无限的潜力和能力,只要勇敢展现自己,就能在人生舞

    2024年02月03日
    浏览(48)
  • 大数据技术spark基础

    大数据技术spark基础

    目录 一、spark概述 1.1什么是spark? 1.2 spark的特点 1.3 spark生态圈组件 1.4 spark的核心原理 二、Spark和MapReduce的区别 三、3.MapReduce核心环节-Shuffle过程 四、了解spark架构 1.1 什么是spark? Spark 是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。 1.2 spark 的特点

    2024年03月22日
    浏览(11)
  • 【1-3章】Spark编程基础(Python版)

    【1-3章】Spark编程基础(Python版)

    课程资源: (林子雨)Spark编程基础(Python版)_哔哩哔哩_bilibili 第三次信息化浪潮:以物联网、云计算、大数据为标志 大数据时代到来的原因: 技术支撑: 存储设备(价格下降)、CPU计算能力(多核CPU)、网络带宽(单机不能够完成海量数据的存储和处理,借助网络分布式的

    2024年02月11日
    浏览(30)
  • [AIGC大数据基础] Spark 入门

    大数据处理已成为当代数据领域的重要课题之一。为了高效地处理和分析大规模数据集,许多大数据处理引擎应运而生。其中,Spark作为一个快速、通用的大数据处理引擎备受关注。 本文将从“是什么、怎么用、为什么用”三个角度来介绍Spark。首先,我们会详细探讨Spark的基

    2024年01月25日
    浏览(7)
  • 大数据基础设施搭建 - Spark

    大数据基础设施搭建 - Spark

    内容: 到YARN WEB页面查看任务提交情况 内容: 4.3.1 启动SparkSQL客户端(Yarn方式) 4.3.2 启动Hive客户端 优势在哪里??

    2024年04月09日
    浏览(16)
  • 大数据技术原理与应用 实验6 Spark数据处理系统的搭建

    大数据技术原理与应用 实验6 Spark数据处理系统的搭建

    熟悉常用的Spark操作。 1.熟悉Spark Shell的使用; 2.熟悉常用的Spark RDD API、Spark SQL API和Spark DataFrames API。 操作系统:Linux Spark版本: 1.6 Hadoop版本: 3.3.0 JDK版本:1.8 使用Spark shell完成如下习题: a)读取Spark安装目录下的文件README.md(/usr/local/spark/README.md); b)统计包含“Spark”的单词

    2024年02月09日
    浏览(17)
  • 大数据经典技术解析:Hadoop+Spark大数据分析原理与实践

    作者:禅与计算机程序设计艺术 大数据时代已经来临。随着互联网、移动互联网、物联网等新兴技术的出现,海量数据开始涌现。而在这些海量数据的基础上进行有效的处理,成为迫切需要解决的问题之一。Apache Hadoop和Apache Spark是目前主流开源大数据框架。由于其易于部署

    2024年02月07日
    浏览(12)
  • 大数据技术原理及应用课实验7 :Spark初级编程实践

    大数据技术原理及应用课实验7 :Spark初级编程实践

    实验7  Spark初级编程实践 一、实验目的 1. 掌握使用Spark访问本地文件和HDFS文件的方法 2. 掌握Spark应用程序的编写、编译和运行方法 二、实验平台 1. 操作系统:Ubuntu18.04(或Ubuntu16.04); 2. Spark版本:2.4.0; 3. Hadoop版本:3.1.3。 三、实验步骤(每个步骤下均需有运行截图) 实

    2024年01月22日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包