1.基于Yarn提交Spark任务的配置?
在Spark的客户端 …/spark/conf/spark-env.sh 配置:
export HAOOP_CONF_DIR = $HADOOP_HOME/etc/hadoop
命令:./spark-submit --master yarn --class jar 参数
2.Spark基于Standalone提交任务两种方式及二张图。
-
client
-
命令
1)./spark-submit --master yarn --class …jar …
2)./spark-submit --master yarn-client --class …jar
3)./spark-submit --master yarn --deploy-mode client --class …jar
-
过程
1.在客户端提交Spark application,首先Driver在客户端启动
2.客户端向ResourceManager申请启动ApplicationMaster ,ResouceManager收到请求之后,随机找到一台NodeManager启动ApplicationMaster
3.ApplicationMaster启动之后,向ResouceManager 申请资源用户启动Executor
4.ResouceManager收到请求之后返回给ApplicationMaster一批nodeManager
5.ApplicationMaster连接这些NodeManager节点启动Executor
6.Executor启动之后反向注册给Driver,Driver发送task,监控task,回收结果
-
注意
client模式,当在客户端提交多个Spark application时,也会有单节点网卡流量激增问题,在客户端可以看到task的执行和结果
cluster
-
命令
1)./spark-submit --master yarn-cluster --class …jar …
2)./spark-submit --master yarn --deploy-mode cluster --class …jar …
-
过程
1.在客户端提交Spark Application,首先客户端向ResourceManager申请启动ApplicationMaster
2.ResouceManager随机找到一台NodeManager节点启动ApplicationMaster (Driver)
3.ApplicationMaster启动之后,向ResourceManager申请资源用于启动Executor
4.ResourceManager收到请求之后,返回给ApplicationMaster一批NodeManager节点
5.ApplicationMaster找到这些节点,启动Executor
6.Executor启动之后,反向注册给ApplicationMaster(Driver)
7.Application Master 发送task,监控task执行,回收结果
-
注意
cluster模式,当在客户端提交多个Spark application 时,将client模式的单节点网卡流量激增问题分散到集群中,在客户端看不到task的执行和结果,要去webui中查看
-
3.Spark基于Yarn提交任务两种方式及二张图。
-
client
-
命令
1)./spark-submit --master yarn --class …jar …
2)./spark-submit --master yarn-client --class …jar
3)./spark-submit --master yarn --deploy-mode client --class …jar
-
过程
1.在客户端提交Spark application,首先Driver在客户端启动
2.客户端向ResourceManager申请启动ApplicationMaster ,ResouceManager收到请求之后,随机找到一台NodeManager启动ApplicationMaster
3.ApplicationMaster启动之后,向ResouceManager 申请资源用户启动Executor
4.ResouceManager收到请求之后返回给ApplicationMaster一批nodeManager
5.ApplicationMaster连接这些NodeManager节点启动Executor
6.Executor启动之后反向注册给Driver,Driver发送task,监控task,回收结果
-
注意
client模式,当在客户端提交多个Spark application时,也会有单节点网卡流量激增问题,在客户端可以看到task的执行和结果
-
-
cluster
-
命令
1)./spark-submit --master yarn-cluster --class …jar …
2)./spark-submit --master yarn --deploy-mode cluster --class …jar …
-
过程
1.在客户端提交Spark Application,首先客户端向ResourceManager申请启动ApplicationMaster
2.ResouceManager随机找到一台NodeManager节点启动ApplicationMaster (Driver)
3.ApplicationMaster启动之后,向ResourceManager申请资源用于启动Executor
4.ResourceManager收到请求之后,返回给ApplicationMaster一批NodeManager节点
5.ApplicationMaster找到这些节点,启动Executor
6.Executor启动之后,反向注册给ApplicationMaster(Driver)
7.Application Master 发送task,监控task执行,回收结果
-
注意
cluster模式,当在客户端提交多个Spark application 时,将client模式的单节点网卡流量激增问题分散到集群中,在客户端看不到task的执行和结果,要去webui中查看
-
4.Spark中的术语
1)Application:基于Spark的⽤用户程序,包含了driver程序和运行在集群上的executor程序
2)job:包含很多任务(Task)的并行计算,可以看做和action对应
3)stage:⼀个Job会被拆分很多组任务,每组任务被称为Stage(就像Mapreduce分map task 和reduce task一样)
4)task:被送到某个executor上的工作单元
5)Master:资源管理的主节点(进程)
6)Worker:资源管理的从节点(进程) 或者说管理本机资源的进程
7)Executor:是在一个worker进程所管理的节点上为某Application启动的⼀一个进程,该进 程负责运行任务,并且负责将数据存在内存或者磁盘上。每个应⽤用都有各自独⽴立的 executors
8)ThreadPool:线程池,存在与Executor进程中,task在线程池中运行
任务层面:Application -> job -> stage -> tasks
资源层面:Master -> Worker -> Executor -> Threadpool
5.RDD的宽窄依赖,各自的特点。
rdd宽依赖(shuffle): 父RDD与子RDD partition之间的关系是一对多.
rdd窄依赖(没有shuffle): 父RDD与子RDD partition之间的关系是一对一或者多对一.
6.什么是Stage 及 Spark计算模式?
stage是由一组并行的task组成.Spark任务会根据RDD之间的依赖关系,形成一个DAG有向无环图,DAG会提交给DAGScheduler,DAGScheduler会把DAG划分相互依赖的多个stage,划分stage的依据就是RDD之间的宽窄依赖。遇到宽依赖就划分stage,每个stage包含一个或多个task任务。然后将这些task以taskSet的形式提交给TaskScheduler运行。
切割规则:从后往前,遇到宽依赖就切割stage。
stage中处理模式:pipeline管道处理数据模型,迭代器模式
stage的并行度由stage中finalRDD的partition个数决定
提高stage的并行度:
1.增大RDD的partition就可以
2.reduceByKey
3.join
4.distinct map+reduceByKey+map