diff --git a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java index f002c6e931f3bb488d83ba406f25f365c30613b5..c3107b100cbee5f5264928f3bd4c65435aa12fd0 100644 --- a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java +++ b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java @@ -4253,6 +4253,9 @@ private static void populateLlapDaemonVarsSet(Set llapDaemonVarsSetLocal "Port to use for LLAP plugin rpc server"), LLAP_PLUGIN_RPC_NUM_HANDLERS("hive.llap.plugin.rpc.num.handlers", 1, "Number of RPC handlers for AM LLAP plugin endpoint."), + LLAP_HDFS_PACKAGE_DIR("hive.llap.hdfs.package.dir", ".yarn", + "Package directory on HDFS used for holding collected configuration and libraries" + + " required for YARN launch. Note: this should be set to the same as yarn.service.base.path"), LLAP_DAEMON_WORK_DIRS("hive.llap.daemon.work.dirs", "", "Working directories for the daemon. This should not be set if running as a YARN\n" + "Service. It must be set when not running on YARN. If the value is set when\n" + diff --git a/llap-server/src/java/org/apache/hadoop/hive/llap/cli/service/LlapConfigJsonCreator.java b/llap-server/src/java/org/apache/hadoop/hive/llap/cli/service/LlapConfigJsonCreator.java index 8e9b9396796161b09727da0c1bfcea1bd08803d7..750a69d6536a9539b9421657f0fe32c177dab95e 100644 --- a/llap-server/src/java/org/apache/hadoop/hive/llap/cli/service/LlapConfigJsonCreator.java +++ b/llap-server/src/java/org/apache/hadoop/hive/llap/cli/service/LlapConfigJsonCreator.java @@ -102,6 +102,9 @@ private JSONObject createConfigJson() throws JSONException { long maxDirect = (xmx > 0 && cache > 0 && xmx < cache * 1.25) ? (long) (cache * 1.25) : -1; configs.put("max_direct_memory", Long.toString(maxDirect)); + configs.put(ConfVars.LLAP_HDFS_PACKAGE_DIR.varname, + conf.getVar(ConfVars.LLAP_HDFS_PACKAGE_DIR)); + return configs; } diff --git a/llap-server/src/java/org/apache/hadoop/hive/llap/cli/service/LlapServiceDriver.java b/llap-server/src/java/org/apache/hadoop/hive/llap/cli/service/LlapServiceDriver.java index bbc7265c40f420378dc0dcc552f8a5c7061c57fb..033cabfc2e6c2c30cf504b02d8a2865868eb067c 100644 --- a/llap-server/src/java/org/apache/hadoop/hive/llap/cli/service/LlapServiceDriver.java +++ b/llap-server/src/java/org/apache/hadoop/hive/llap/cli/service/LlapServiceDriver.java @@ -57,7 +57,7 @@ public class LlapServiceDriver { private static final Logger LOG = LoggerFactory.getLogger(LlapServiceDriver.class.getName()); - private static final String LLAP_PACKAGE_DIR = ".yarn/package/LLAP/"; + private static final String LLAP_RELATIVE_PACKAGE_DIR = "/package/LLAP/"; private static final String OUTPUT_DIR_PREFIX = "llap-yarn-"; /** @@ -356,8 +356,10 @@ private void startCluster(Configuration conf, String name, String packageName, P } LOG.info("Uploading the app tarball"); CoreFileSystem fs = new CoreFileSystem(conf); - fs.createWithPermissions(new Path(LLAP_PACKAGE_DIR), FsPermission.getDirDefault()); - fs.copyLocalFileToHdfs(new File(packageDir.toString(), packageName), new Path(LLAP_PACKAGE_DIR), + String llapPackageDir = HiveConf.getVar(conf, HiveConf.ConfVars.LLAP_HDFS_PACKAGE_DIR) + + LLAP_RELATIVE_PACKAGE_DIR; + fs.createWithPermissions(new Path(llapPackageDir), FsPermission.getDirDefault()); + fs.copyLocalFileToHdfs(new File(packageDir.toString(), packageName), new Path(llapPackageDir), new FsPermission("755")); LOG.info("Executing the launch command"); diff --git a/llap-server/src/main/resources/package.py b/llap-server/src/main/resources/package.py index c48ff79691525935ab2e3583565319c5f74b0f30..1e777f644d64db2c1aeecbab97a070346afabf26 100644 --- a/llap-server/src/main/resources/package.py +++ b/llap-server/src/main/resources/package.py @@ -73,7 +73,7 @@ def construct_service_site_global_string(kvs): def main(args): version = os.getenv("HIVE_VERSION") if not version: - version = strftime("%d%b%Y", gmtime()) + version = strftime("%d%b%Y", gmtime()) home = os.getenv("HIVE_HOME") output = "llap-yarn-%(version)s" % ({"version": version}) parser = argparse.ArgumentParser() @@ -116,10 +116,12 @@ def main(args): service_keytab_dir = args.service_keytab_dir service_keytab = args.service_keytab service_principal = args.service_principal + + config = json_parse(open(join(input, "config.json")).read()) # set the defaults only if the defaults are enabled if args.service_default_keytab: if not service_keytab_dir: - service_keytab_dir = ".yarn/keytabs/llap" + service_keytab_dir = config["hive.llap.hdfs.package.dir"] + "/keytabs/llap" if not service_keytab: service_keytab = "llap.keytab" if not service_principal: @@ -135,7 +137,6 @@ def main(args): print "Cannot find input files" sys.exit(1) return - config = json_parse(open(join(input, "config.json")).read()) java_home = config["java.home"] max_direct_memory = config["max_direct_memory"] @@ -167,12 +168,13 @@ def main(args): "placement" : args.service_placement, "health_percent": args.health_percent, "health_time_window": args.health_time_window_secs, - "health_init_delay": args.health_init_delay_secs + "health_init_delay": args.health_init_delay_secs, + "hdfs_package_dir": config["hive.llap.hdfs.package.dir"] } - + if not exists(output): os.makedirs(output) - + src = join(home, "scripts", "llap", "bin") dst = join(input, "bin") if exists(dst): diff --git a/llap-server/src/main/resources/templates.py b/llap-server/src/main/resources/templates.py index 1dc1611bf823f3223f309d0cd0177b734dc5caf3..81e2fa9ed2f4f408811679ca96d38e92f93063f6 100644 --- a/llap-server/src/main/resources/templates.py +++ b/llap-server/src/main/resources/templates.py @@ -17,7 +17,7 @@ "number_of_containers": %(instances)d, "launch_command": "$LLAP_DAEMON_BIN_HOME/llapDaemon.sh start &> $LLAP_DAEMON_TMP_DIR/shell.out", "artifact": { - "id": ".yarn/package/LLAP/llap-%(version)s.tar.gz", + "id": "%(hdfs_package_dir)s/package/LLAP/llap-%(version)s.tar.gz", "type": "TARBALL" }, "resource": { @@ -73,7 +73,7 @@ BASEDIR=$(dirname $0) yarn app -stop %(name)s yarn app -destroy %(name)s -hdfs dfs -mkdir -p .yarn/package/LLAP -hdfs dfs -copyFromLocal -f $BASEDIR/llap-%(version)s.tar.gz .yarn/package/LLAP +hdfs dfs -mkdir -p %(hdfs_package_dir)s/package/LLAP +hdfs dfs -copyFromLocal -f $BASEDIR/llap-%(version)s.tar.gz %(hdfs_package_dir)s/package/LLAP yarn app -launch %(name)s $BASEDIR/Yarnfile """