【问题标题】:Spark Python submission error : File does not exist: pyspark.zipSpark Python提交错误:文件不存在: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

但是票还开着呢!

【问题讨论】:

    标签: python hadoop apache-spark


    【解决方案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://stackoverflow.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 中设置

            【讨论】:

              猜你喜欢
              • 2016-09-07
              • 2017-08-15
              • 1970-01-01
              • 2020-12-17
              • 1970-01-01
              • 1970-01-01
              • 2016-11-15
              • 1970-01-01
              • 2021-11-08
              相关资源
              最近更新 更多