Spark源码走读10——Spark On Yarn

首先需要修改配置文件spark-env.sh。在这个文件中需要添加两个属性:

Export HADOOP_HOME=/../hadoop..

ExportHADOOP_CONF_DIR=/../hadoop/etc/hadoop

这里,一个是要hadoop的home目录。一个是配置文件目录。

还需要配置一个就是spark-defaults.conf这个文件:


需要修改红色框内的文件。下面看下这个文件里面的内容:


在spark的源文件中给出了一些配置参数的示例。另外它还下面一个可以配置的属性

属性名

说明

默认值

spark.yarn.applicationMaster.waitTries

RM等待Spark AppMaster启动次数,也就是SparkContext初始化次数。超过这个数值,启动失败。

10

spark.yarn.submit.file.replication

应用程序上载到HDFS的文件的复制因子

3

spark.yarn.preserve.staging.files

设置为true,在job结束后,将stage相关的文件保留而不是删除。

false

spark.yarn.scheduler.heartbeat.interval-ms

Spark AppMaster发送心跳信息给YARN RM的时间间隔

5000

spark.yarn.max.executor.failures

导致应用程序宣告失败的最大executor失败数

2倍于executor数

spark.yarn.historyServer.address

Spark history server的地址(不要加http://)。这个地址会在应用程序完成后提交给YARN RM,使得将信息从RM UI连接到history server UI上。


还有更多的配置内容参考http://blog.csdn.net/book_mmicky/article/details/29472439。这里不一一列举。

运行流程

下面是Spark On Yarn的流程图:


上图比较只管的看到到了流程,下面具体看几个源码

Client

在Client类中的main方法实例话Client:new Client(args, sparkConf).run()。在run方法中,又调用了val appId = runApp()方法。runApp()源码如下:

  def runApp() = {

    validateArgs()

 

    init(yarnConf)

    start()

    logClusterResourceDetails()

 

    val newApp = super.getNewApplication()

    val appId = newApp.getApplicationId()

 

    verifyClusterResources(newApp)

    val appContext = createApplicationSubmissionContext(appId)

    val appStagingDir = getAppStagingDir(appId)

    val localResources = prepareLocalResources(appStagingDir)

    val env = setupLaunchEnv(localResources, appStagingDir)

    val amContainer = createContainerLaunchContext(newApp, localResources, env)

 

    val capability = Records.newRecord(classOf[Resource]).asInstanceOf[Resource]

    // Memory for the ApplicationMaster.

    capability.setMemory(args.amMemory + memoryOverhead)

    amContainer.setResource(capability)

 

    appContext.setQueue(args.amQueue)

    appContext.setAMContainerSpec(amContainer)

    appContext.setUser(UserGroupInformation.getCurrentUser().getShortUserName())

 

    submitApp(appContext)

    appId

  }

 

1)这里首先对一些参数配置的校验,然后初始化、启动Client

2)提交请求到ResouceManager,检查集群的内存情况。

3)设置一些参数,请求队列

4)正式提交APP

ApplicationManager

AM负责运行Spark Application的Driver程序,并分配执行需要的Executors。里面也有个main方法实例化AM并调用run,源码如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值