我面临着在集群模式下启动Spark应用的问题。
这是.sh 。
export SPARK_MAJOR_VERSION=2
spark-submit \
--master yarn \
--deploy-mode cluster \
--driver-memory 8G \
--executor-memory 8G \
--total-executor-cores 4 \
--num-executors 4 \
/home/hdfs/spark_scripts/ETL.py &> /home/hdfs/spark_scripts/log_spark.txt
在YARN日志中,我发现在 "ETL.py "中,有一个与我需要的.py文件有关的导入错误,换句话说,在 "ETL.py "中,我有一行这样做:导入AppUtility。换句话说,在 "ETL.py "中,我有一行这样做:导入AppUtility。
Got brand-new decompressor [.deflate]Container: container_e64_1584554814241_22431_02_000001 on ftpandbit02.carte.local_45454LogAggregationType: AGGREGATEDLogType:stdoutLogLastModifiedTime:Tue Apr 28 10:57:10 +0200 2020LogLength:138LogContents:Traceback (最近一次调用)。 文件 "ETL.py",第8行,在import AppUtilityImportError中,没有名为AppUtility的模块。没有名为AppUtility的模块
日志类型:stdout结束
日志类型:prelaunch.err结束
这取决于客户端模式或集群模式。
如果你在Yarn客户端模式下使用Spark,你需要在Yarn启动执行器的机器上安装任何依赖关系。这是唯一可以确保工作的方法。
在Yarn集群模式下使用Spark,则是另一个故事。你可以用
火花提交.binspark-submit。 --py-files AppUtility.py。 homehdfsspark_scriptsETL.py
--py-files指令将文件发送到Spark Worker,但没有将其添加到PYTHONPATH中。
要将依赖关系添加到PYTHONPATH中以修复ImportError,请在Spark作业ETL.py中添加以下一行内容
sc.addPyFile(PATH)
途径: AppUtility.py (它可以是一个本地文件、HDFS中的文件、zip或一个HTTP、HTTPS或FTP URI)