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

3

我没有在我的系统中使用其他软件时遇到过这个问题。我可以在Windows终端/命令提示符和Git-Bash上安装和运行所有东西。

最近,我开始学习Spark,在命令提示符/窗口终端和通过pyspark库在Jupyter中,成功安装了Spark并设置好了JAVA_HOME,SCALA_HOME和hadoop winutils文件。Spark-shell和pyspark-shell都能够完美运行。

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(网络上找不到可靠的信息)?

谢谢。

3个回答

4

尝试在Git Bash中特别运行spark-shell.cmd,例如$SPARK_HOME/bin/spark-shell.cmd。 我猜当您从Windows终端调用spark-shell时,它会自动启动spark-shell.cmd,这就是为什么该命令从那里起作用的原因。


2
我遇到了相同的问题。经过调查,根本原因是在git bash中传递给Java命令的类路径未被识别。例如,在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

错误: 找不到或无法加载主类 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

1

此处所述, 这取决于启动Spark时脚本使用的java -cp类路径参数。

如果说的脚本以#!/bin/sh#!/bin/bash开头,请在其后加上-x(例如:#!/bin/bash -x

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


感谢@VonC。它显示了这个错误:Error: Could not find or load main class org.apache.spark.launcher.Main. 我已经检查了jar文件,总共有246个jar文件(许多子文件)。我已经删除了Spark内置包,并重新安装了它。但是还是一样。是否有其他调试方法?我正在考虑尝试使用最新版本的Spark 2.0运行。 - BeginnerRP
1
@BeginnerRP 的想法是查看脚本在执行时考虑了哪些确切的类路径。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接