2017-01-17 102 views
1

我正在尝试配置提交到群集的pyspark作业。这pyspark公关(https://github.com/apache/spark/pull/2556)表示sc.dump_profiles(path)是命令。我试图将配置文件输出转储到hadoop hdfs:///user/username/filename,本地file:///home/username/filename/home/username/filename。工作完成但配置文件从不出现。pyspark的配置文件缺少输出

的代码是基于这太问题(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获取配置文件输出任何指针?

回答

0

三种不同的问题:

  • dump_profiles使用标准的Python作家所以你需要POSIX兼容的文件系统,在这里使用它。除非使用FUSE安装,否则HDFS不会执行。
  • Python文件实用程序希望文件路径不是URI。你显示的代码应该抛出异常。
  • 在集群模式下提交您的代码时dump_profiles将使用驱动程序节点的本地路径,该节点将成为您的集群上的任意节点。

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

一些更繁琐的解决方案是使用SparkFilesSparkContext.addFile)分发它,使用texFile来读取并写入。