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?
- 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
Basta utilizzare la console standard.
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?
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
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
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