当应用程序 jar 在 hdfs 中时,Spark-submit 不起作用

Spark-submit not working when application jar is in hdfs

我正在尝试 运行 使用 bin/spark-submit 的 spark 应用程序。当我在我的本地文件系统中引用我的应用程序 jar 时,它可以工作。但是,当我将应用程序 jar 复制到 hdfs 中的目录时,出现以下异常:

Warning: Skip remote jar hdfs://localhost:9000/user/hdfs/jars/simple-project-1.0-SNAPSHOT.jar. java.lang.ClassNotFoundException: com.example.SimpleApp

命令如下:

$ ./bin/spark-submit --class com.example.SimpleApp --master local hdfs://localhost:9000/user/hdfs/jars/simple-project-1.0-SNAPSHOT.jar

我使用的是 hadoop 版本 2.6.0,spark 版本 1.2.1

是的,必须是本地文件。我认为这就是答案。

当我使用

时,它对我有用的唯一方法

--master yarn-cluster

要使 spark-job 可以访问 HDFS 库,您必须 运行 集群模式下的作业。

$SPARK_HOME/bin/spark-submit \
--deploy-mode cluster \
--class <main_class> \
--master yarn-cluster \
hdfs://myhost:8020/user/root/myjar.jar

此外,还为客户端模式提出了 Spark JIRA,目前尚不支持。

SPARK-10643 :支持客户端模式spark submit下载HDFS应用

有一个解决方法。您可以将 HDFS 中的目录(包含您的应用程序 jar)挂载为本地目录。

我做了同样的事情(使用 azure blob 存储,但对于 HDFS 应该类似)

azure wasb 的示例命令

sudo mount -t cifs //{storageAccountName}.file.core.windows.net/{directoryName} {local directory path} -o vers=3.0,username={storageAccountName},password={storageAccountKey},dir_mode=0777,file_mode=0777

现在,在您的 spark 提交命令中,您提供上述命令的路径

$ ./bin/spark-submit --class com.example.SimpleApp --master local {local directory path}/simple-project-1.0-SNAPSHOT.jar

spark-submit --master spark://kssr-virtual-machine:7077 --deploy-mode client --executor-memory 1g hdfs://localhost:9000/user/wordcount.py

对我来说,我使用的是 Hadoop 3.3.1 和 Spark 3.2.1。我能够从 HDFS 读取文件。