在 YARN 集群上部署 pyspark 作业时出现 FileNotFoundException

Posted

技术标签:

【中文标题】在 YARN 集群上部署 pyspark 作业时出现 FileNotFoundException【英文标题】:FileNotFoundException while deploying pyspark job on YARN cluster 【发布时间】:2020-02-26 15:10:56 【问题描述】:

 

尝试使用以下命令在 YARN 集群上提交以下 test.py Spark 应用

PYSPARK_PYTHON=./venv/venv/bin/python spark-submit --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./venv/venv/bin/python --master yarn --deploy-mode cluster --archives venv#venv test.py

注意:我没有使用本地模式,而是尝试使用用于在 PyCharm 中构建代码的 virtualenv 下的 python3.7 站点包。 virtualenv 提供未作为集群服务提供的自定义应用程序包

这是 Python 项目结构与 venv 目录内容的外观

-rw-r--r-- 1 schakrabarti nobody 225908565 Feb 26 13:07 venv.tar.gz
-rw-r--r-- 1 schakrabarti nobody      1313 Feb 26 13:07 test.py
drwxr-xr-x 6 schakrabarti nobody      4096 Feb 26 13:07 venv
drwxr-xr-x 3 schakrabarti nobody      4096 Feb 26 13:07 venv/bin
drwxr-xr-x 3 schakrabarti nobody      4096 Feb 26 13:07 venv/share
-rw-r--r-- 1 schakrabarti nobody        75 Feb 26 13:07 venv/pyvenv.cfg
drwxr-xr-x 2 schakrabarti nobody      4096 Feb 26 13:07 venv/include
drwxr-xr-x 3 schakrabarti nobody      4096 Feb 26 13:07 venv/lib

 得到相同的错误文件不存在 - pyspark.zip(如下图)

java.io.FileNotFoundException: File does not exist: hdfs://hostname-nn1.cluster.domain.com:8020/user/schakrabarti/.sparkStaging/application_1571868585150_999337/pyspark.zip

 请参考我在 Spark-10795 上添加的 cmets:https://issues.apache.org/jira/browse/SPARK-10795

【问题讨论】:

【参考方案1】:

如果我误解了问题,我深表歉意,但根据

PYSPARK_PYTHON=./venv/venv/bin/python spark-submit --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./venv/venv/bin/python --master yarn --deploy-mode cluster --archives venv#venv test.py

你使用 Yarn 集群,但是在你的 test.py 中

#test.py
import json
from pyspark.sql import SparkSession

if __name__ == "__main__":
  spark = SparkSession.builder \
   .appName("Test_App") \
   .master("spark://gwrd352n36.red.ygrid.yahoo.com:41767") \
   .config("spark.ui.port", "4057") \
   .config("spark.executor.memory", "4g") \
   .getOrCreate()

  print(json.dumps(spark.sparkContext.getConf().getAll(), indent=4))

  spark.stop()

您尝试连接到 Spark 独立集群

spark://gwrd352n36.red.ygrid.yahoo.com:41767

所以,这可能是个问题

【讨论】:

这不是问题,因为我忘了用虚拟主机名替换实际主机名。我正在使用与 sc.getConf.getAll 返回的主 URL 相同的主 URL 您的意思是使用 spark:// 前缀用于独立集群吗?您是否建议使用 hdfs://? 是的,spark:// 仅适用于独立集群。实际上,如果在 start 命令中使用 -master yarn,则不需要在代码中指定 master。根据spark.apache.org/docs/latest/…,您需要指定HADOOP_CONF_DIR 或YARN_CONF_DIR 位置 指定 spark.hadoop.yarn.resourcemanager.hostnamespark.hadoop.yarn.resourcemanager.address 也有帮助。 使用.master("yarn-cluster")。仍然面临同样的问题。

以上是关于在 YARN 集群上部署 pyspark 作业时出现 FileNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

YARN 集群上的 PySpark 分布式处理

使用远程 jvm 在纱线集群上提交火花作业时出现异常

PySpark任务在YARN集群上运行python 算法

PySpark任务在YARN集群上运行python 算法

在 Yarn 集群上运行 Spark 作业的问题

无法让 pyspark 作业在 hadoop 集群的所有节点上运行