This is an automated email from the ASF dual-hosted git repository.

leesf pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hudi.git


The following commit(s) were added to refs/heads/master by this push:
     new 8963a68  [HUDI-398]Add spark env set/get for spark launcher (#1096)
8963a68 is described below

commit 8963a68e6a3f4875de6787dfc206543e9ca824d9
Author: hongdd <jn_...@163.com>
AuthorDate: Sat Dec 14 14:13:00 2019 +0800

    [HUDI-398]Add spark env set/get for spark launcher (#1096)
---
 .../apache/hudi/cli/commands/SparkEnvCommand.java  | 68 ++++++++++++++++++++++
 .../java/org/apache/hudi/cli/utils/SparkUtil.java  |  6 +-
 2 files changed, 72 insertions(+), 2 deletions(-)

diff --git 
a/hudi-cli/src/main/java/org/apache/hudi/cli/commands/SparkEnvCommand.java 
b/hudi-cli/src/main/java/org/apache/hudi/cli/commands/SparkEnvCommand.java
new file mode 100644
index 0000000..b7e6eb0
--- /dev/null
+++ b/hudi-cli/src/main/java/org/apache/hudi/cli/commands/SparkEnvCommand.java
@@ -0,0 +1,68 @@
+/*
+ * 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.hudi.cli.commands;
+
+import org.apache.hudi.cli.HoodiePrintHelper;
+
+import org.springframework.shell.core.CommandMarker;
+import org.springframework.shell.core.annotation.CliCommand;
+import org.springframework.shell.core.annotation.CliOption;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * CLI command to set and show spark launcher init env.
+ */
+@Component
+public class SparkEnvCommand implements CommandMarker {
+
+  public static Map<String, String> env = new HashMap<String, String>();
+
+  @CliCommand(value = "set", help = "Set spark launcher env to cli")
+  public void setEnv(@CliOption(key = {"conf"}, help = "Env config to be set") 
final String confMap)
+      throws IllegalArgumentException {
+    String[] map = confMap.split("=");
+    if (map.length != 2) {
+      throw new IllegalArgumentException("Illegal set parameter, please use 
like [set --conf SPARK_HOME=/usr/etc/spark]");
+    }
+    env.put(map[0].trim(), map[1].trim());
+  }
+
+  @CliCommand(value = "show env all", help = "Show spark launcher envs")
+  public String showAllEnv() {
+    String[][] rows = new String[env.size()][2];
+    int i = 0;
+    for (String key: env.keySet()) {
+      rows[i] = new String[]{key, env.get(key)};
+      i++;
+    }
+    return HoodiePrintHelper.print(new String[] {"key", "value"}, rows);
+  }
+
+  @CliCommand(value = "show env", help = "Show spark launcher env by key")
+  public String showEnvByKey(@CliOption(key = {"key"}, help = "Which env conf 
want to show") final String key) {
+    if (key == null || key.isEmpty()) {
+      return showAllEnv();
+    } else {
+      return HoodiePrintHelper.print(new String[] {"key", "value"}, new 
String[][]{new String[]{key, env.get(key)}});
+    }
+  }
+}
diff --git a/hudi-cli/src/main/java/org/apache/hudi/cli/utils/SparkUtil.java 
b/hudi-cli/src/main/java/org/apache/hudi/cli/utils/SparkUtil.java
index 3a21e56..5b5a3f5 100644
--- a/hudi-cli/src/main/java/org/apache/hudi/cli/utils/SparkUtil.java
+++ b/hudi-cli/src/main/java/org/apache/hudi/cli/utils/SparkUtil.java
@@ -19,6 +19,7 @@
 package org.apache.hudi.cli.utils;
 
 import org.apache.hudi.HoodieWriteClient;
+import org.apache.hudi.cli.commands.SparkEnvCommand;
 import org.apache.hudi.cli.commands.SparkMain;
 import org.apache.hudi.common.util.FSUtils;
 import org.apache.hudi.common.util.StringUtils;
@@ -30,6 +31,7 @@ import org.apache.spark.launcher.SparkLauncher;
 
 import java.io.File;
 import java.net.URISyntaxException;
+import java.util.Map;
 
 /**
  * Utility functions dealing with Spark.
@@ -45,13 +47,13 @@ public class SparkUtil {
   public static SparkLauncher initLauncher(String propertiesFile) throws 
URISyntaxException {
     String currentJar = new 
File(SparkUtil.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath())
         .getAbsolutePath();
+    Map<String, String> env = SparkEnvCommand.env;
     SparkLauncher sparkLauncher =
-        new 
SparkLauncher().setAppResource(currentJar).setMainClass(SparkMain.class.getName());
+        new 
SparkLauncher(env).setAppResource(currentJar).setMainClass(SparkMain.class.getName());
 
     if (!StringUtils.isNullOrEmpty(propertiesFile)) {
       sparkLauncher.setPropertiesFile(propertiesFile);
     }
-
     File libDirectory = new File(new File(currentJar).getParent(), "lib");
     for (String library : libDirectory.list()) {
       sparkLauncher.addJar(new File(libDirectory, library).getAbsolutePath());

Reply via email to