Spark_6 Spark on YARN

YARN

Yarn 是一个操作系统级别的统一的资源管理和调度框架
多种计算框架可以通过Yarn共享集群资源,按需分配 ==> 可以提升资源的利用率
Yarn上可以跑:
批处理作业(MR)
交互式INTERACTIVE(Tez)
ONLINE (HBASE)
Streaming (Storm/Flink)
In-Memory (Spark)

Spark on YARN执行流程

Spark on YARN

  1. Client端将任务提交到YARN的RM中的ApplicationsManager,这其中包含Driver程序和启动命令;
  2. ApplicationsManager会找一个NodeManager来分配第一个Container容器,用来启动ApplicationMaster程序,ApplicationMaster启动Driver。启动之后Application会向ApplicationsManager注册,汇报已经创建成功,这时可以从WebUI来观测整个App的运行情况;
  3. ApplicationMaster会向ResourceManager的ResourceScheduler以轮询的方式申请资源(所谓轮询是指:如果集群资源不够,会先拿部分资源来运行,运行完之后释放container再执行),申请到资源并拿到资源列表,ApplicationMaster会到对应的NodeManager上去要求分配Container,继而启动Executor分配各种Task。
  4. AppMaster会一直监测各个Executor的执行情况,如果挂掉会进行重跑;
  5. 当所有的Executor执行完任务,AppMaster会向ApplicationsManager注销并关闭自己。

MR 与 Spark作业对比

  1. MR: base-process
    each task in its process: MapTask,ReduceTask process
    when a task completes,the process goes away
  2. Spark: base-thread
    many tasks can run concurrently in a single process (executor)
    一个Executor进程可以跑多个Task(这几个Task是并行计算的)
    this process sticks around for the lifetime of the Spark Application
    lifetime of the Spark Application:
    整个Spark Application包括一个driver和多个Executor
    一个程序起来以后,即使是没有job运行,Executor还是存在的

基于线程比基于进程的好处:
3. MapReduce启动,因为都是进程,启动时资源都需要申请,结束后需要销毁
4. Spark在申请到Executor之后,所有的task可以直接启动,不需要再去申请资源,这样省去了很多时间。

Cluster Manage

Spark Application ==> CM (Local,Standalone,Yarn,Mesos,K8S==> Pluggable 可插拔的)

Application Master :AM
每一个YARN Application 都会有AM (first container)
Executor runs in container ===> (memory of container > Executor memory)

Spark在YARN模式下仅仅是一个客户端

Spark on Yarn 中,Spark仅仅只是一个客户端而已,不需要装一个集群:
提交Spark作业的这台机器必须是有GATEWAY权限的机器,只要能访问到Hadoop的配置文件就可以了。跑Yarn的时候,只需要这台机器作为客户端就可以了,并不需要slaves那些东西,所以 Spark on Yarn 仅仅只需要一台客户端。不需要 spark 节点 ,不需要 start-master.shstart-slaves.sh,不需要在那些节点上起任何的Spark的进程。生产上95%都跑在Yarn上的。
工作上,只要GATEWAY+spark-submit就可以了,不需要起别的任何的进程

Deploy Mode

Spark的部署模式分为 Cluster 和 Client

  1. Client
    the Spark driver runs in the client process,AM is only used for requesting resources;
    由于AM只是需要申请资源,driver跑在本地,所以需要client监测并调度各个节点的任务,所以Client不能停掉;
    适用于交互、调试,希望立即看到 app 的输出,Cluster模式看日志比较麻烦,因为不知道AM运行在那个节点上;
    默认是client模式

  2. Cluster
    the Spark driver runs inside an ApplicationMaster process which is managed by YARN;
    the Client can go away after initiating the application
    适用于生产环境

ApplicationMaster:在client模式中只是申请资源的;在 cluster模式中既申请资源又调度task。

实例

export HADOOP_CONF_DIR=/home/hadoop/software/hadoop-xxxx/etc/hadoop 
./spark-shell --master yarn
--deploy-mode DEPLOY_MODE 默认是client,所以这个启动模式时client模式;
	注意,这里不能使用cluster模式,会报错:
	Error: Cluster deploy mode is not applicable to Spark shells.
	因为spark-shell作为一个与用户交互的命令行,必须将Driver运行在本地,而不是yarn上
--num-executors NUM 指定YARN模式下启动多少个Executor 默认是2个Executor

在WebUI中,显示 RunningContainer为3,AllocatedCPU VCores为3
RunningContainer为3是因为driver占用一个Container加上默认的2个Executor各自占用一个Container,所以是占用3个Container;
而默认一个Container占用一个虚拟Core,所以AllocatedCPU VCores为3。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值