缺少pyspark的分析器输出

时间:2017-01-17 18:57:54

标签: python hadoop apache-spark profiling pyspark

我正在尝试分析提交到我的群集的pyspark作业。此pyspark PR(https://github.com/apache/spark/pull/2556)表示sc.dump_profiles(path)是命令。我尝试将配置文件输出转储到hadoop hdfs:///user/username/filename,以及本地file:///home/username/filename/home/username/filename。作业完成但配置文件永远不会出现。

代码基于此SO问题(How to profile pyspark jobs),并且sc.show_profiles()在包含--conf spark.python.profile=true以交互模式工作。

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以获取配置文件输出的任何指示?

1 个答案:

答案 0 :(得分:0)

三个不同的问题:

  • dump_profiles使用标准的Python编写器,因此您需要POSIX兼容的文件系统才能在此处使用它。除非使用FUSE安装,否则HDFS不会执行。
  • Python文件实用程序需要文件路径而不是URI。您展示的代码应该抛出异常。
  • 在群集模式dump_profiles中提交代码时,将使用驱动程序节点本地的路径,该路径将是群集上的任意节点。

如果您无权访问POSIX兼容的DFS,您可以在应用程序中读取转储并使用其中一个可用的Python客户端将其推送到HDFS,或者将其推送到S3存储桶等。

更麻烦的解决方案是使用SparkFilesSparkContext.addFile)分发它,用texFile读取并写入。