2017-01-17 4 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

Три различных проблемы:

  • dump_profiles использует стандартные писатель Python, так что вы будете нуждаться в совместимом файловой системе POSIX, чтобы использовать его здесь. HDFS не будет работать, если не установлен с помощью FUSE.
  • Утилиты файла Python ожидают, что путь к файлу не будет URI. Код, который вы показали, должен вызывать исключение.
  • При отправке кода в режиме кластера dump_profiles будет использовать путь, локальный к узлу драйвера, который будет произвольным узлом в вашем кластере.

Если у вас нет доступа к POSIX совместимого DFS можно прочитать дамп обратно в приложении и нажать его HDFS с помощью одного из доступных клиентов Python или подтолкнуть его к чему-то вроде S3 ведра.

Немногим более громоздким решением является его распространение с использованием SparkFiles (SparkContext.addFile), прочитайте его с помощью texFile и напишите.