Skip to content

Commit 770d307

Browse files
committed
Addressed review comments: added examples to docs, reverted the change in FineGrainedSchedulerBackend, and moved the getSecretEnvVar and getSecretVolumes code blocks to be more consistent with rest of code.
1 parent 73b2cbf commit 770d307

File tree

6 files changed

+85
-46
lines changed

6 files changed

+85
-46
lines changed

docs/running-on-mesos.md

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,9 @@ See the [configuration page](configuration.html) for information on Spark config
490490
<td>
491491
A comma-separated list that, if set, the contents of the secret referenced
492492
by spark.mesos.driver.secret.names or spark.mesos.driver.secret.values will be
493-
set to the provided environment variable in the driver's process.
493+
set to the provided environment variable in the driver's process. Example:
494+
495+
<pre>ENVKEY1,ENVKEY2</pre>
494496
</td>
495497
</tr>
496498
<tr>
@@ -501,23 +503,29 @@ See the [configuration page](configuration.html) for information on Spark config
501503
spark.mesos.driver.secret.names or spark.mesos.driver.secret.values will be
502504
written to the provided file. Paths are relative to the container's work
503505
directory. Absolute paths must already exist. Consult the Mesos Secret
504-
protobuf for more information.
506+
protobuf for more information. Example:
507+
508+
<pre>filename1,filename2</pre>
505509
</td>
506510
</tr>
507511
<tr>
508512
<td><code>spark.mesos.driver.secret.names</code></td>
509513
<td><code>(none)</code></td>
510514
<td>
511515
A comma-separated list of secret references. Consult the Mesos Secret
512-
protobuf for more information.
516+
protobuf for more information. Example:
517+
518+
<pre>secretname1,secretname2</pre>
513519
</td>
514520
</tr>
515521
<tr>
516522
<td><code>spark.mesos.driver.secret.values</code></td>
517523
<td><code>(none)</code></td>
518524
<td>
519525
A comma-separated list of secret values. Consult the Mesos Secret
520-
protobuf for more information.
526+
protobuf for more information. Example:
527+
528+
<pre>secretvalue1,secretvalue2</pre>
521529
</td>
522530
</tr>
523531

@@ -527,7 +535,9 @@ See the [configuration page](configuration.html) for information on Spark config
527535
<td>
528536
A comma-separated list that, if set, the contents of the secret referenced
529537
by spark.mesos.executor.secret.names or spark.mesos.executor.secret.values will be
530-
set to the provided environment variable in the executor's process.
538+
set to the provided environment variable in the executor's process. Example:
539+
540+
<pre>ENVKEY1,ENVKEY2</pre>
531541
</td>
532542
</tr>
533543
<tr>
@@ -538,23 +548,29 @@ See the [configuration page](configuration.html) for information on Spark config
538548
spark.mesos.executor.secret.names or spark.mesos.executor.secret.values will be
539549
written to the provided file. Paths are relative to the container's work
540550
directory. Absolute paths must already exist. Consult the Mesos Secret
541-
protobuf for more information.
551+
protobuf for more information. Example:
552+
553+
<pre>filename1,filename2</pre>
542554
</td>
543555
</tr>
544556
<tr>
545557
<td><code>spark.mesos.executor.secret.names</code></td>
546558
<td><code>(none)</code></td>
547559
<td>
548560
A comma-separated list of secret references. Consult the Mesos Secret
549-
protobuf for more information.
561+
protobuf for more information. Example:
562+
563+
<pre>secretname1,secretname2</pre>
550564
</td>
551565
</tr>
552566
<tr>
553567
<td><code>spark.mesos.executor.secret.values</code></td>
554568
<td><code>(none)</code></td>
555569
<td>
556570
A comma-separated list of secret values. Consult the Mesos Secret
557-
protobuf for more information.
571+
protobuf for more information. Example:
572+
573+
<pre>secretvalue1,secretvalue2</pre>
558574
</td>
559575
</tr>
560576

resource-managers/mesos/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosClusterScheduler.scala

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,16 @@ private[spark] class MesosClusterScheduler(
393393
}
394394

395395
// add secret environment variables
396-
MesosSchedulerBackendUtil.addSecretEnvVar(envBuilder, desc.conf, config.driverSecretConfig)
396+
MesosSchedulerBackendUtil.getSecretEnvVar(desc.conf, config.driverSecretConfig)
397+
.foreach { variable =>
398+
if (variable.getSecret.getReference.isInitialized) {
399+
logInfo(s"Setting reference secret ${variable.getSecret.getReference.getName} " +
400+
s"on file ${variable.getName}")
401+
} else {
402+
logInfo(s"Setting secret on environment variable name=${variable.getName}")
403+
}
404+
envBuilder.addVariables(variable)
405+
}
397406

398407
envBuilder.build()
399408
}
@@ -411,6 +420,23 @@ private[spark] class MesosClusterScheduler(
411420
CommandInfo.URI.newBuilder().setValue(uri.trim()).setCache(useFetchCache).build())
412421
}
413422

423+
private def getContainerInfo(desc: MesosDriverDescription): ContainerInfo.Builder = {
424+
val containerInfo = MesosSchedulerBackendUtil.buildContainerInfo(desc.conf)
425+
426+
MesosSchedulerBackendUtil.getSecretVolume(desc.conf, config.driverSecretConfig)
427+
.foreach { volume =>
428+
if (volume.getSource.getSecret.getReference.isInitialized) {
429+
logInfo(s"Setting reference secret ${volume.getSource.getSecret.getReference.getName} " +
430+
s"on file ${volume.getContainerPath}")
431+
} else {
432+
logInfo(s"Setting secret on file name=${volume.getContainerPath}")
433+
}
434+
containerInfo.addVolumes(volume)
435+
}
436+
437+
containerInfo
438+
}
439+
414440
private def getDriverCommandValue(desc: MesosDriverDescription): String = {
415441
val dockerDefined = desc.conf.contains("spark.mesos.executor.docker.image")
416442
val executorUri = getDriverExecutorURI(desc)
@@ -543,8 +569,7 @@ private[spark] class MesosClusterScheduler(
543569
.setName(s"Driver for ${appName}")
544570
.setSlaveId(offer.offer.getSlaveId)
545571
.setCommand(buildDriverCommand(desc))
546-
.setContainer(MesosSchedulerBackendUtil.buildContainerInfo(
547-
desc.conf, config.driverSecretConfig))
572+
.setContainer(getContainerInfo(desc))
548573
.addAllResources(cpuResourcesToUse.asJava)
549574
.addAllResources(memResourcesToUse.asJava)
550575
.setLabels(driverLabels)

resource-managers/mesos/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosCoarseGrainedSchedulerBackend.scala

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import scala.collection.JavaConverters._
2828
import scala.collection.mutable
2929
import scala.concurrent.Future
3030

31-
import org.apache.spark.{SecurityManager, SparkContext, SparkException, TaskState}
31+
import org.apache.spark.{SecurityManager, SparkConf, SparkContext, SparkException, TaskState}
3232
import org.apache.spark.deploy.mesos.config._
3333
import org.apache.spark.deploy.security.HadoopDelegationTokenManager
3434
import org.apache.spark.internal.config
@@ -233,7 +233,15 @@ private[spark] class MesosCoarseGrainedSchedulerBackend(
233233
.build())
234234
}
235235

236-
MesosSchedulerBackendUtil.addSecretEnvVar(environment, conf, executorSecretConfig)
236+
MesosSchedulerBackendUtil.getSecretEnvVar(conf, executorSecretConfig).foreach { variable =>
237+
if (variable.getSecret.getReference.isInitialized) {
238+
logInfo(s"Setting reference secret ${variable.getSecret.getReference.getName} " +
239+
s"on file ${variable.getName}")
240+
} else {
241+
logInfo(s"Setting secret on environment variable name=${variable.getName}")
242+
}
243+
environment.addVariables(variable)
244+
}
237245

238246
val command = CommandInfo.newBuilder()
239247
.setEnvironment(environment)
@@ -409,6 +417,22 @@ private[spark] class MesosCoarseGrainedSchedulerBackend(
409417
}
410418
}
411419

420+
private def getContainerInfo(conf: SparkConf): ContainerInfo.Builder = {
421+
val containerInfo = MesosSchedulerBackendUtil.buildContainerInfo(conf)
422+
423+
MesosSchedulerBackendUtil.getSecretVolume(conf, executorSecretConfig).foreach { volume =>
424+
if (volume.getSource.getSecret.getReference.isInitialized) {
425+
logInfo(s"Setting reference secret ${volume.getSource.getSecret.getReference.getName} " +
426+
s"on file ${volume.getContainerPath}")
427+
} else {
428+
logInfo(s"Setting secret on file name=${volume.getContainerPath}")
429+
}
430+
containerInfo.addVolumes(volume)
431+
}
432+
433+
containerInfo
434+
}
435+
412436
/**
413437
* Returns a map from OfferIDs to the tasks to launch on those offers. In order to maximize
414438
* per-task memory and IO, tasks are round-robin assigned to offers.
@@ -460,8 +484,7 @@ private[spark] class MesosCoarseGrainedSchedulerBackend(
460484
.setName(s"${sc.appName} $taskId")
461485
.setLabels(MesosProtoUtils.mesosLabels(taskLabels))
462486
.addAllResources(resourcesToUse.asJava)
463-
.setContainer(MesosSchedulerBackendUtil.buildContainerInfo(
464-
sc.conf, executorSecretConfig))
487+
.setContainer(getContainerInfo(sc.conf))
465488

466489
tasks(offer.getId) ::= taskBuilder.build()
467490
remainingResources(offerId) = resourcesLeft.asJava

resource-managers/mesos/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosFineGrainedSchedulerBackend.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ private[spark] class MesosFineGrainedSchedulerBackend(
161161
.setData(ByteString.copyFrom(createExecArg()))
162162

163163
executorInfo.setContainer(
164-
MesosSchedulerBackendUtil.buildContainerInfo(sc.conf, config.executorSecretConfig))
164+
MesosSchedulerBackendUtil.buildContainerInfo(sc.conf))
165165
(executorInfo.build(), resourcesAfterMem.asJava)
166166
}
167167

resource-managers/mesos/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosSchedulerBackendUtil.scala

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ private[mesos] object MesosSchedulerBackendUtil extends Logging {
126126
.toList
127127
}
128128

129-
def buildContainerInfo(conf: SparkConf, secretConfig: MesosSecretConfig):
129+
def buildContainerInfo(conf: SparkConf):
130130
ContainerInfo.Builder = {
131131
val containerType = if (conf.contains("spark.mesos.executor.docker.image") &&
132132
conf.get("spark.mesos.containerizer", "docker") == "docker") {
@@ -175,34 +175,9 @@ private[mesos] object MesosSchedulerBackendUtil extends Logging {
175175
containerInfo.addNetworkInfos(info)
176176
}
177177

178-
getSecretVolume(conf, secretConfig).foreach { volume =>
179-
if (volume.getSource.getSecret.getReference.isInitialized) {
180-
logInfo(s"Setting reference secret ${volume.getSource.getSecret.getReference.getName}" +
181-
s"on file ${volume.getContainerPath}")
182-
} else {
183-
logInfo(s"Setting secret on file name=${volume.getContainerPath}")
184-
}
185-
containerInfo.addVolumes(volume)
186-
}
187-
188178
containerInfo
189179
}
190180

191-
def addSecretEnvVar(
192-
envBuilder: Environment.Builder,
193-
conf: SparkConf,
194-
secretConfig: MesosSecretConfig): Unit = {
195-
getSecretEnvVar(conf, secretConfig).foreach { variable =>
196-
if (variable.getSecret.getReference.isInitialized) {
197-
logInfo(s"Setting reference secret ${variable.getSecret.getReference.getName}" +
198-
s"on file ${variable.getName}")
199-
} else {
200-
logInfo(s"Setting secret on environment variable name=${variable.getName}")
201-
}
202-
envBuilder.addVariables(variable)
203-
}
204-
}
205-
206181
private def getSecrets(conf: SparkConf, secretConfig: MesosSecretConfig):
207182
Seq[Secret] = {
208183
def createValueSecret(data: String): Secret = {
@@ -243,7 +218,7 @@ private[mesos] object MesosSchedulerBackendUtil extends Logging {
243218
false
244219
}
245220

246-
private def getSecretVolume(conf: SparkConf, secretConfig: MesosSecretConfig): List[Volume] = {
221+
def getSecretVolume(conf: SparkConf, secretConfig: MesosSecretConfig): List[Volume] = {
247222
val secrets = getSecrets(conf, secretConfig)
248223
val secretPaths: Seq[String] =
249224
conf.get(secretConfig.SECRET_FILENAMES).getOrElse(Nil)
@@ -267,7 +242,7 @@ private[mesos] object MesosSchedulerBackendUtil extends Logging {
267242
}.toList
268243
}
269244

270-
private def getSecretEnvVar(conf: SparkConf, secretConfig: MesosSecretConfig):
245+
def getSecretEnvVar(conf: SparkConf, secretConfig: MesosSecretConfig):
271246
List[Variable] = {
272247
val secrets = getSecrets(conf, secretConfig)
273248
val secretEnvKeys = conf.get(secretConfig.SECRET_ENVKEYS).getOrElse(Nil)

resource-managers/mesos/src/test/scala/org/apache/spark/scheduler/cluster/mesos/MesosSchedulerBackendUtilSuite.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class MesosSchedulerBackendUtilSuite extends SparkFunSuite {
2828
conf.set("spark.mesos.executor.docker.image", "test")
2929

3030
val containerInfo = MesosSchedulerBackendUtil.buildContainerInfo(
31-
conf, config.executorSecretConfig)
31+
conf)
3232
val params = containerInfo.getDocker.getParametersList
3333

3434
assert(params.size() == 0)
@@ -40,7 +40,7 @@ class MesosSchedulerBackendUtilSuite extends SparkFunSuite {
4040
conf.set("spark.mesos.executor.docker.image", "test")
4141

4242
val containerInfo = MesosSchedulerBackendUtil.buildContainerInfo(
43-
conf, config.executorSecretConfig)
43+
conf)
4444
val params = containerInfo.getDocker.getParametersList
4545
assert(params.size() == 3)
4646
assert(params.get(0).getKey == "a")

0 commit comments

Comments
 (0)