PySpark实战:Spark核心概念
来自CloudWiki
目录
Spark软件栈
核心组件:
- Spark Core
- Spark SQL:处理HDFS、HBase等多种数据源中的数据
- Spark Streaming:实时数据流处理组件,一般需配合Kafaka
- Spark MLlib: 机器学习包
- Spark Graph:专门处理图的库,如社交网络图的计算
Spark提供了一站式的软件栈。
Spark运行架构
- Application:提交一个作业就是Application,一个Application只有一个SparkContext
- Driver程序:一个Spark作业运行时会启动一个Driver进程,也就是作业的主进程。Driver程序运行应用程序的main函数,并创建SparkContext进程。
- SparkContext: 是程序运行调度的核心,SparkContext是Spark程序入口
- Cluster Manager:用于获得群集资源的外部服务。
- Worker:Worker节点是集群中的Worker,执行任务Task
- Executor: 是真正执行作业Task的地方,分布在集群的Worker节点上
- Task: 是执行任务的工作单位,每个Task都会被发送到一个Worker节点上
Spark部署模式
Spark有多种部署模式
Local模式
本地采用多线程的方式执行,主要用于开发测试
Spark on YARN模式
每个Spark Executor作为一个YARN Container在运行,
同时支持多个任务在同一个Container中运行。
Spark on YARN又有两种模式:yarn-cluster 和yarn-client
yarn-cluster
Driver运行在Appliaction Master中,即运行在集群中的某个节点上
适合大数据量、非交互式的场景(生产环境)
yarn-clent
Driver运行在Client端,会和请求的YARN Container通信来调度它们工作,
适合交互类型的作业。
Standalone模式
Standalone模式和Local模式类似,
但是Standalone的分布式调度器是由Spark提供的,
在yarn-client和yarn-cluster模式下提交作业时,可以不启动Spark集群,因为相关JVM环境由YARN管理,而Standalone模式提交作业时,Spark集群必须启动,因为它运行依赖的调度器来自Spark集群本身。