Spark关键概念

一、Spark集群角色

当Spark Application运行在集群上时,主要有四个部分组成
Spark关键概念_第1张图片

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关键概念_第2张图片

三、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

你可能感兴趣的:(大数据,spark,big,data,scala)