Ho un piccolo cluster con 3 macchine e un'altra macchina per lo sviluppo e il testing. Durante lo sviluppo, ho impostato SparkContext
su local
. Quando tutto è a posto, voglio distribuire il file Jar che costruisco su ogni nodo. Fondamentalmente ho spostato manualmente questo jar su cluster e copiato su HDFS condiviso dal cluster. Poi ho potuto cambiare il codice per:Come semplificare la distribuzione del mio Jar a Spark Cluster in modalità standalone?
//standalone mode
val sc = new SparkContext(
"spark://mymaster:7077",
"Simple App",
"/opt/spark-0.9.1-bin-cdh4", //spark home
List("hdfs://namenode:8020/runnableJars/SimplyApp.jar") //jar location
)
a correre nel mio IDE. La mia domanda: c'è un modo più semplice per spostare questo vaso sul cluster?
Puoi anche usare 'SparkContext.jarOfClass (this.getClass)' invece di codificarlo con 'Array ("/local/dir/SimplyApp.jar ")'. – samthebest
@samthebest quel metodo determina il jar da cui è stata caricata la classe fornita e funziona bene per le dipendenze ma potrebbe non funzionare per la classe driver che in un IDE non sarà stata caricata da un JAR. Il modo più semplice è quello di costruire un uberjar con Maven Shade o l'assembly SBT e fornirlo come dipendenza unica. – maasg
Solo FWIW questa risposta dipende dall'accettare l'impostazione predefinita per --deploy-mode che è client, se si utilizza il cluster --deploy-mode allora non si sa su quale nodo di lavoro verrà eseguito il driver, quindi quindi si è necessario che questi vasi siano visibili a tutti i lavoratori, per Advanced Dependency Management è comunque una buona idea perché riduce il traffico di rete. http://spark.apache.org/docs/latest/submitting-applications.html#advanced-dependency-management. Inoltre i vasi non vengono spediti al master in quanto il master non tratta il codice, ma solo la programmazione del codice, ovvero "applicazioni" in Spark – JimLohse