blob: 0b591a3fc3dee76e6b2e9f8d900ad59ac76d6c88 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.livy.rsc.driver;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Properties;
import static java.nio.charset.StandardCharsets.UTF_8;
import org.apache.spark.SparkConf;
import org.apache.livy.rsc.RSCConf;
import static org.apache.livy.rsc.RSCConf.Entry.*;
/**
* The entry point for the RSC. Parses command line arguments and instantiates the correct
* driver based on the configuration.
*
* The driver is expected to have a public constructor that takes a two parameters:
* a SparkConf and a RSCConf.
*/
public final class RSCDriverBootstrapper {
public static void main(String[] args) throws Exception {
Properties props;
switch (args.length) {
case 0:
props = System.getProperties();
break;
case 1:
props = new Properties();
File propertyFile = new File(args[0]);
String fileName = propertyFile.getName();
if (!fileName.startsWith("livyConf") && fileName.endsWith("properties")) {
throw new IllegalArgumentException("File name " + fileName + "is not a legal file name.");
}
Reader r = new InputStreamReader(new FileInputStream(propertyFile), UTF_8);
try {
props.load(r);
} finally {
r.close();
}
break;
default:
throw new IllegalArgumentException("Too many arguments.");
}
SparkConf conf = new SparkConf(false);
RSCConf livyConf = new RSCConf(null);
for (String key : props.stringPropertyNames()) {
String value = props.getProperty(key);
if (key.startsWith(RSCConf.LIVY_SPARK_PREFIX)) {
livyConf.set(key.substring(RSCConf.LIVY_SPARK_PREFIX.length()), value);
props.remove(key);
} else if (key.startsWith(RSCConf.SPARK_CONF_PREFIX)) {
conf.set(key, value);
}
}
String driverClass = livyConf.get(DRIVER_CLASS);
if (driverClass == null) {
driverClass = RSCDriver.class.getName();
}
RSCDriver driver = (RSCDriver) Thread.currentThread()
.getContextClassLoader()
.loadClass(driverClass)
.getConstructor(SparkConf.class, RSCConf.class)
.newInstance(conf, livyConf);
driver.run();
}
}