Spark 运行模式

1.Spark运行模式分类

Spark常用运行模式
    local
    yarn-client            yarn-cluster
    standalone-client      standalone-cluster
    
	本地模式
	Spark单机运行,一般用于开发测试。
	Standalone模式
	构建一个由Master+Slave构成的Spark集群,Spark运行在集群中。
	Spark on Yarn模式
	Spark客户端直接连接Yarn。不需要额外构建Spark集群
常用参数:
    --master                        Spark运行模式
    --deploy-mode                   在指定的运行模式下是cluster还是client模式
    --class                         主类完全限定名称
    --jars                          指定需要的本地的jar包,以逗号分隔
    --files                         指定配置文件,一般指hive的配置文件
    --conf                          指定Spark的配置属性               
    --driver-memory                 指定driver的内存
    --executor-memory               指定每个executor内存
    --driver-cores                  driver核心数,默认1个(限Standalone)
    --supervise                     失败是否重启driver(限Standalone和Mesos)
    --total-executor-cores          executor使用的总核数(限Standalone和Mesos)

2.Spark local模式

local可以分为两个,一种在Linux上运行,一种是本地IDE工具运行
Linux上的local:spark-shell --master local[n] 
IDE开发工具中的local:直接启动Spark程序

3.Spark Standalone 模式

spark standalone分为两种模式:client cluster
1.client模式:
启动方式:
    spark-submit --master spark://Linux001:7077 
    spark-submit --master spark://Linux001:7077   --deploy-mode client
执行流程:
    1、创建SparkContext对象时,客户端先在本地启动driver,然后向Master节点申请任务所需要
        的资源。
    2、master收到请求,找到满足资源条件要求的worker启动executor,executor启动成功向driver
        注册自己。
    3、当遇到action时,触发一个job执行。
    4、首先DAGScheduler按RDD的宽窄依赖关系切割job划分stage,然后将stage以TaskSet的方式提
        交给TaskScheduler。
    5、TaskScheduler遍历TaskSet将一个个task发送到executor的线程池中执行。
    6、driver会监控所有task执行的整个流程,并将执行完的结果回收。
弊端:
    由于client模式下driver运行在客户端,当应用程序很多且driver和worker有大量通信的时候,
会急剧增加driver和executor之间的网络IO。大量的dirver的运行会对客户端的资源造成巨大的压力。
 
2.cluster模式:
启动方式:
    spark-submit --master spark://Linux001:7077   --deploy-mode cluster
执行流程:
    1、创建SparkContext对象时,客户端先向master申请启动driver,Master收到请求会找一台合
        适的worker启动driver。
    2、driver启动成功后向master申请资源,master找到满足资源条件要求的worker启动
        executor,executor启动成功向driver注册自己。
    3、当遇到action时,触发一个job执行。
    4、首先DAGScheduler按RDD的宽窄依赖关系切割job划分stage,然后将stage以TaskSet的方式提
        交给TaskScheduler。
    5、TaskScheduler遍历TaskSet将一个个task发送到executor的线程池中执行。
    6、driver会监控所有task执行的整个流程,并将执行完的结果回收。

4.Spark on Yarn 模式

Spark on Yarn两种模式:client模式  cluster模式
区别:看driver运行在哪里。
	client模式的driver是运行在客户端。
	cluster模式的driver运行在NodeManager的ApplicationMaster中。
	
1.client模式
启动:
    spark-submit --master yarn  //默认启动client模式
    spark-submit --master yarn-client
    spark-submit --master yarn --deploy-mode client
执行流程:
    1、创建sparkContext对象时,客户端先在本地启动driver,然后客户端向ResourceManager节点申请启
        动应用程序的ApplicationMaster。
    2、ResourceManager收到请求,找到满足资源条件要求的NodeManager启动第一个Container,然
        后要求该NodeManager在Container内启动ApplicationMaster。
    3、ApplicationMaster启动成功则向ResourceManager申请资源,ResourceManager收到请求给
        ApplicationMaster返回一批满足资源条件的NodeManager列表。
    4、Applicatio拿到NodeManager列表则到这些节点启动container,并在container内启动executor,executor启动成功则会向driver注册自己。
    5、executor注册成功,则driver发送task到executor,一个executor可以运行一个或多个task。
    6、executor接收到task,首先DAGScheduler按RDD的宽窄依赖关系切割job划分stage,然后将stage以TaskSet的方式提交给TaskScheduler。
    7、TaskScheduler遍历TaskSet将一个个task发送到executor的线程池中执行。
    8、driver会监控所有task执行的整个流程,并将执行完的结果回收。
弊端:
    由于client模式下driver运行在客户端,当应用程序很多且driver和worker有大量通信的时候,会急剧增加
driver和executor之间的网络IO。并且大量的dirver的运行会对客户端的资源造成巨大的压力。
 
 
2.cluster模式
启动:
    spark-submit --master yarn-cluster
    spark-submit --master yarn --deploy-mode cluster
执行流程:
    1、创建sparkContext对象时,客户端向ResourceManager节点申请启动应用程序的
        ApplicationMaster。
    2、ResourceManager收到请求,找到满足资源条件要求的NodeManager启动第一个Container,然
        后要求该NodeManager在Container内启动ApplicationMaster。
    3、ApplicationMaster启动成功则向ResourceManager申请资源,ResourceManager收到请求给
        ApplicationMaster返回一批满足资源条件的NodeManager列表。
    4、Applicatio拿到NodeManager列表则到这些节点启动container,并在container内启动executor,executor启动成功则会向driver注册自己。
    5、executor注册成功,则driver发送task到executor,一个executor可以运行一个或多个task。
    6、executor接收到task,首先DAGScheduler按RDD的宽窄依赖关系切割job划分stage,然后将stage以TaskSet的方式提交给TaskScheduler。
    7、TaskScheduler遍历TaskSet将一个个task发送到executor的线程池中执行。
    8、driver会监控所有task执行的整个流程,并将执行完的结果回收。
3.注意点:
    提交作业时spark会将lib下的spark-assembly*.jar包分发到yarn的am container中,这十分耗费资
源。我们可以将该jar包放在一个yarn可以访问到的目录中:
        vi spark-default.conf  
             spark.yarn.jars  hdfs://Linux001:8020/somepath/spark-assembly*.jar
将jar包上传至hdfs://Linux001/somepath/ 
4.调整参数
	spark.port.maxRetries
    同时运行的最大作业数目,默认16,肯定不够,建议调大
	spark.yarn.maxAppAttempts 
    作业最大重试次数,它不应该大于yarn配置中设置的全局最大重试数。默认是等于的。

Spark on Yarn Cluster模式
Spark on Yarn Cluster模式
Spark on Yarn Client 模式
Spark on Yarn Client 模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值