9

Sto usando il Jupyter notebook con Pyspark la seguente immagine finestra mobile con: Jupyter all-spark-notebookAggiunta vasi personalizzati per pyspark in notebook jupyter

Ora vorrei scrivere un'applicazione di streaming pyspark che consuma i messaggi di Kafka. Nel Spark-Kafka Integration guide descrivono come implementare un'applicazione di questo tipo utilizzando spark-submit (richiede il collegamento di un jar esterno - la spiegazione è in 3. Distribuzione). Ma dal momento che sto usando il notebook Jupyter non eseguo mai il comando spark-submit, presumo che venga eseguito nella parte posteriore se premo execute.

Nel comando spark-submit è possibile specificare alcuni parametri, uno dei quali è -jars, ma non mi è chiaro come sia possibile impostare questo parametro dal notebook (o esternamente tramite variabili di ambiente?). Suppongo di poter collegare questo jar esterno in modo dinamico tramite lo SparkConf o l'oggetto SparkContext. Qualcuno ha esperienza su come eseguire correttamente il collegamento dal notebook?

risposta

6

sono riuscito a farlo funzionare all'interno del notebook jupyter che è in esecuzione sotto forma del contenitore all-scintilla.

Avvio un notebook python3 in jupyterub e sovrascrivo il flag PYSPARK_SUBMIT_ARGS come mostrato di seguito. La biblioteca dei consumatori Kafka è stato scaricato dal repository Maven e mettere nella mia home directory/home/jovyan:

import os 
os.environ['PYSPARK_SUBMIT_ARGS'] = 
    '--jars /home/jovyan/spark-streaming-kafka-assembly_2.10-1.6.1.jar pyspark-shell' 

import pyspark 
from pyspark.streaming.kafka import KafkaUtils 
from pyspark.streaming import StreamingContext 

sc = pyspark.SparkContext() 
ssc = StreamingContext(sc,1) 

broker = "<my_broker_ip>" 
directKafkaStream = KafkaUtils.createDirectStream(ssc, ["test1"], 
         {"metadata.broker.list": broker}) 
directKafkaStream.pprint() 
ssc.start() 

Nota: Non dimenticare il pyspark-shell nelle variabili di ambiente!

Estensione: Se si desidera includere il codice di pacchetti spark, è possibile utilizzare invece l'indicatore --packages. Un esempio su come farlo nel quaderno all-spark è disponibile here

0

È possibile eseguire il notebook jupyter con il comando pyspark impostando le variabili d'ambiente rilevanti:

export PYSPARK_DRIVER_PYTHON=jupyter 
export IPYTHON=1 
export PYSPARK_DRIVER_PYTHON_OPTS="notebook --port=XXX --ip=YYY" 

con XXX è la porta che si desidera utilizzare per accedere al notebook e YYY essere l'indirizzo IP.

Ora basta eseguire pyspark e aggiungere --jars come un interruttore lo stesso come si farebbe innescare presentare

+1

Questo è interessante. Docker può impostare le variabili di ambiente con 'docker run -e', ma possono anche venire colpiti da qualche parte. Il Dockerfile per tutti gli spark-notebook utilizza env "SPARK_OPTS", ma ho notato che il Toree (scala) con tutte le scintille ha fatto il bombardamento di un'impostazione '--driver-memory' e' --master' e utilizza 'local [2] 'in un particolare file kernel.json. Vedi, ad esempio, il mio post su alcuni test manuali in https://github.com/jupyter/docker-stacks/pull/144. – Paul