Pyspark简单介绍

举报
liuzhiquan 发表于 2024/11/23 15:13:27 2024/11/23
【摘要】 本文详细介绍了PySpark的运行时架构,包括Spark的基本运行时架构、PySpark如何借助Py4j实现Python与Java的交互以及Executor端Task的运行原理。在Executor端,每个Task会启动一个Python进程通过Socket通信执行用户定义的Python函数。PySpark虽然方便,但在大数据场景下,由于JVM和Python进程间的数据通信损耗,可能影响性能,建议在大

什么是pyspark?

pyspark是一个基于Python的Spark编程接口,可以用于大规模数据处理、机器学习和图形处理等各种场景。Spark是一个开源的大数据处理框架,它提供了一种高效的分布式计算方式。pyspark使得Python程序员可以轻松地利用Spark的功能,开发出分布式的数据处理程序。

pyspark的基本概念

RDD

RDD(Resilient Distributed Datasets)是pyspark的核心概念,是一种弹性分布式数据集。它是Spark中的基本数据结构,可以看做是一个分布式的未被修改的数据集合。RDD可以被分区和并行处理,支持容错和自动恢复,保证了数据的高可靠性和高可用性。

DataFrame

DataFrame是一种类似于关系型数据库中的表格的数据结构。它提供了一种高级的抽象层次,可以将数据组织成一组命名的列。DataFrame支持类似于SQL的查询,可以很方便地进行数据筛选、过滤、排序和统计等操作。

SparkContext

SparkContext是pyspark中的一个核心概念,是Spark应用程序的入口。它负责连接Spark集群,并与集群中的其他节点进行通信。SparkContext提供了许多Spark操作的入口点,如创建RDD、累加器和广播变量等。

spark工作原理

Spark主要是用Scala语言开发,部分使用Java语言开发,运行在JVM中。同时在外层封装,实现对python,R等语言的开发接口。

Spark 集群由集群管理器 Cluster Manager、工作节点 Worker、执行器 Executor、驱动器 Driver、应用程序 Application 等部分组成。具体关系如下图:

Cluter Manager

spark 的集群管理器,主要负责整个集群资源的分配和管理。根据部署模式不同分为YARNMesosStandalonespark部署在yarn上有两种运行模式,clientcluster模式,区别就是Driver运行在client端还是ApplicationMaster端。

Worker

spark的工作节点,用于执行提交的作业。woker主要负责,向Cluter Manager

汇报自身的cpumemory资源,创建分配资源给Executor,以及同步资源和Executor状态给Cluter Manager

Executor

Application运行在Worker节点上的一个进程,负责计算task并将数据存储在内存或磁盘。

Driver

Application的驱动程序,程序运行中的main函数,创建SparkContext,划分RDD以及形成任务的DAGApplication通过DriverCluter ManagerExecutor通信。

Application

用户使用spark实现的程序,包括driver的代码和分布在集群中运行在多节点的Executer代码。

整体流程大致:client端向yarn请求Applicationyarn看资源够就会启动ApplicationMaster,然后ApplicationMater就去启动Driver,创建上下文,形成任务流,启动和分发任务给Executor并监控任务运行,Executor就去启动task执行具体的任务。

pyspark工作原理

上面也提到了spark在外层封装了python接口,主要是借助py4j实现python和java的交互。这样python使用者就不用多学一门java,轻松使用python进行大数据开发。

py4j

py4j是用python和java实现的库。通过PY4J,python可以动态访问Java虚拟机中的Java对象,Java程序也可以回调Python对象。

pyspark实现机制如下图:

在driver端,spark执行在JVM,python通过py4j调用Java的方法,SparkContext利用Py4J启动一个JVM并产生一个JavaSparkContext,将pyspark程序映射到JVM中;

在Executor端,spark也执行在JVA,task任务已经是序列后的字节码,不需要用py4j了,但是如果里面包含一些python库函数,JVM无法处理这些python函数,所以会需要为每个task启动一个python进程,通过socket通信将python函数在python进程中执行后返回结果。

以上就是pyspark的工作原理及简单介绍。pyspark对于python使用者比较好上手,但是它也有个致命缺点就是慢,毕竟他是做过一层包装的,对于离线任务可以选择pyspark,但是对于实时任务还是最好使用scala。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。