在 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.hostname
和 spark.hadoop.yarn.resourcemanager.address
也有帮助。
使用.master("yarn-cluster")
。仍然面临同样的问题。以上是关于在 YARN 集群上部署 pyspark 作业时出现 FileNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章