Spark Python提交错误:文件不存在:pyspark.zip

Posted

技术标签:

【中文标题】Spark Python提交错误:文件不存在:pyspark.zip【英文标题】:Spark Python submission error : File does not exist: pyspark.zip 【发布时间】:2016-01-06 11:59:07 【问题描述】:

我正在尝试在 yarn-cluster 模式下提交 python spark 应用程序。

Seq(System.getenv("SPARK_HOME")+"/bin/spark-submit","--master",sparkConfig.getString("spark.master"),"--executor-memory",sparkConfig.getString("spark.executor-memory"),"--num-executors",sparkConfig.getString("spark.num-executors"),"python/app.py") ! 

我收到以下错误,

诊断:文件不存在: hdfs://xxxxxx:8020/user/hdfs/.sparkStaging/application_123456789_0138/pyspark.zip java.io.FileNotFoundException:文件不存在: hdfs://xxxxxx:8020/user/hdfs/.sparkStaging/application_123456789_0138/pyspark.zip

我找到https://issues.apache.org/jira/browse/SPARK-10795

但是票还开着呢!

【问题讨论】:

【参考方案1】:

当您尝试使用部署模式“集群”触发提交作业并且您尝试将主服务器设置为“本地”时,会发生这种情况;例如

val sparkConf = new SparkConf().setAppName("spark-pi-app").setMaster("local[10]");

您有两个选择: 选项1: 将上面的行更改为:

val sparkConf = new SparkConf().setAppName("spark-pi-app");

并提交您的工作

./bin/spark-submit --master yarn --deploy-mode cluster --driver-memory 512m --executor-memory 512m --executor-cores 1 --num-executors 3 --jars hadoop-common-version.jar,hadoop-lzo-version.jar --verbose --queue hadoop-queue --class "SparkPi" sparksbtproject_2.11-1.0.jar

选项 #2:使用部署模式作为“客户端”提交您的工作

./bin/spark-submit --master yarn --deploy-mode client --driver-memory 512m --executor-memory 512m --executor-cores 1 --num-executors 3 --jars hadoop-common-version.jar,hadoop-lzo-version.jar --verbose --queue hadoop-queue --class "SparkPi" sparksbtproject_2.11-1.0.jar

【讨论】:

【参考方案2】:

根据我对 scala 作业的经验,我发现当代码尝试在某处 setMaster("local") 时,yarn-cluster 集群模式会出现此错误。 请尝试删除对设置本地“master”的任何引用。

再次,我的回答是基于 scala 行为,但希望这会有所帮助。

【讨论】:

【参考方案3】:

您是否未能创建适当的火花上下文?我怀疑这是问题所在。我也更新了https://issues.apache.org/jira/browse/SPARK-10795

【讨论】:

【参考方案4】:

尝试将HDFS名称节点属性添加到yarn-site.xml:

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://your-name-hode-host-port:8989</value>
</property>

确保 YARN_CONF_DIR 环境变量指向 yarn-site.xml 的目录

【讨论】:

yarn-site 中不存在该属性。这是核心站点【参考方案5】:

我在这里回答了这个问题https://***.com/a/55457870/3357812。对我来说,关键是 spark.hadoop.fs.defaultFS 必须在 Python 的 SparkConf 中设置。

yarn_conf = SparkConf().setAppName(_app_name) \
                    .setMaster("yarn") \
                    .set("spark.executor.memory", "4g") \
                    .set("spark.hadoop.fs.defaultFS", "hdfs://:8020".format(_fs_host)) \
                    .set("spark.hadoop.yarn.resourcemanager.hostname", _rm_host)\
                    .set("spark.hadoop.yarn.resourcemanager.address", ":8050".format(_rm_host))

【讨论】:

【参考方案6】:

必须设置 HADOOP_CONF_DIR 变量,以便 spark 可以找到此文件。

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

在 $SPARK_HOME/conf/spark-env.sh 中设置

【讨论】:

以上是关于Spark Python提交错误:文件不存在:pyspark.zip的主要内容,如果未能解决你的问题,请参考以下文章

Spark2.4.3 中方法不存在错误导致重新分区失败

py4j.protocol.Py4JError: org.apache.spark.api.python.PythonUtils.getEncryptionEnabled 在 JVM 中不存在

在 Spark 中的 EMR 上使用 --py-files 从 .zip 文件(使用 zipfile 包在 python 中创建)导入模块时出现问题

向 models.py 添加一个类会导致“视图不存在”错误吗?

在 spark 环境中运行 python 程序时出错

在 Python 中使用 Spark 读取 S3 文件时权限被拒绝