You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@samza.apache.org by sh...@apache.org on 2019/11/05 20:03:16 UTC
[samza] branch master updated: SAMZA-2364: Include the localized
resource lib directory in the classpath of SamzaContainer (#1207)
This is an automated email from the ASF dual-hosted git repository.
shanthoosh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/samza.git
The following commit(s) were added to refs/heads/master by this push:
new de215f1 SAMZA-2364: Include the localized resource lib directory in the classpath of SamzaContainer (#1207)
de215f1 is described below
commit de215f12e0904da625a5beba9fc7c126b611162a
Author: shanthoosh <sp...@usc.edu>
AuthorDate: Tue Nov 5 12:03:07 2019 -0800
SAMZA-2364: Include the localized resource lib directory in the classpath of SamzaContainer (#1207)
* SAMZA-2364: Include the localized resource lib directory in the classpath of SamzaContainer.
* Fix checkstyle errors.
* Address review comment.
---
.../org/apache/samza/config/ShellCommandConfig.scala | 16 ++++++++++++++++
.../scala/org/apache/samza/job/ShellCommandBuilder.scala | 3 ++-
samza-shell/src/main/bash/run-class.sh | 8 +++++++-
3 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/samza-core/src/main/scala/org/apache/samza/config/ShellCommandConfig.scala b/samza-core/src/main/scala/org/apache/samza/config/ShellCommandConfig.scala
index 9722608..702445f 100644
--- a/samza-core/src/main/scala/org/apache/samza/config/ShellCommandConfig.scala
+++ b/samza-core/src/main/scala/org/apache/samza/config/ShellCommandConfig.scala
@@ -87,10 +87,24 @@ object ShellCommandConfig {
*/
val EXECUTION_PLAN_DIR = "EXECUTION_PLAN_DIR"
+ /**
+ * Points to the lib directory of the localized resources(other than the framework dependencies).
+ */
+ val ENV_ADDITIONAL_CLASSPATH_DIR = "ADDITIONAL_CLASSPATH_DIR"
+
val COMMAND_SHELL_EXECUTE = "task.execute"
val TASK_JVM_OPTS = "task.opts"
val TASK_JAVA_HOME = "task.java.home"
+ /**
+ * SamzaContainer uses JARs from the lib directory of the framework in it classpath. In some cases, it is necessary to include
+ * the jars from lib directories of the resources that are localized along with the framework dependencies. These resources are logically
+ * independent of the framework and cannot be bundled with the framework dependencies. The URI of these resources are set dynamically at
+ * run-time before launching the SamzaContainer. This environment variable can be set to a lib directory of the localized resource and
+ * it will be included in the java classpath of the SamzaContainer.
+ */
+ val ADDITIONAL_CLASSPATH_DIR = "additional.classpath.dir"
+
implicit def Config2ShellCommand(config: Config) = new ShellCommandConfig(config)
}
@@ -100,4 +114,6 @@ class ShellCommandConfig(config: Config) extends ScalaMapConfig(config) {
def getTaskOpts = getOption(ShellCommandConfig.TASK_JVM_OPTS)
def getJavaHome = getOption(ShellCommandConfig.TASK_JAVA_HOME)
+
+ def getAdditionalClasspathDir(): Option[String] = getOption(ShellCommandConfig.ADDITIONAL_CLASSPATH_DIR)
}
diff --git a/samza-core/src/main/scala/org/apache/samza/job/ShellCommandBuilder.scala b/samza-core/src/main/scala/org/apache/samza/job/ShellCommandBuilder.scala
index 2dd21c6..42c50e1 100644
--- a/samza-core/src/main/scala/org/apache/samza/job/ShellCommandBuilder.scala
+++ b/samza-core/src/main/scala/org/apache/samza/job/ShellCommandBuilder.scala
@@ -38,7 +38,8 @@ class ShellCommandBuilder extends CommandBuilder {
val envMap = Map(
ShellCommandConfig.ENV_CONTAINER_ID -> id.toString,
ShellCommandConfig.ENV_COORDINATOR_URL -> url.toString,
- ShellCommandConfig.ENV_JAVA_OPTS -> config.getTaskOpts.getOrElse(""))
+ ShellCommandConfig.ENV_JAVA_OPTS -> config.getTaskOpts.getOrElse(""),
+ ShellCommandConfig.ENV_ADDITIONAL_CLASSPATH_DIR -> config.getAdditionalClasspathDir.getOrElse(""))
val envMapWithJavaHome = config.getJavaHome match {
case Some(javaHome) => envMap + (ShellCommandConfig.ENV_JAVA_HOME -> javaHome)
diff --git a/samza-shell/src/main/bash/run-class.sh b/samza-shell/src/main/bash/run-class.sh
index 5b3b7d1..2b7d22e 100755
--- a/samza-shell/src/main/bash/run-class.sh
+++ b/samza-shell/src/main/bash/run-class.sh
@@ -127,4 +127,10 @@ fi
# HADOOP_CONF_DIR should be supplied to classpath explicitly for Yarn to parse configs
echo $JAVA $JAVA_OPTS -cp $HADOOP_CONF_DIR:pathing.jar "$@"
-exec $JAVA $JAVA_OPTS -cp $HADOOP_CONF_DIR:pathing.jar "$@"
\ No newline at end of file
+
+## If localized resource lib directory is defined, then include it in the classpath.
+if [[ -z "${ADDITIONAL_CLASSPATH_DIR}" ]]; then
+ exec $JAVA $JAVA_OPTS -cp $HADOOP_CONF_DIR:pathing.jar "$@"
+else
+ exec $JAVA $JAVA_OPTS -cp $HADOOP_CONF_DIR:pathing.jar:$ADDITIONAL_CLASSPATH_DIR "$@"
+fi
\ No newline at end of file