2015-08-17 17 views
5

Ho scritto un'applicazione in Scala che utilizza Spark.
L'applicazione è composta da due moduli: il modulo App che contiene classi con logica diversa e il modulo Env che contiene il codice di inizializzazione dell'ambiente e del sistema, nonché le funzioni di utilità.
Il punto di ingresso si trova in Env e dopo l'inizializzazione crea una classe in App (secondo args, utilizzando Class.forName) e la logica viene eseguita.
I moduli vengono esportati in 2 diversi JAR (ovvero, env.jar e app.jar).Qual è il modo corretto di eseguire un'applicazione Spark su YARN usando Oozie (con Hue)?

Quando eseguo l'applicazione localmente, viene eseguita correttamente. Il prossimo passo è quello di distribuire l'applicazione sui miei server. Uso il CDH 5.4 di Cloudera.

ho usato Hue per creare un nuovo flusso di lavoro Oozie con un compito Spark con i seguenti parametri:

  • Spark Master: yarn
  • Modalità: cluster
  • App nome: myApp
  • Vasi/file py: lib/env.jar,lib/app.jar
  • Classe principale: env.Main (nel modulo Env)
  • Argomenti: app.AggBlock1Task

ho poi poste le 2 vasetti all'interno della cartella lib nella cartella del flusso di lavoro (/user/hue/oozie/workspaces/hue-oozie-1439807802.48).

Quando eseguo il flusso di lavoro, si getta un FileNotFoundException e l'applicazione non esegue:

java.io.FileNotFoundException: File file:/cloudera/yarn/nm/usercache/danny/appcache/application_1439823995861_0029/container_1439823995861_0029_01_000001/lib/app.jar,lib/env.jar does not exist 

Tuttavia, quando lascio i parametri master Spark e la modalità vuoto, tutto funziona correttamente, ma quando controllo spark.master a livello di programmazione è impostato su local[*] e non su yarn. Inoltre, osservando i registri, ho incontrato questo sotto configurazione dell'azione Spark Oozie:

--master 
null 
--name 
myApp 
--class 
env.Main 
--verbose 
lib/env.jar,lib/app.jar 
app.AggBlock1Task 

presumo non sto facendo bene - non impostando maestro Spark e parametri di modalità e l'esecuzione dell'applicazione con spark.master set per local[*]. Per quanto ho capito, la creazione di un oggetto SparkConf all'interno dell'applicazione dovrebbe impostare la proprietà spark.master a tutto ciò che ho specificato in Oozie (in questo caso yarn), ma semplicemente non funziona quando lo faccio ..

c'è qualcosa Sto sbagliando o mi manca?
Qualsiasi aiuto sarà molto apprezzato!

risposta

2

Sono riuscito a risolvere il problema inserendo i due JAR nella directory utente /user/danny/app/ e specificando il parametro Jar/py files come ${nameNode}/user/danny/app/env.jar. L'esecuzione ha causato il lancio di ClassNotFoundException, anche se il JAR si trovava nella stessa cartella in HDFS. Per ovviare a questo, ho dovuto andare alle impostazioni e aggiungere quanto segue alla lista delle opzioni: --jars ${nameNode}/user/danny/app/app.jar.In questo modo viene anche fatto riferimento al modulo App e l'applicazione viene eseguita correttamente.

+1

Bello trovare, questo è difficile, cercherà di aggiungere un aiuto migliore nell'interfaccia utente! – Romain

Problemi correlati