diff --git llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapOptionsProcessor.java llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapOptionsProcessor.java index 8b98aee..e680dfc 100644 --- llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapOptionsProcessor.java +++ llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapOptionsProcessor.java @@ -52,6 +52,7 @@ public static final String OPTION_JAVA_HOME = "javaHome"; // forward via config.json public static final String OPTION_HIVECONF = "hiveconf"; // llap-daemon-site if relevant parameter public static final String OPTION_SLIDER_AM_CONTAINER_MB = "slider-am-container-mb"; // forward as arg + public static final String OPTION_SLIDER_APPCONFIG_GLOBAL = "slider-appconfig-global"; // forward as arg public static final String OPTION_LLAP_QUEUE = "queue"; // forward via config.json public static final String OPTION_IO_THREADS = "iothreads"; // llap-daemon-site @@ -256,6 +257,11 @@ public LlapOptionsProcessor() { .withLongOpt(OPTION_SLIDER_AM_CONTAINER_MB) .withDescription("The size of the slider AppMaster container in MB").create('b')); + options.addOption(OptionBuilder.withValueSeparator().hasArgs(2).withArgName("property=value") + .withLongOpt(OPTION_SLIDER_APPCONFIG_GLOBAL) + .withDescription("Property (key=value) to be set in the global section of the Slider appConfig") + .create()); + options.addOption(OptionBuilder.hasArg().withArgName(OPTION_IO_THREADS) .withLongOpt(OPTION_IO_THREADS).withDescription("executor per instance").create('t')); diff --git llap-server/src/main/resources/package.py llap-server/src/main/resources/package.py index 9d61058..380c6a8 100644 --- llap-server/src/main/resources/package.py +++ llap-server/src/main/resources/package.py @@ -3,6 +3,7 @@ import sys,os,stat import argparse from json import loads as json_parse +from json import dumps as json_print from os.path import exists, join, relpath from time import gmtime, strftime import shutil @@ -57,6 +58,19 @@ def zipdir(path, zip, prefix="."): src = join(root, file) dst = src.replace(path, prefix) zip.write(src, dst) + +def slider_appconfig_global_property(arg): + kv = arg.split("=") + if len(kv) != 2: + raise argparse.ArgumentTypeError("Value must be split into two parts separated by =") + return tuple(kv) + +def construct_slider_site_global_string(kvs): + if not kvs: + return "" + kvs = map(lambda a : a[0], kvs) + return ",\n" + ",\n".join([" %s:%s" % (json_print(k), json_print(v)) for (k,v) in kvs]) + def main(args): version = os.getenv("HIVE_VERSION") @@ -74,6 +88,7 @@ def main(args): parser.add_argument("--logger", default="RFA") parser.add_argument("--chaosmonkey", type=int, default=0) parser.add_argument("--slider-am-container-mb", type=int, default=1024) + parser.add_argument("--slider-appconfig-global", nargs='*', type=slider_appconfig_global_property, action='append') parser.add_argument("--slider-keytab-dir", default="") parser.add_argument("--slider-keytab", default="") parser.add_argument("--slider-principal", default="") @@ -128,6 +143,7 @@ def main(args): "monkey_percentage" : monkey_percentage, "monkey_enabled" : args.chaosmonkey > 0, "slider.am.container.mb" : args.slider_am_container_mb, + "slider_appconfig_global_append": construct_slider_site_global_string(args.slider_appconfig_global), "slider_am_jvm_heapsize" : slider_am_jvm_heapsize, "slider_keytab_dir" : slider_keytab_dir, "slider_keytab" : slider_keytab, diff --git llap-server/src/main/resources/templates.py llap-server/src/main/resources/templates.py index 5684f33..36162bb 100644 --- llap-server/src/main/resources/templates.py +++ llap-server/src/main/resources/templates.py @@ -84,7 +84,8 @@ "internal.chaos.monkey.probability.amlaunchfailure": "0", "internal.chaos.monkey.probability.containerfailure": "%(monkey_percentage)d", "internal.chaos.monkey.interval.seconds": "%(monkey_interval)d", - "internal.chaos.monkey.enabled": "%(monkey_enabled)s" + "internal.chaos.monkey.enabled": "%(monkey_enabled)s"%(slider_appconfig_global_append)s + }, "components": { "slider-appmaster": {