python - pyspark 的分析器缺少输出

标签 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/用户名/文件名。作业完成但配置文件从未出现。

代码基于这个 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/

相关文章:

python - 如何从python中的地址获取值

php - 如何将 php 创建的文本文件传递给 python 脚本进行处理?

python - 使用python将波斯字符串保存到mysql数据库中

hadoop - pig 是否支持 NOT IN 子句?

scala - 如何在 Spark RDD 中获取 Avg 和 Sum

apache-spark - 在 PySpark 的 DataFrame 中聚合列数组?

android - 将 .pb 转换为 .tflite 时反量化的自定义实现

hadoop - 是否可以在单独安装 Hadoop 和其他几个组件的 RHEL7 服务器上安装 CDH

javascript - 执行hdfs zkfc命令时出错

scala - 为什么 Scala 2.11 和 Spark with scallop 会导致 "java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror"?