在 Windows 上的 Git Bash 中设置 Spark-shell

问题描述

我的系统上的任何其他软件都没有遇到过这个问题。能够在窗口终端/命令提示符和 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 文件中追溯错误。它是这样的: In line 96

我的问题,

  1. 错误的原因是什么?我该如何解决
  2. 是否有任何明确定义的步骤来在 Windows 版 Git Bash 中设置 spark-shell(无法在网上找到任何可靠的内容)?

谢谢。

解决方法

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

,

作为 mentioned here,这取决于启动 Spark 时脚本使用的 java -cp 类路径参数。

如果所述脚本以 #!/bin/sh#!/bin/bash 开头,则为其添加 -x(例如:#!/bin/bash -x

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

,

我遇到了同样的问题。经查,根本原因是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