*以下内容由《Spark快速大数据分析》整理所得。
读书笔记的第四部分是讲的是Spark在集群上运行的知识点。
一、Spark应用组件介绍
二、Spark在集群运行过程
三、Spark配置
四、Spark资源分配
一、Spark应用组件介绍
Spark应用组件有三个:驱动器、集群管理器和执行器。
- 驱动器节点:有两个职责:把用户转为任务和为执行器节点调度任务。
- 执行器节点:负责在Spark作业中运作任务。
- 集群管理器:Spark依赖于集群管理器来启动执行器节点。
集群管理器:为了方便多人调度时合理的进行资源管理,许多集群管理器支持队列,可以为队列定义不同优先级或容量限制,这样Spark 就可以把作业提交到相应的队列中。
集群管理器分为两种:
(1) 独立集群管理器:由一个主节点和几个工作节点组成,各自都分配一定量的内存和CPU核心。可以在一堆机器上运行Spark。
(2) Hadoop YARN与Hadoop Mesos之类的集群管理器:能与别的分布式应用共享的集群。
二、Spark在集群运行过程
Spark在集群上运行的过程如下:
(1) 用户通过 spark-submit 脚本提交应用。
(2) spark-submit 脚本启动驱动器程序,调用用户定义的main()方法。
(3) 驱动器程序与集群管理器通信,申请资源以启动执行器节点。
(4) 集群管理器为驱动器程序启动执行器节点。
(5) 驱动器进程执行用户应用中的操作。根据程序中所定义的对 RDD 的转化操作和行动操作,驱动器节点把工作以任务的形式发送到执行器进程。
(6) 任务在执行器程序中进行计算并保存结果。
(7) 如果驱动器程序的main()方法退出,或者调用了 SparkContext.stop() ,驱动器程序会 终止执行器进程,并且通过集群管理器释放资源。
提交应用样本示例:
# [options] 是要传给 spark-submit 的标记列表
# <app jar | python File> 表示包含应用入口的 JAR 包或 Python 脚本。
# [app options] 是传给你的应用的选项
bin/spark-submit [options] <app jar | python file> [app options]
bin/spark-submit my_script.py
三、Spark配置
配置Spark有三种方式(优先级由高到低):
(1) SparkConf配置:在用户代码中显式调用 set() 。
# 创建一个conf对象
conf = new SparkConf() # 修改配置信息
conf.set("spark.app.name", "My Spark App")
conf.set("spark.master", "local[4]")
conf.set("spark.ui.port", "36000") # 重载默认端口配置 # 使用这个配置对象创建一个SparkContext
sc = SparkContext(conf)
(2) 命令行参数配置:通过 spark-submit --conf 传递参数。
# 在运行时使用标记设置配置项的值
$ bin/spark-submit \ --class com.example.MyApp \
--master local[4] \
--name "My Spark App" \
--conf spark.ui.port=36000 \
myApp.jar
(3) 配置文件配置: --properties-file 指向写好的配置文件的路径。
# 运行时使用默认文件设置配置项的值
bin/spark-submit \
--class com.example.MyApp \
--properties-file my-config.conf \
myApp.jar
四、Spark资源分配
在独立集群管理器中,资源分配的两个设置:
(1) 执行器进程内存: --executor-memory
(2) 占用核心总数的最大值: --total-executor-cores
例子:以--executor-memory 1G和--total-executor-cores 8提交应用,Spark会在不同机器上启动8个执行器进程,每个1GB内存。
YARN:--executor-memory和--executor-cores
Mesos:--executor-memory和--total-executor-cores