3

我的系统上的任何其他软件都没有遇到过这个问题。能够在窗口终端/命令提示符和 Git-Bash 中安装和运行所有内容

最近,我开始学习 Spark。安装 Spark 设置所有 JAVA_HOME、SCALA_HOME、hadoop winutils 文件。Spark-shell 和 pyspark-shell 都在命令提示符/窗口终端和 Jupyter 中通过 pyspark lib 完美运行。

spark-3.0.1-bin-hadoop2.7
python 3.8.3
Windows 10 
git version 2.29.2.windows.2

但我无法为 Git Bash 弄清楚它(尝试使用管理员权限)。当我尝试运行 spark-shell 或 pySpark 时出现此错误:

Error: Could not find or load main class org.apache.spark.launcher.Main
/c/Spark/spark-3.0.1-bin-hadoop2.7/bin/spark-class: line 96: CMD: bad array subscript

我搜索了解决方案,发现在 .bashrc 或 spark-env-sh 中设置环境变量。为 pySpark shell 设置以下内容:

   export JAVA_HOME='/c/Program Files/Java/jdk1.8.0_111'
   export SPARK_HOME='/c/Spark/spark-3.0.1-bin-hadoop2.7'
   export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
   export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.9-src.zip:$PYTHONPATH
   export PYSPARK_PYTHON='C:/Users/raman/anaconda3/python'
   export PYSPARK_DRIVER_PYTHON='C:/Users/raman/anaconda3/python'

它也没有成功。如果我在 spark-class 文件中追溯错误。它是这样的: 在第 96 行

我的问题,

  1. 这个错误的原因是什么?我该如何解决?
  2. 是否有任何明确的步骤可以在 Windows 的 Git Bash 中设置 spark-shell(在网上找不到任何可靠的东西)?

谢谢。

4

3 回答 3

2

尝试从 Git Bash 专门运行 spark-shell.cmd,例如$SPARK_HOME/bin/spark-shell.cmd. 我的猜测是,当您spark-shell从 Windows 终端调用时,它会自动启动spark-shell.cmd,这就是该命令从那里工作的原因。

于 2021-02-04T20:01:28.943 回答
1

我遇到了同样的问题。经查,根本原因是git bash中传给java命令的classpath不被识别。

例如,git bash 中的以下命令将不起作用,因为 Java 命令仅将/d/spark/jars/*其作为在 Windows 操作系统中找不到的参数。

java -cp '/d/spark/jars/*' '-Dscala.usejavacp=true' -Xmx1g org.apache.spark.deploy.SparkSubmit --class org.apache.spark.repl.Main --name 'Spark shell' spark-shell

Error: Could not find or load main class org.apache.spark.launcher.Main*

在我改变这个之后,它可以工作

java -cp 'D:\spark\jars\*' '-Dscala.usejavacp=true' -Xmx1g org.apache.spark.deploy.SparkSubmit --class org.apache.spark.repl.Main --name 'Spark shell' spark-shell
于 2021-02-04T12:28:44.467 回答
1

正如这里提到的,这取决于java -cp脚本在启动 Spark 时使用的类路径参数。

如果所述脚本以#!/bin/shor开头#!/bin/bash,请添加 a -x(例如#!/bin/bash -x:)

这将强制脚本显示执行的每一行,您可以看到更多关于${#CMD[@]}.

于 2020-12-30T00:54:09.543 回答