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的主要内容,如果未能解决你的问题,请参考以下文章
py4j.protocol.Py4JError: org.apache.spark.api.python.PythonUtils.getEncryptionEnabled 在 JVM 中不存在
在 Spark 中的 EMR 上使用 --py-files 从 .zip 文件(使用 zipfile 包在 python 中创建)导入模块时出现问题