“主线程中的异常”:java.io.IOException: 无法运行程序“ ”: 错误=2,没有这样一个文件或目录。

3

当我执行以下脚本时,遇到了这个问题:

./spark-submit /home/*****/public_html/****/****.py

我先使用了python3.7.2,后来又使用了python3.5.2,但仍然收到以下错误消息。

Exception in thread "main" java.io.IOException: Cannot run program "": error=2, No such a file or directory.
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at org.apache.spark.deploy.PythonRunner$.main(PythonRunner.scala:100)
    at org.apache.spark.deploy.PythonRunner.main(PythonRunner.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:894)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:198)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:228)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:137)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.io.IOException: error=2, No such a file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)... 12 more`

在此之前,我有几条消息输出如下:
2019-02-07 11:30:18 WARN  Utils:66 - Your hostname, localhost.localdomain resolves to a loopback address: 127.0.0.1; using xxx.xxx.xxx.xxx instead (on interface eth0)
2019-02-07 11:30:18 WARN  Utils:66 - Set SPARK_LOCAL_IP if you need to bind to another address
2019-02-07 11:30:19 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

我能够执行 python3 -V 命令。

我能够启动 spark-shell 和 pyspark。

但是,我感到很奇怪的是,没有任何消息显示在引号之间。

对于我的 Python 代码,它以以下内容开头:

import sys
import urllib3
import requests

from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import StructType, StructField
from pyspark.sql.types import DoubleType, IntegerType, StringType

from CommonFunctions import *
from LanguageCodeParser import *

我也尝试了一个非常简单的Python代码。
print("This is a test.")

执行bash -x spark-submit test.py后,以下是一些消息:

+ '[' -z /opt/spark-2.3.2-bin-hadoop2.7 ']'
+ export PYTHONHASHSEED=0
+ PYTHONHASHSEED=0
+ exec /opt/spark-2.3.2-bin-hadoop2.7/bin/spark-class org.apache.spark.deploy.SparkSubmit test.py

然而,它并没有起作用。提前感谢您的帮助。

请问您能否编辑您的问题,将.py文件的内容包含在内? - Jon Scott
无法运行程序“”。没有获得路径或文件名。 - Steve Smith
嗨,我已经添加了我的Python代码的开头。 - Yu-Ting LIN
@Steve Smith:由于双引号内没有显示任何内容,我怎么知道它没有获取哪个路径或文件名。提前致谢。 - Yu-Ting LIN
2个回答

10

我发现设置PYSPARK_PYTHON=/usr/bin/python3是有用的。

如果可以在/opt/spark-2.3.2-bin-hadoop2.7/conf/spark-env.sh中设置此环境变量,那将是很好的。


这个救了我的一天。谢谢@Yu-Ting LIN。 - Raja
1
你能更好地解释一下你的答案吗?我遇到了同样的错误。 - Gonzalo Garcia
在Windows中如何设置这个? - asd
除了上述设置之外,如果您仍然遇到相同的错误,请设置PYSPARK_DRIVER_PYTHON=/usr/bin/python3,并且不要忘记在将该设置设置为lab/notebook之前设置PYSPARK_DRIVER_PYTHON_OPTS="" - Mehmet Ali Peker

1

如上所述,但在Windows情况下,spark-env.sh.template应该重命名为spark-env.cmd,并插入以下内容。

  set PYSPARK_PYTHON=C:\Users\usr\anaconda3\python.exe
  set PYSPARK_DRIVER_PYTHON=C:\Users\usr\anaconda3\python.exe
  set HADOOP_HOME=c:\winutils

请在此文件中删除所有以“#”开头的注释。

希望以上内容对您也有帮助。


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