Sto utilizzando spark-ec2 per eseguire un codice Spark. Quando imposto il master su "local", funziona correttamente. Tuttavia, quando imposto il master su $ MASTER, , i worker vengono immediatamente a mancare, con java.lang.NoClassDefFoundError per le classi. Gli addetti si connettono al master e vengono visualizzati nell'interfaccia utente e tentano di eseguire l'attività; ma solleva immediatamente quell'eccezione non appena carica la sua prima classe di dipendenza (che si trova nel barattolo dell'assieme).Lavoratori di scintille non riescono a trovare JAR sul cluster EC2
Ho usato sbt-assembly per creare un jar con le classi, confermato usando jar tvf che le classi ci sono, e impostare SparkConf per distribuire le classi . L'interfaccia utente Spark Web mostra, infatti, il vaso di montaggio per essere aggiunto al percorso di classe: http://172.x.x.x47441/jars/myjar-assembly-1.0.jar
Sembra che, nonostante il fatto che myjar montaggio contiene la classe , e viene aggiunto al cluster, non è raggiunto i lavoratori . Come posso risolvere questo? (Ho bisogno di copiare manualmente il file jar In caso affermativo, a cui dir ho pensato che il punto del SparkConf aggiungere vasetti è stato a farlo automaticamente??)
I miei tentativi di debug hanno dimostrato:
- il vaso assemblaggio viene copiato/root/scintilla/lavoro/app-xxxxxx/1/ (determinato mediante ssh a lavoratore e ricerca per vaso)
- Tuttavia, tale percorso non appare sulla classpath del lavoratore (Determinato dai registri, che mostrano java -cp ma manca quel file)
Così, sembra come se avessi bisogno di dire Spark di aggiungere il percorso per il vaso di assemblaggio al classpath del lavoratore. Come lo faccio? O c'è un altro colpevole? (Ho passato ore a provare a eseguire il debug di questo, ma senza alcun risultato!)
Una soluzione, che funziona, è quello di copiare il vaso per ogni lavoratore e aggiungerlo esplicitamente a "SPARK_CLASSPATH" su ciascun lavoratore. – SRobertJames
Poiché questa domanda e il commento sopra, SPARK_CLASSPATH sono ora deprecati. – JimLohse