in server/src/main/scala/org/apache/livy/server/interactive/InteractiveSession.scala [81:157]
def create(
id: Int,
name: Option[String],
owner: String,
proxyUser: Option[String],
livyConf: LivyConf,
accessManager: AccessManager,
request: CreateInteractiveRequest,
sessionStore: SessionStore,
ttl: Option[String],
idleTimeout: Option[String],
mockApp: Option[SparkApp] = None,
mockClient: Option[RSCClient] = None): InteractiveSession = {
val appTag = s"livy-session-$id-${Random.alphanumeric.take(8).mkString}".toLowerCase()
val impersonatedUser = accessManager.checkImpersonation(proxyUser, owner)
val client = mockClient.orElse {
val conf = SparkApp.prepareSparkConf(appTag, livyConf, prepareConf(
request.conf, request.jars, request.files, request.archives, request.pyFiles, livyConf))
val builderProperties = prepareBuilderProp(conf, request.kind, livyConf)
val userOpts: Map[String, Option[String]] = Map(
"spark.driver.cores" -> request.driverCores.map(_.toString),
SparkLauncher.DRIVER_MEMORY -> request.driverMemory.map(_.toString),
SparkLauncher.EXECUTOR_CORES -> request.executorCores.map(_.toString),
SparkLauncher.EXECUTOR_MEMORY -> request.executorMemory.map(_.toString),
"spark.executor.instances" -> request.numExecutors.map(_.toString),
"spark.app.name" -> request.name.map(_.toString),
"spark.yarn.queue" -> request.queue
)
userOpts.foreach { case (key, opt) =>
opt.foreach { value => builderProperties.put(key, value) }
}
builderProperties.getOrElseUpdate("spark.app.name", s"livy-session-$id")
info(s"Creating Interactive session $id: [owner: $owner, request: $request]")
val builder = new LivyClientBuilder()
.setAll(builderProperties.asJava)
.setConf("livy.client.session-id", id.toString)
.setConf(RSCConf.Entry.DRIVER_CLASS.key(), "org.apache.livy.repl.ReplDriver")
.setConf(RSCConf.Entry.PROXY_USER.key(), impersonatedUser.orNull)
.setURI(new URI("rsc:/"))
Option(builder.build().asInstanceOf[RSCClient])
}
new InteractiveSession(
id,
name,
None,
appTag,
client,
SessionState.Starting,
request.kind,
request.heartbeatTimeoutInSecond,
livyConf,
owner,
impersonatedUser,
ttl,
idleTimeout,
sessionStore,
request.driverMemory,
request.driverCores,
request.executorMemory,
request.executorCores,
request.conf,
request.archives,
request.files,
request.jars,
request.numExecutors,
request.pyFiles,
request.queue,
mockApp)
}