YARN-6365. Get static SLS html resources from classpath. Contributed by Yufei Gu.

This commit is contained in:
Andrew Wang 2017-04-19 11:08:59 -07:00
parent 41ac190dba
commit 7e075a50e3
4 changed files with 35 additions and 28 deletions

View File

@ -76,6 +76,22 @@
</dependencies> </dependencies>
<build> <build>
<resources>
<resource>
<directory>src/main/</directory>
<includes>
<include>html/simulate.html.template</include>
<include>html/simulate.info.html.template</include>
<include>html/track.html.template</include>
<include>html/css/bootstrap-responsive.min.css</include>
<include>html/css/bootstrap.min.css</include>
<include>html/js/thirdparty/bootstrap.min.js</include>
<include>html/js/thirdparty/d3.v3.js</include>
<include>html/js/thirdparty/d3-LICENSE</include>
<include>html/js/thirdparty/jquery.js</include>
</includes>
</resource>
</resources>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -71,8 +71,6 @@ function parse_args()
function calculate_classpath function calculate_classpath
{ {
hadoop_add_to_classpath_tools hadoop-sls hadoop_add_to_classpath_tools hadoop-sls
hadoop_debug "Injecting ${HADOOP_TOOLS_HOME}/${HADOOP_TOOLS_DIR}/sls/html into CLASSPATH"
hadoop_add_classpath "${HADOOP_TOOLS_HOME}/${HADOOP_TOOLS_DIR}/sls/html"
} }
function run_simulation() { function run_simulation() {
@ -103,16 +101,12 @@ function run_simulation() {
hadoop_java_exec sls org.apache.hadoop.yarn.sls.SLSRunner ${args} hadoop_java_exec sls org.apache.hadoop.yarn.sls.SLSRunner ${args}
} }
this="${BASH_SOURCE-$0}"
bin=$(cd -P -- "$(dirname -- "${this}")" >/dev/null && pwd -P)
# copy 'html' directory to current directory to make sure web sever can access
cp -r "${bin}/../html" "$(pwd)"
# let's locate libexec... # let's locate libexec...
if [[ -n "${HADOOP_HOME}" ]]; then if [[ -n "${HADOOP_HOME}" ]]; then
HADOOP_DEFAULT_LIBEXEC_DIR="${HADOOP_HOME}/libexec" HADOOP_DEFAULT_LIBEXEC_DIR="${HADOOP_HOME}/libexec"
else else
this="${BASH_SOURCE-$0}"
bin=$(cd -P -- "$(dirname -- "${this}")" >/dev/null && pwd -P)
HADOOP_DEFAULT_LIBEXEC_DIR="${bin}/../../../../../libexec" HADOOP_DEFAULT_LIBEXEC_DIR="${bin}/../../../../../libexec"
fi fi

View File

@ -18,7 +18,6 @@
package org.apache.hadoop.yarn.sls.web; package org.apache.hadoop.yarn.sls.web;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
import java.text.MessageFormat; import java.text.MessageFormat;
@ -31,7 +30,7 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils;
import org.apache.hadoop.classification.InterfaceAudience.Private; import org.apache.hadoop.classification.InterfaceAudience.Private;
import org.apache.hadoop.classification.InterfaceStability.Unstable; import org.apache.hadoop.classification.InterfaceStability.Unstable;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.SchedulerEventType; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.SchedulerEventType;
@ -39,17 +38,17 @@ import org.apache.hadoop.yarn.sls.SLSRunner;
import org.apache.hadoop.yarn.sls.scheduler.FairSchedulerMetrics; import org.apache.hadoop.yarn.sls.scheduler.FairSchedulerMetrics;
import org.apache.hadoop.yarn.sls.scheduler.SchedulerMetrics; import org.apache.hadoop.yarn.sls.scheduler.SchedulerMetrics;
import org.apache.hadoop.yarn.sls.scheduler.SchedulerWrapper; import org.apache.hadoop.yarn.sls.scheduler.SchedulerWrapper;
import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.http.MimeTypes;
import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.handler.ResourceHandler;
import com.codahale.metrics.Counter; import com.codahale.metrics.Counter;
import com.codahale.metrics.Gauge; import com.codahale.metrics.Gauge;
import com.codahale.metrics.Histogram; import com.codahale.metrics.Histogram;
import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.handler.ResourceHandler;
@Private @Private
@Unstable @Unstable
@ -86,12 +85,12 @@ public class SLSWebApp extends HttpServlet {
// load templates // load templates
ClassLoader cl = Thread.currentThread().getContextClassLoader(); ClassLoader cl = Thread.currentThread().getContextClassLoader();
try { try {
simulateInfoTemplate = FileUtils.readFileToString(new File( simulateInfoTemplate = IOUtils.toString(
cl.getResource("simulate.info.html.template").getFile())); cl.getResourceAsStream("html/simulate.info.html.template"));
simulateTemplate = FileUtils.readFileToString(new File( simulateTemplate = IOUtils.toString(
cl.getResource("simulate.html.template").getFile())); cl.getResourceAsStream("html/simulate.html.template"));
trackTemplate = FileUtils.readFileToString(new File( trackTemplate = IOUtils.toString(
cl.getResource("track.html.template").getFile())); cl.getResourceAsStream("html/track.html.template"));
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -107,20 +106,20 @@ public class SLSWebApp extends HttpServlet {
public SLSWebApp(SchedulerWrapper wrapper, int metricsAddressPort) { public SLSWebApp(SchedulerWrapper wrapper, int metricsAddressPort) {
this.wrapper = wrapper; this.wrapper = wrapper;
handleOperTimecostHistogramMap = handleOperTimecostHistogramMap = new HashMap<>();
new HashMap<SchedulerEventType, Histogram>(); queueAllocatedMemoryCounterMap = new HashMap<>();
queueAllocatedMemoryCounterMap = new HashMap<String, Counter>(); queueAllocatedVCoresCounterMap = new HashMap<>();
queueAllocatedVCoresCounterMap = new HashMap<String, Counter>();
schedulerMetrics = wrapper.getSchedulerMetrics(); schedulerMetrics = wrapper.getSchedulerMetrics();
metrics = schedulerMetrics.getMetrics(); metrics = schedulerMetrics.getMetrics();
port = metricsAddressPort; port = metricsAddressPort;
} }
public void start() throws Exception { public void start() throws Exception {
// static files
final ResourceHandler staticHandler = new ResourceHandler(); final ResourceHandler staticHandler = new ResourceHandler();
staticHandler.setMimeTypes(new MimeTypes()); staticHandler.setMimeTypes(new MimeTypes());
staticHandler.setResourceBase("html"); String webRootDir = getClass().getClassLoader().getResource("html").
toExternalForm();
staticHandler.setResourceBase(webRootDir);
Handler handler = new AbstractHandler() { Handler handler = new AbstractHandler() {
@Override @Override

View File

@ -97,7 +97,7 @@ This section will show how to use the simulator. Here let `$HADOOP_ROOT` represe
* `bin`: contains running scripts for the simulator. * `bin`: contains running scripts for the simulator.
* `html`: contains several html/css/js files we needed for real-time tracking. * `html`: Users can also reproduce those real-time tracking charts in offline mode. Just upload the `realtimetrack.json` to `$HADOOP_ROOT/share/hadoop/tools/sls/html/showSimulationTrace.html`. For browser security problem, need to put files `realtimetrack.json` and `showSimulationTrace.html` in the same directory.
* `sample-conf`: specifies the simulator configurations. * `sample-conf`: specifies the simulator configurations.
@ -279,8 +279,6 @@ After the simulator finishes, all logs are saved in the output directory specifi
* Folder `metrics`: logs generated by the Metrics. * Folder `metrics`: logs generated by the Metrics.
Users can also reproduce those real-time tracking charts in offline mode. Just upload the `realtimetrack.json` to `$HADOOP_ROOT/share/hadoop/tools/sls/html/showSimulationTrace.html`. For browser security problem, need to put files `realtimetrack.json` and `showSimulationTrace.html` in the same directory.
Appendix Appendix
-------- --------