一、Spark集群角色
当Spark Application运行在集群上时,主要有四个部分组成
1.Driver
是一个JVM Process进程,编写的Spark应用程序就运行在Driver上,由Driver进程执行
2.Master(ResourceManager)
是一个JVM Process进程,主要负责资源的调度和分配,并进行集群的监控等职责
3.Worker(NodeManager)
是一个JVM Process进程,一个Worker运行在集群中的一台服务器上,主要负责两个职责,一个是用自己的内存存储RDD的某个或某些partition;另一个是启动其他进程和线程(Executor),对RDD上的partition进行并行的处理和计算
4.Executor
是一个JVM Process进程,一个Worker(NodeManager)上可以运行多个Executor,Executor通过启动多个线程(task)来执行对RDD的partition进行并行计算,也就是执行我们对RDD定义的例如map、flatMap、reduce等算子操作
二、local、spark、yarn区别
三、Spark-shell
spark-shell是Spark自带的Shell程序,方便用户进行交互式编程,用户可以在该命令下可以用scala编程spark程序,适合学习测试时使用
示例
# 数字N表示在本地模拟N个线程来运行当前任务
spark-shell --master local[N]
# *表示使用当前机器上所有可用的资源
spark-shell --master local[*]
# 默认不携带参数就是--master local[*]
spark-shell
# 表示运行在集群上
spark-shell --master spark://node01:7077,node02:7077
四、spark-submit
用于提交jar包给spark集群/YARN,开发时使用
示例
${SPARK_HOME}/bin/spark-submit \
--master local[2] \
${SPARK_HOME}/examples/src/main/python/pi.py \
10
${SPARK_HOME}/bin/spark-submit \
--master spark://node1.itcast.cn:7077 \
--conf "spark.pyspark.driver.python=/root/anaconda3/bin/python3" \
--conf "spark.pyspark.python=/root/anaconda3/bin/python3" \
${SPARK_HOME}/examples/src/main/python/pi.py \
10
${SPARK_HOME}/bin/spark-submit \
--master spark://node1/itcast.cn:7077,node2.itcast.cn:7077 \
--conf "spark.pyspark/driver.python=/root/anaconda3/bin/python3" \
--conf "spark.pyspark.python=/root/anaconda3/bin/python3" \
${SPARK_HOME}/examples/src/main/python/pi.py \
10
五、基本参数配置
提交运行Spark Application时,有些基本参数需要传递值
# 表示应用运行的模式,要么是本地local,要么是集群(Standalone、YARN、Mesos)
--master MASTER_URL
# 本地模式:local[2] Standalone集群:spark://xxx:7077, yyy:7077 YARN集群:yarn
# 表示Driver Program运行的地方,也叫应用部署模式,默认值为client,通常在生产环境中使用cluster
--deploy-mode DEPLOY_MODE
# 表示运行Spark Application的类的名称,注意为类的全名称(包含包名)
--class CLASS_NAME
# 表示的是应用运行的名称,通常在应用开发的时候指定
--name NAME
# 表示应用的类所依赖的第三方的Jar包指定路径,通常在本地文件系统中,多个Jar包使用逗号隔开
--jars JARS
# 表示应用运行时指定的某些参数配置,http://spark.apache.org/docs/2.2.0/configuration.html
--conf PROP=VALUE
# 当value中值有空格组成的时候,使用双引号将key=value引出来
--conf "PROP=VALUE"
动态加载Spark Application运行时的参数,通过–conf进行指定
# 第一种方式:属性的值中没有空格
--conf spark.eventLog.enabled=false
# 第二种方式:属性的值中有空格,将属性和值同意使用双引号引起来
--conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTTimeStamps"
六、Driver Program参数配置
每个Spark Application运行时都有一个Driver Program,属于一个JVM Process进程,可以设置内存Memory和CPU Core核数
# 指定Driver Program JVM进程内存大小,默认值为1g
--driver-memory MEN
# 表示Driver运行CLASS PATH路径,使用不多
--driver-class-path
## Spark standalone with cluster deploy mode:运行在Standalone中cluster Deploy Mode,默认值为1
--driver-cores NUM
## 运行在YARN in cluster mode, 默认值是1
--driver-cores NUM
# 运行在standalone中的cluster Deploy Mode下,表示当Driver运行异常失败,可以自己重启
--supervise
七、Executor参数配置
每个Spark Application运行时,需要启动Executor运行任务Task,需要指定Executor个数及每个Executor资源信息(内存Memory和CPU Core核数)
# Executor运行所需内存大小
--executor-memory MEN
# Excutor运行的CPU CPU Cores,默认的情况下,在Standalone集群上为Worker节点所有可有的CpuCores,在YARN集群下为1
--executor-cores NUM
# 表示运行在Standalone集群下,所有Executor的CPU Cores,结合--executor-cores计算出Executor个数
--total-executor-cores NUM
# 表示在YARN集群下,Executor的个数,默认值为2
--num-executors
# 表示Executor运行的队列,默认为default队列
--queue QUEUE_NAME