2017-01-17 19 views
1

私のクラスタに提出された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です。ジョブは完了しますが、プロファイルは表示されません。pysparkのプロファイラからの出力がありません

コードは、この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をフォーマットする方法上の任意のポインタのようにジョブを送信しますか?

答えて

0

三つの異なる問題:あなたはここでそれを使用するためにPOSIX準拠のファイルシステムが必要になりますので、

  • dump_profilesは、標準のPythonライターを使用しています。 HDFSは、FUSEを使用してマウントされていなければ実行しません。
  • Pythonファイルユーティリティは、URIではなくファイルへのパスを要求します。表示されたコードは例外をスローする必要があります。
  • クラスタモードでコードを送信する場合、dump_profilesはドライバノードにローカルなパスを使用します。これはクラスタの任意のノードになります。

もしあなたがPOSIXに準拠したDFSにアクセスできない場合は、アプリケーションでダンプを読み込んで、使用可能なPythonクライアントを使ってHDFSにプッシュしたり、S3バケットのようなものにプッシュしたりできます。

もう少し面倒な解決策は、SparkFilesSparkContext.addFile)を使用して配布することです。texFileと読んでください。

関連する問題