2016-05-18 16 views
8

Desidero che il mio programma Spark, scritto in Python, fornisca alcune informazioni di registrazione di base. Ci sono tre modi che posso vedere per fare questo:Registrazione di PySpark?

  1. Utilizzo del ponte Py4j PySpark per ottenere l'accesso alla funzione di registrazione log4j Java utilizzata da Spark.

log4jLogger = sc._jvm.org.apache.log4j LOGGER = log4jLogger.LogManager.getLogger(__name__) LOGGER.info("pyspark script logger initialized")

    stampa
  1. Basta utilizzare la console standard.

  2. logging Modulo libreria standard Python. Questo sembra l'ideale e l'approccio più Pythonic, tuttavia, almeno fuori dalla scatola, non funziona e i messaggi registrati non sembrano essere recuperabili. Naturalmente, questo può essere configurato per accedere a py4j-> log4j e/o alla console.

Quindi, la guida di programmazione ufficiale (https://spark.apache.org/docs/1.6.1/programming-guide.html) non menziona la registrazione a tutti. Questo è deludente. Ci dovrebbe essere un modo standard raccomandato per registrare da un programma Spark.

cercato per questo problema, e abbiamo trovato questo: How do I log from my Python Spark script

Ma il contenuto di quel filo erano insoddisfacenti.

In particolare, ho le seguenti domande:

  • mi sto perdendo un modo standard per accedere da un programma pilota PySpark?
  • Ci sono dei pro/contro nel logging su py4j-> log4j vs console?
+0

Hai mai avuto una risposta a questo? Mi sembra che 1 sia l'unica soluzione. 2 non ha funzionato per me (sono rimasto sorpreso da questo). Guardando l'altra domanda a cui ti sei collegato, non faccio niente 'logging.getLogger ('py4j')' funziona, dal momento che py4j non usa il logger log4j, usa java.utils.logger. – dragonx

+1

La conclusione che ho raggiunto è che Spark fondamentalmente non intende che i processi personalizzati di Spark facciano il loro stesso logging. Di solito, si scrive un programma driver che codifica un flusso di lavoro abbastanza semplice e Spark stesso esegue il sollevamento pesante e fornisce vari strumenti di monitoraggio e diagnostica da utilizzare. – clay

+0

Stai inviando il tuo '.py' a un cluster o in una macchina standalone? Vuoi registrare eventi da ciascun lavoratore o solo dal tuo cliente? – jocerfranquiz

risposta

-1

Nel mio ambiente python dev (solo serraggio Spark macchina) Io uso questo:

import logging 


def do_my_logging(log_msg): 

    logger = logging.getLogger('__FILE__') 
    logger.warning('log_msg = {}'.format(log_msg)) 

do_my_logging('Some log message') 

che funziona utilizzando il script spark-submit.

+0

Se tu -1 questo, sarebbe bene aggiungere nei commenti il ​​motivo per cui ... se questa è una risposta inappropriata, allora la cancellerò. –