Rav*_*yam 15 pyspark spark-submit
我们有一个基于 pyspark 的应用程序,我们正在执行 Spark 提交,如下所示。应用程序正在按预期工作,但是我们看到一条奇怪的警告消息。有什么办法可以处理这个问题或者为什么会出现这种情况?
注意:该群集是 Azure HDI 群集。
spark-submit --master yarn --deploy-mode cluster --jars file:/<localpath>/* --py-files pyFiles/__init__.py,pyFiles/<abc>.py,pyFiles/<abd>.py --files files/<env>.properties,files/<config>.json main.py
Run Code Online (Sandbox Code Playgroud)
看到的警告是:
warnings.warn( /usr/hdp/current/spark3-client/python/pyspark/context.py:256: RuntimeWarning: 无法添加文件 [file:///home/sshuser/project/pyFiles/abc.py] 指定在“spark.submit.pyFiles”中到Python路径:
/mnt/resource/hadoop/yarn/local/usercache/sshuser/filecache/929
以上警告针对所有文件,即 abc.py、abd.py 等(传递给 --py-files 的)
由于 Spark 是开源的,我们可以检查引发警告的代码,网址为https://github.com/apache/spark/blob/master/python/pyspark/context.py#L350
在那里我们可以看到 Spark 正在有效地执行如下操作:
from pyspark import SparkFiles
from pyspark.sql import SparkSession
if __name__ == '__main__':
spark = SparkSession.builder.appName("MyApp").getOrCreate()
path = spark.conf.get("spark.submit.pyFiles").split(',')[0]
(dirname, filename) = os.path.split(path)
filepath = os.path.join(SparkFiles.getRootDirectory(), filename)
if not os.path.exists(filepath):
shutil.copyfile(path, filepath)
Run Code Online (Sandbox Code Playgroud)
基本上,它会尝试将文件从原始位置复制到 Spark 应用程序根目录,以便可以找到它们。如果运行此代码,您将获得 Spark 隐藏的实际异常。
示例
在我的例子中,我们使用 livy 将 Azure blob 存储中的文件提交到 Yarn,shutil 引发的异常是FileNotFoundError: [Errno 2] No such file or directory: 'abfss://mycontainer@mystorage.dfs.core.windows.net/myappid/28_02_2023_15_33_56_146/pyFiles/imported_file.py',我猜是因为shutil 无法处理 abfs 文件路径。
但是,Yarn 已经将文件从原始位置复制到 livy filecache(如 hadoop-yarn-nodemanager.log 中所示),并且我相信这个新位置已经在我们的 pythonpath 中,因此 Spark 不需要复制文件,并且我们可以安全地忽略该警告。
| 归档时间: |
|
| 查看次数: |
2233 次 |
| 最近记录: |