2015-02-23 13 views
11

Ho impostato il cluster EC2 con Spark. Tutto funziona, tutti i master/slave sono attivi e funzionanti.Invio di lavori al cluster Spark EC2 da remoto

Sto tentando di inviare un lavoro di esempio (SparkPi). Quando eseguo il ssh su cluster e lo invio da lì, tutto funziona correttamente. Tuttavia, quando il driver viene creato su un host remoto (il mio laptop), non funziona. Ho provato entrambe le modalità per --deploy-mode:

--deploy-mode=client:

dal mio computer portatile:

./bin/spark-submit --master spark://ec2-52-10-82-218.us-west-2.compute.amazonaws.com:7077 --class SparkPi ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar 

risultati nei seguenti avvertenze indefiniti/errori:

avvertono TaskSchedulerImpl: Il lavoro iniziale non ha accettato alcuna risorsa; controllare la UI cluster per garantire che i lavoratori sono registrati e hanno sufficiente memoria 15/02/22 18:30:45

ERRORE SparkDeploySchedulerBackend: ha chiesto di rimuovere inesistente esecutore 0 15/02/22 18:30: 45

ERRORE SparkDeploySchedulerBackend: chiesto per rimuovere inesistente esecutore 1

... e non è riuscito piloti - in UI Spark Web "i piloti hanno completato" con "Stato = ERRORE" apparire.

Ho provato a passare i limiti per core e memoria a presentare sceneggiatura, ma non ha aiutato ...

--deploy-mode=cluster:

dal mio computer portatile:

./bin/spark-submit --master spark://ec2-52-10-82-218.us-west-2.compute.amazonaws.com:7077 --deploy-mode cluster --class SparkPi ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar 

Il risultato è:

.... Driver riuscito presentato come pilota-20150223023734-0.007 ... attesa prima polling per lo stato del driver ... maestro di polling per conducente Stato stato di conducente-20150223023734-0.007 è errore Eccezione dal cluster è stato: java.io.FileNotFoundException: File file: /home/oleg/spark/spark12/ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar non esiste. java.io.FileNotFoundException: File file: /home/oleg/spark/spark12/ec2test/target/scala-2.10/ec2test_2.10-0.0.1.jar non esiste. a org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus (RawLocalFileSystem.java:397) a org.apache.hadoop.fs.FilterFileSystem.getFileStatus (FilterFileSystem.java:251) a org.apache.hadoop.fs .FileUtil.copy (FileUtil.java:329) a org.apache.spark.deploy.worker.DriverRunner.org $ apache $ spark $ deploy $ worker $ DriverRunner $$ downloadUserJar (DriverRunner.scala: 150) allo org .apache.spark.deploy.worker.DriverRunner $$ anon $ 1.run (DriverRunner.scala: 75)

Quindi, mi farebbe piacere eventuali indicazioni su quello che sta andando male e alcune linee guida come distribuire posti di lavoro da client remoto. Grazie.

UPDATE: Così, per il secondo numero in modalità cluster, il file deve essere globalmente visibile da ogni nodo del cluster, quindi deve essere da qualche parte in posizione accessibile. Questo risolve IOException ma porta allo stesso problema della modalità client.

+0

penso che il programma del driver serve il codice/roba per i lavoratori. La tua lappie è raggiungibile dai tuoi lavoratori? Normalmente è necessario il programma del driver il più vicino possibile al cluster. –

+1

Come @AlisterLee ha detto che dovresti controllare le impostazioni tra il tuo computer ei nodi ec2 (firewall, impostazioni della porta, ecc.). Se fallisce, allora potresti provare a portarlo alla mailing list (e poi riferire la soluzione :)) –

risposta

1

La documentazione a:

http://spark.apache.org/docs/latest/security.html#configuring-ports-for-network-security

elenca tutti i diversi canali di comunicazione utilizzati in un cluster Spark. Come puoi vedere, c'è un gruppo in cui la connessione viene effettuata dall'Esecutore (i) al Driver. Quando si esegue con --deploy-mode=client, il driver viene eseguito sul laptop, quindi gli executors proveranno a stabilire una connessione con il laptop. Se il gruppo di sicurezza AWS eseguito dai tuoi esecutori blocca il traffico in uscita verso il tuo laptop (che il gruppo di sicurezza predefinito creato dagli script Spark EC2 non funziona) o sei dietro un router/firewall (più probabile), non riescono a connettersi e ottieni gli errori che stai vedendo.

Quindi per risolvere il problema, è necessario inoltrare tutte le porte necessarie al laptop o riconfigurare il firewall per consentire la connessione alle porte. Visto che un gruppo di porte viene scelto a caso, questo significa aprire una vasta gamma di porte, se non tutte. Quindi probabilmente usando --deploy-mode=cluster o client dal cluster, è meno doloroso.

+0

Grazie, è giusto. È passato un po 'di tempo da quando ho chiesto questo e ho risolto questo problema aprendo le connessioni in entrata a Spark Master - cambiando i gruppi di sicurezza in AWS –

Problemi correlati