我正在尝试分析提交到我的集群的 pyspark 作业。这个 pyspark PR ( https://github.com/apache/spark/pull/2556 ) 表示 sc.dump_profiles(path)
是命令。我已经尝试将配置文件输出转储到 hadoop hdfs:///user/username/filename
和本地 file:///home/username/filename
,以及 /home/用户名/文件名
。作业完成但配置文件从未出现。
代码基于这个 SO 问题 (How to profile pyspark jobs),当包含 --conf spark.python.profile=true 时,sc.show_profiles() 确实在交互模式下工作
。
from pyspark import SparkContext, SparkConf
import logging
if __name__ == "__main__":
logging.getLogger("py4j").setLevel(logging.ERROR)
conf = SparkConf().setAppName("profile")
sc = SparkContext(conf=conf)
rdd = sc.parallelize(range(100)).map(str)
rdd.count()
sc.show_profiles()
sc.dump_profiles("hdfs:///user/username/python_profiled")
我这样提交作业 /opt/spark/bin/spark-submit --verbose --conf spark.python.profile=true --master yarn --deploy-mode cluster --queue production - -num-executors 4 test_profile.py
关于如何格式化 path
以获取配置文件输出的任何指示?
最佳答案
三个不同的问题:
dump_profiles
使用标准的 Python 编写器,因此您需要符合 POSIX 标准的文件系统才能在此处使用它。除非使用 FUSE 挂载,否则 HDFS 将无法运行。- Python 文件实用程序需要文件路径而不是 URI。您显示的代码应该抛出异常。
- 在集群模式下提交代码时,
dump_profiles
将使用驱动程序节点的本地路径,该路径将是集群上的任意节点。
如果您无法访问符合 POSIX 标准的 DFS,您可以在您的应用程序中读回转储并使用可用的 Python 客户端之一将其推送到 HDFS,或者将其推送到 S3 存储桶之类的东西。
稍微麻烦一点的方案是使用SparkFiles
(SparkContext.addFile
)分发,用texFile
读取并写入。
关于python - pyspark 的分析器缺少输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41704889/