Spark

Apache Spark是一个统一的计算引擎和一组用于计算机集群上并行数据处理的库。
目前,Spark是这个领域中最活跃的开源引擎,它是任何对大数据感兴趣的开发人员或数据科学家的标准工具。
Spark支持多种常用编程语言(Python、Java、Scala和R),
包含为不同的任务设计的库,从SQL到流以及机器学习,并运行在一台笔记本电脑或一个集群的数千台服务器上。
这使得它是一个容易上手的系统,并可以扩展到大规模数据处理。
Spark可以运行在一组计算机组成的集群上。Spark用于执行任务的机器被集群管理器管理,如Standalone、YARN、Mesos或Kubernetes。
当我们提交Spark应用到集群时,集群管理器会为应用分配资源从而可以完成任务。

Spark应用程序:

1、Spark应用程序由一个驱动器(driver)进程和一组执行器(executor)进程组成。驱动进程是绝对必要的,它是Spark应用程序的核心,并在应用程序的生命周期中维护所有相关信息。
驱动进程在集群某个节点上运行main()函数,并负责三件事:
维护Spark应用程序的信息;
响应用户的程序或输入;
分析、分发和调度执行器上的工作。
2、执行器负责实际执行驱动器分配给他们的工作。这意味着每个执行器只负责两件事:
执行由驱动进程分配给它的代码,并将执行器上的计算状态报告回驱动节点。

Spark的集群架构还有几点需要注意的:

1、每个应用程序都有自己的执行器(executor)进程,这些进程在整个应用程序的生命周期内保持运行,并使用多个线程来运行任务。
这样做的好处是在调度端(每个驱动程序都调度自己的任务)和执行器端(不同应用程序的任务在不同的jvm中运行)将应用程序彼此隔离。然而,这也意味着数据不能在不同的Spark应用程序(SparkContext实例)之间共享,除非将其写入外部存储。
2、Spark对底层的集群管理器是不可知的。只要它能够申请executor进程,并且这些进程相互通信,即使改用其他集群管理器(例如Mesos/YARN)也相对容易。
3、驱动(driver)程序必须在其整个生命周期内侦听并接受来自其executor的上行连接(请参见官网文档网络配置部分)。因此,driver必须可以从工作节点进行网络寻址。
4、因为驱动程序在集群上调度任务,所以它应该在工作节点附近运行,最好在同一个局域网内运行。如果您想远程向集群发送请求,最好打开一个到driver的RPC并让它从附近提交操作,而不是在远离工作节点的地方运行driver。
Spark应用的执行模式除了Standalone、YARN、Mesos或Kubernetes这几种依赖集群的模外,还有一种本地(local)模式。
在本地模式下,驱动器和执行器都以线程方式运行于你的电脑上,而不是集群上。
对于四种依赖集群的执行模式,有两种部署模式,分别是cluster模式(driver启动在集群内)和client模式(driver启动在集群外)
可以通过Spark语言API使用多种不同的语言来“驱动”驱动器。
不同的执行模式和部署模式可以通过提交命令来判断:

执行模式使用local模式,使用8核

./bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master local[8]
/path/to/examples.jar
100

执行模式使用standalone,部署模式使用client(默认值)

./bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master spark://207.184.161.138:7077
--executor-memory 20G
--total-executor-cores 100
/path/to/examples.jar
1000

执行模式使用standalone,部署模式使用cluster,并使用--supervise自动拉起故障的driver

./bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master spark://207.184.161.138:7077
--deploy-mode cluster
--supervise
--executor-memory 20G
--total-executor-cores 100
/path/to/examples.jar
1000

执行模式使用yarn,部署模式使用cluster

export HADOOP_CONF_DIR=XXX
./bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master yarn
--deploy-mode cluster
--executor-memory 20G
--num-executors 50
/path/to/examples.jar
1000

执行模式使用mesos,部署模式使用cluster

./bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master mesos://207.184.161.138:7077
--deploy-mode cluster
--supervise
--executor-memory 20G
--total-executor-cores 100
1000

执行模式使用Kubernetes,部署模式使用cluster

./bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master k8s://xx.yy.zz.ww:443
--deploy-mode cluster
--executor-memory 20G
--num-executors 50
1000
posted @ 2025-06-21 22:11  屠魔的少年  阅读(15)  评论(0)    收藏  举报