Some usability improvements
This commit is contained in:
parent
0f9d2ace6b
commit
67b9a33628
|
@ -17,6 +17,8 @@
|
|||
|
||||
package org.apache.spark.deploy
|
||||
|
||||
import java.net.URL
|
||||
|
||||
import scala.collection.mutable.ListBuffer
|
||||
|
||||
import org.apache.log4j.Level
|
||||
|
@ -68,8 +70,18 @@ private[spark] class ClientArguments(args: Array[String]) {
|
|||
|
||||
case "launch" :: _master :: _jarUrl :: _mainClass :: tail =>
|
||||
cmd = "launch"
|
||||
master = _master
|
||||
|
||||
try {
|
||||
new URL(_jarUrl)
|
||||
} catch {
|
||||
case e: Exception =>
|
||||
println(s"Jar url '${_jarUrl}' is not a valid URL.")
|
||||
println(s"Jar must be in URL format (e.g. hdfs://XX, file://XX)")
|
||||
printUsageAndExit(-1)
|
||||
}
|
||||
|
||||
jarUrl = _jarUrl
|
||||
master = _master
|
||||
mainClass = _mainClass
|
||||
_driverOptions ++= tail
|
||||
|
||||
|
|
|
@ -63,6 +63,10 @@ private[spark] class IndexPage(parent: MasterWebUI) {
|
|||
val completedDrivers = state.completedDrivers.sortBy(_.startTime).reverse
|
||||
val completedDriversTable = UIUtils.listingTable(driverHeaders, driverRow, completedDrivers)
|
||||
|
||||
// For now we only show driver information if the user has submitted drivers to the cluster.
|
||||
// This is until we integrate the notion of drivers and applications in the UI.
|
||||
def hasDrivers = activeDrivers.length > 0 || completedDrivers.length > 0
|
||||
|
||||
val content =
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
|
@ -98,6 +102,17 @@ private[spark] class IndexPage(parent: MasterWebUI) {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{if (hasDrivers)
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<h4> Running Drivers </h4>
|
||||
{activeDriversTable}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<h4> Completed Applications </h4>
|
||||
|
@ -105,19 +120,17 @@ private[spark] class IndexPage(parent: MasterWebUI) {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<h4> Active Drivers </h4>
|
||||
{activeDriversTable}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<h4> Completed Drivers </h4>
|
||||
{completedDriversTable}
|
||||
<div>
|
||||
{if (hasDrivers)
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<h4> Completed Drivers </h4>
|
||||
{completedDriversTable}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>;
|
||||
|
||||
UIUtils.basicSparkPage(content, "Spark Master at " + state.uri)
|
||||
}
|
||||
|
||||
|
@ -170,7 +183,7 @@ private[spark] class IndexPage(parent: MasterWebUI) {
|
|||
<td sorttable_customkey={driver.desc.mem.toString}>
|
||||
{Utils.megabytesToString(driver.desc.mem.toLong)}
|
||||
</td>
|
||||
<td>{driver.desc.command.mainClass}</td>
|
||||
<td>{driver.desc.command.arguments(1)}</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,6 +58,10 @@ private[spark] class IndexPage(parent: WorkerWebUI) {
|
|||
val finishedDrivers = workerState.finishedDrivers.sortBy(_.driverId).reverse
|
||||
def finishedDriverTable = UIUtils.listingTable(driverHeaders, driverRow, finishedDrivers)
|
||||
|
||||
// For now we only show driver information if the user has submitted drivers to the cluster.
|
||||
// This is until we integrate the notion of drivers and applications in the UI.
|
||||
def hasDrivers = runningDrivers.length > 0 || finishedDrivers.length > 0
|
||||
|
||||
val content =
|
||||
<div class="row-fluid"> <!-- Worker Details -->
|
||||
<div class="span12">
|
||||
|
@ -81,6 +85,17 @@ private[spark] class IndexPage(parent: WorkerWebUI) {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{if (hasDrivers)
|
||||
<div class="row-fluid"> <!-- Running Drivers -->
|
||||
<div class="span12">
|
||||
<h4> Running Drivers {workerState.drivers.size} </h4>
|
||||
{runningDriverTable}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<div class="row-fluid"> <!-- Finished Executors -->
|
||||
<div class="span12">
|
||||
<h4> Finished Executors </h4>
|
||||
|
@ -88,18 +103,15 @@ private[spark] class IndexPage(parent: WorkerWebUI) {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid"> <!-- Running Drivers -->
|
||||
<div class="span12">
|
||||
<h4> Running Drivers {workerState.drivers.size} </h4>
|
||||
{runningDriverTable}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid"> <!-- Finished Drivers -->
|
||||
<div class="span12">
|
||||
<h4> Finished Drivers </h4>
|
||||
{finishedDriverTable}
|
||||
</div>
|
||||
<div>
|
||||
{if (hasDrivers)
|
||||
<div class="row-fluid"> <!-- Finished Drivers -->
|
||||
<div class="span12">
|
||||
<h4> Finished Drivers </h4>
|
||||
{finishedDriverTable}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>;
|
||||
|
||||
UIUtils.basicSparkPage(content, "Spark Worker at %s:%s".format(
|
||||
|
@ -133,7 +145,7 @@ private[spark] class IndexPage(parent: WorkerWebUI) {
|
|||
def driverRow(driver: DriverRunner): Seq[Node] = {
|
||||
<tr>
|
||||
<td>{driver.driverId}</td>
|
||||
<td>{driver.driverDesc.command.mainClass}</td>
|
||||
<td>{driver.driverDesc.command.arguments(1)}</td>
|
||||
<td>{driver.finalState.getOrElse(DriverState.RUNNING)}</td>
|
||||
<td sorttable_customkey={driver.driverDesc.cores.toString}>
|
||||
{driver.driverDesc.cores.toString}
|
||||
|
|
Loading…
Reference in a new issue