Talend e Apache Spark: manuale tecnico di base

Talend e Apache Spark: manuale tecnico di base

  • Petros Nomikos
    I have 3 years of experience with installation, configuration, and troubleshooting of Big Data platforms such as Cloudera, MapR, and HortonWorks. I joined Talend in 2014, and prior to Talend I held positions as manager of technical support, and project manager for data warehouse implementations. In my current role, I assist companies in understanding how to implement Talend in their Big Data Ecosystem.

Negli anni trascorsi in Talend come tecnico dell'assistenza, prima di diventare customer success architect, i clienti spesso mi chiedevano informazioni sulle capacità di Talend con Apache Spark. Quando parliamo di Spark, la prima cosa che ci viene in mente è il comando spark-submit che utilizziamo per inviare i job Spark. Quindi, la domanda che sorge più spontanea è: qual è la differenza tra un job Talend Spark e un regolare comando spark-submit? In questo blog, analizzeremo le diverse modalità Apache Spark disponibili, quelle usate da Talend, e vedremo come lavora Talend con Apache Spark.

Introduzione ai job Apache Spark

Apache Spark offre la possibilità di inviare due diversi tipi di job: Spark Batch e Spark Streaming. Il job Spark Batch funziona in base a un modello di elaborazione in batch, dove un set di dati viene raccolto in un periodo di tempo, quindi viene inviato a un motore Spark per l'elaborazione.

Il job Spark Streaming, invece, funziona in base a un modello di streaming, dove i dati raccolti vengono progressivamente inviati a un motore Spark ed elaborati in tempo reale. Talend supporta entrambi i tipi di job e consente di creare job Spark per ciascuno di questi tipi. In Talend Studio, a seconda della licenza di cui si dispone, può essere visualizzata l'opzione "Big Data Batch" per creare job Spark Batch o "Big Data Streaming" per creare job Spark Streaming.

Approfondimento su Talend e Apache Spark

Prima di procedere, vorrei introdurre alcuni concetti chiave che verranno utilizzati in questo blog:

  • Spark driver: responsabile della trasmissione dell'applicazione a uno Spark master, così come di creare ed eseguire lo Spark context
  • Spark master: responsabile di acquisire risorse da YARN, come definito dallo Spark driver, e di trovare gli host che eseguiranno il job
  • Spark executor: processo che viene avviato sui nodi di lavoro e che viene eseguito in memoria o su disco per l'invio del job

Inizierò fornendo qualche informazione di contesto su come funzionano i job Spark con il comando spark-submit e con Talend. Nei job Spark è sempre presente un "driver" che imposta e coordina il job. Lo Spark driver, in questo caso, definisce la configurazione che verrà utilizzata dal job, come lo Spark master a cui connettersi o la quantità di memoria da allocare agli Spark executor. Talend si comporta in modo equivalente a un comando spark-submit, con il presupposto che vi sia sempre uno Spark driver che definisce e coordina il job Spark.

Quando si esegue un comando spark-submit dall'interno del cluster Hadoop, alcune delle informazioni di configurazione vengono recuperate dai file di configurazione del cluster. Dal momento che Talend Studio non si trova sempre in un cluster Hadoop, è necessario fornire tali informazioni nel job in Studio, in modo che conosca le impostazioni che può utilizzare.

Per quanto riguarda le trasformazioni dei dati che vengono eseguite nel job Spark, in Talend esse vengono definite nella fase di compilazione del job, esattamente come avviene quando si utilizza una procedura spark-submit. Come in una procedura spark-submit, anche in Talend il job viene avviato dal "driver" definito sopra, anche se non viene eseguito nel driver ma sugli Spark executor, a livello del cluster. Una volta avviato il job, Talend lo tiene monitorato mettendosi in ascolto degli eventi che si verificano a livello del cluster Hadoop, per tenere sotto controllo lo stato di avanzamento del job, analogamente a ciò che avviene quando si usa il comando spark-submit.

Sia che venga usato spark-submit o Talend per inviare un job a Spark, è possibile procedere in tre diversi modi, a seconda della configurazione del cluster Hadoop. Ecco le tre diverse modalità, come vengono descritte nella documentazione Spark (http://spark.apache.org/docs/latest/cluster-overview.html):

1. Standalone: in questa modalità, è previsto uno Spark master a cui lo Spark driver invia il job e degli Spark executor in esecuzione sul cluster per l'elaborazione dei job.

2. Modalità YARN client: in questa modalità, i daemon degli Spark worker assegnati a ciascun job vengono avviati e arrestati all'interno del framework YARN. Lo Spark driver descritto sopra viene eseguito sullo stesso sistema da cui viene eseguito il job Talend.

3. Modalità YARN cluster: in questa modalità, lo Spark master e gli Spark executor vengono eseguiti all'interno del framework YARN. Vengono avviati e interrotti insieme al job. In questo caso, anche lo Spark driver viene eseguito all'interno di YARN, a livello del cluster Hadoop.

Ora che abbiamo definito le modalità offerte da Spark, esamineremo ciò che offre Talend. Ecco le diverse modalità supportate in Talend:

1. Locale: in questa modalità, il job genererà un framework Spark a livello locale per eseguire il job. La macchina locale verrà utilizzata come Spark master e anche come Spark executor per l'esecuzione delle trasformazioni dei dati.

2. Standalone: in questa modalità, come specificato sopra, anche Talend si connette allo Spark master definito nel cluster Hadoop per poi eseguire il job.

3. Modalità YARN client: come spiegato in precedenza, Talend Studio eseguirà lo Spark driver per orchestrare il job dalla posizione in cui il job viene avviato, quindi invierà l'orchestrazione al framework YARN per l'esecuzione e l'allocazione delle risorse. Questa è la selezione disponibile per le distro Hadoop come Hortonworks, Cloudera, MapR, Amazon EMR e così via.

4. Modalità YARN cluster: questa modalità è al momento supportata in Talend solo per HDInsight e Cloudera Altus. In questa modalità, come spiegato sopra, Talend eseguirà lo Spark driver all'interno di YARN, a livello del cluster Hadoop.

Risposta a tre domande frequenti su Talend e Apache Spark:

  • Talend invia tutte le librerie e i file necessari per il job allo Spark master in un unico momento o alcune informazioni continuano a essere eseguite in Studio?

Risposta – Non tutte le librerie vengono necessariamente inviate allo Spark master in un unico momento. Esiste sempre la possibilità che gli executor possano essere richiamati nello Spark driver per inviare le librerie necessarie in un determinato momento. In tal caso, il driver continua a essere eseguito mentre il job viene elaborato, per attendere la conclusione dell'elaborazione e fornire lo stato del job. Tuttavia, come in qualsiasi job Spark, alcune fasi dell'elaborazione possono avvenire sul lato del driver. Un ottimo esempio è dato dall'inserimento di un componente tLogRow nel job per la raccolta di tutte le informazioni dal cluster e la successiva stampa nella console o dall'uso dei componenti tCacheIn e tCacheOut per consentire al driver di memorizzare le informazioni dei metadati relative all'ubicazione dei file nella memoria. In questi casi, Talend Studio si comporta esattamente come il comando spark-submit.

  • È possibile scrivere un file non in HDFS, ma a livello locale su Studio o jobserver, senza fornire una configurazione di storage?

Risposta – È sempre necessario fornire una configurazione di storage al job. Ciò permette di garantire maggiore stabilità al job; inoltre, è preferibile usare un'unica configurazione di storage per l'intero job. Non è possibile usare due ubicazioni di storage HDFS destinate a due diversi cluster o a due diversi metodi di autenticazione. È tuttavia possibile usare HDFS e S3, ad esempio. Il motivo per cui il job non può essere scritto sul filesystem locale è perché gli Spark worker non hanno la visibilità del driver all'interno del filesystem locale, motivo anche per cui lo Spark driver apre un server per inviare le librerie al cluster. Se il file deve essere archiviato, l'opzione migliore consiste nello scrivere un file temporaneo in HDFS, quindi utilizzare un job DI che impiega tHDFSGet per riportare il file nella macchina locale. Lo stesso comportamento si verifica quando si utilizza il comando spark-submit.

  • Perché la scheda relativa all'ambiente dell'interfaccia Web dello Spark master mi riporta all'indirizzo IP di Studio?

Risposta – Questa scheda dovrebbe sempre ricondurre all'indirizzo IP dello Spark driver. Se si esegue il comando spark-submit sul cluster, non si noterà il reindirizzamento, ma con Talend è possibile notarlo. Anche in questo caso, Talend Studio si comporta esattamente come il comando spark-submit.

Mi auguro che le informazioni fornite abbiano spiegato abbastanza chiaramente come l'esecuzione di job in Talend non sia differente dall'esecuzione di job tramite la procedura spark-submit. Talend semplifica la codifica Spark, consente di scrivere sia job Spark batch che Spark Streaming e di usare i job Spark progettati sia per l'esecuzione in batch che in streaming. Vi invito a iniziare a scrivere job Spark utilizzando Talend e a sperimentare quanto sia facile eseguire i job in un cluster Hadoop o in modalità standalone in Apache Spark.

Partecipa alla discussione

0 Comments

Scrivi una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *