Arnaud Nauwynck created ZEPPELIN-5817:
-----------------------------------------
Summary: Failed to run spark job from Zeppelin on windows... can
not execute "spark-submit" is not a valid Win32 application, need to call
cmd.exe
Key: ZEPPELIN-5817
URL: https://issues.apache.org/jira/browse/ZEPPELIN-5817
Project: Zeppelin
Issue Type: Bug
Components: interpreter-launcher
Affects Versions: 0.10.1, 0.10.0, 0.9.0
Reporter: Arnaud Nauwynck
{noformat}
Caused by: java.io.IOException: Fail to detect scala version, the reason
is:Cannot run program "C:/apps/hadoop/spark-3.1.1/bin/spark-submit":
CreateProcess error=193, %1 is not a valid Win32 application
at
org.apache.zeppelin.interpreter.launcher.SparkInterpreterLauncher.buildEnvFromProperties(SparkInterpreterLauncher.java:127)
at
org.apache.zeppelin.interpreter.launcher.StandardInterpreterLauncher.launchDirectly(StandardInterpreterLauncher.java:77)
at
org.apache.zeppelin.interpreter.launcher.InterpreterLauncher.launch(InterpreterLauncher.java:110)
{noformat}
Indeed, looking at source code, we can see it might run only on linux where
shell script file "spark-submit" have both "chmod u+x" and bang "#!/bin/bash"
On Windows, a text file containing a shell script is not executable, because
Windows only supports ".exe" file format
Instead on windows, it should be calling "cmd.exe" with arguments [ "/c",
"spark-submit", "--version" ]
Source code link:
https://github.com/apache/zeppelin/blob/master/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/launcher/SparkInterpreterLauncher.java#L270
{noformat}
private String detectSparkScalaVersion(String sparkHome, Map<String, String>
env) throws Exception {
...
ProcessBuilder builder = new ProcessBuilder(sparkHome +
"/bin/spark-submit", "--version");
...
Process process = builder.start();
{noformat}
And there is no possibility to by-pass this, it is always called from
buildEnvFromProperties() :
https://github.com/apache/zeppelin/blob/master/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/launcher/SparkInterpreterLauncher.java#L134
{noformat}
@Override
public Map<String, String> buildEnvFromProperties(InterpreterLaunchContext
context) throws IOException {
..
String scalaVersion = null;
try {
String sparkHome = getEnv("SPARK_HOME");
LOGGER.info("SPARK_HOME: {}", sparkHome);
scalaVersion = detectSparkScalaVersion(sparkHome, env);
LOGGER.info("Scala version for Spark: {}", scalaVersion);
context.getProperties().put("zeppelin.spark.scala.version", scalaVersion);
} catch (Exception e) {
throw new IOException("Fail to detect scala version, the reason is:"+
e.getMessage());
}
..
{noformat}
Then calling
--
This message was sent by Atlassian Jira
(v8.20.10#820010)