SAMZA-2499: Add submission config file support (#1336)
API Changes:
1. Add --config-path option support when running run-app.sh
Upgrade Instructions:
None
Usage Instructions:
Alternative way when submitting job,
deploy/samza/bin/run-app.sh \
--config app.class=A \
--config job.stream.factory=B \
--config yarn.package.path=C \
--config job.config.loader.factory=D \
--config job.config.loader.properties.xx=E \
--config job.name=F
can be simplied to
deploy/samza/bin/run-app.sh --config-path=/path/to/submission/properties/file/submission.properties
where submission.properties contains
app.class=A
job.stream.factory=B
yarn.package.path=C
job.config.loader.factory=D
job.config.loader.properties.xx=E
job.name=F
diff --git a/samza-core/src/main/java/org/apache/samza/runtime/ApplicationRunnerMain.java b/samza-core/src/main/java/org/apache/samza/runtime/ApplicationRunnerMain.java
index 220b68b..b917d4d 100644
--- a/samza-core/src/main/java/org/apache/samza/runtime/ApplicationRunnerMain.java
+++ b/samza-core/src/main/java/org/apache/samza/runtime/ApplicationRunnerMain.java
@@ -19,10 +19,14 @@
package org.apache.samza.runtime;
+import java.util.HashMap;
+import java.util.Map;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
import org.apache.samza.config.Config;
+import org.apache.samza.config.ConfigLoader;
import org.apache.samza.config.MapConfig;
+import org.apache.samza.config.loaders.PropertiesConfigLoader;
import org.apache.samza.util.CommandLine;
@@ -40,6 +44,12 @@
.describedAs("operation=run")
.defaultsTo("run");
+ OptionSpec<String> configPathOpt =
+ parser().accepts("config-path", "File path to submission properties file.")
+ .withOptionalArg()
+ .ofType(String.class)
+ .describedAs("path");
+
ApplicationRunnerOperation getOperation(OptionSet options) {
String rawOp = options.valueOf(operationOpt);
return ApplicationRunnerOperation.fromString(rawOp);
@@ -47,8 +57,16 @@
@Override
public Config loadConfig(OptionSet options) {
- // ConfigLoader is not supposed to be invoked to load full job config during job submission.
- return new MapConfig(getConfigOverrides(options));
+ Map<String, String> submissionConfig = new HashMap<>();
+
+ if (options.has(configPathOpt)) {
+ ConfigLoader loader = new PropertiesConfigLoader(options.valueOf(configPathOpt));
+ submissionConfig.putAll(loader.getConfig());
+ }
+
+ submissionConfig.putAll(getConfigOverrides(options));
+
+ return new MapConfig(submissionConfig);
}
}