Pyspark简单介绍
什么是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 的集群管理器,主要负责整个集群资源的分配和管理。根据部署模式不同分为YARN,Mesos,Standalone。spark部署在yarn上有两种运行模式,client和cluster模式,区别就是Driver运行在client端还是ApplicationMaster端。
Worker
spark的工作节点,用于执行提交的作业。woker主要负责,向Cluter Manager
汇报自身的cpu和memory资源,创建分配资源给Executor,以及同步资源和Executor状态给Cluter Manager。
Executor
Application运行在Worker节点上的一个进程,负责计算task并将数据存储在内存或磁盘。
Driver
Application的驱动程序,程序运行中的main函数,创建SparkContext,划分RDD以及形成任务的DAG。Application通过Driver与Cluter Manager和Executor通信。
Application
用户使用spark实现的程序,包括driver的代码和分布在集群中运行在多节点的Executer代码。
整体流程大致:client端向yarn请求Application,yarn看资源够就会启动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。
- 点赞
- 收藏
- 关注作者
评论(0)