2015-04-03 17 views
6

Impossibile eseguire Apache Spark su Docker.Come eseguire Spark su Docker?

Quando provo a comunicare dal mio autista a suscitare maestro ricevo prossimo errore:

15/04/03 13:08:28 WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

+1

Ho avuto lo stesso problema quando ho provato a eseguire Spark Job Server all'interno di Docker. Il problema qui è che Spark usa porte casuali per comunicare tra master, worker e driver. Docker è un sistema chiuso per progettazione ed è necessario esporre porte specifiche tramite EXPOSE. Quando Spark non riesce a comunicare, arriva questo errore. –

risposta

4

In secondo luogo è una ragione più comune per caso finestra mobile. Si dovrebbe verificare, che si

  • esporre tutte le porte necessarie
  • Impostare corrette spark.broadcast.factory
  • Maniglia alias docker

Senza gestione di tutte le questioni 3 scintilla parti di cluster (master, operaio , driver) non può comunicare. Si può leggere molto attentamente su ogni questione sulla http://sometechshit.blogspot.ru/2015/04/running-spark-standalone-cluster-in.html o utilizzare contenitore pronto per la scintilla da https://registry.hub.docker.com/u/epahomov/docker-spark/

Se il problema di risorse, cercare di destinare meno risorse (numero di esecutori, memoria, core) con le bandiere di https://spark.apache.org/docs/latest/configuration.html. Controlla quante risorse hai sulla pagina dell'interfaccia utente di master spark, che è http://localhost:8080 per impostazione predefinita.

5

Questo errore sembra che gli operatori non siano registrati con il master.

Questo può essere controllato presso il maestro scintilla web sgabello http://<masterip>:8080

Si potrebbe anche semplicemente usare un'immagine diversa finestra mobile, o confrontare le immagini della finestra mobile con uno che funziona e vedere ciò che è diverso.

Ho messo in bacino un spark master e spark worker.

Se si dispone di una macchina Linux dietro un router NAT, come un firewall domestico, che alloca gli indirizzi nella rete privata 192.168.1. * Alle macchine, questo script scaricherà un master 1.3.1 di scintilla e un operatore per eseguire in contenitori di finestra mobile separati con gli indirizzi 192.168.1.10 e .11 rispettivamente. Potrebbe essere necessario modificare gli indirizzi se 192.168.1.10 e 192.168.1.11 sono già utilizzati sulla LAN.

pipework è un'utilità per il collegamento della LAN al contenitore invece di utilizzare il ponte mobile interno.

Spark richiede che tutte le macchine siano in grado di comunicare tra loro. Per quanto posso dire, la scintilla non è gerarchica, ho visto gli operai cercare di aprire le porte l'un l'altro. Quindi nello script della shell espongo tutte le porte, il che è OK se le macchine sono altrimenti protette da firewall, come dietro un router NAT domestico.

./run-docker-spark

#!/bin/bash 
sudo -v 
MASTER=$(docker run --name="master" -h master --add-host master:192.168.1.10 --add-host spark1:192.168.1.11 --add-host spark2:192.168.1.12 --add-host spark3:192.168.1.13 --add-host spark4:192.168.1.14 --expose=1-65535 --env SPARK_MASTER_IP=192.168.1.10 -d drpaulbrewer/spark-master:latest) 
sudo pipework eth0 $MASTER 192.168.1.10/[email protected] 
SPARK1=$(docker run --name="spark1" -h spark1 --add-host home:192.168.1.8 --add-host master:192.168.1.10 --add-host spark1:192.168.1.11 --add-host spark2:192.168.1.12 --add-host spark3:192.168.1.13 --add-host spark4:192.168.1.14 --expose=1-65535 --env mem=10G --env master=spark://192.168.1.10:7077 -v /data:/data -v /tmp:/tmp -d drpaulbrewer/spark-worker:latest) 
sudo pipework eth0 $SPARK1 192.168.1.11/[email protected] 

Dopo l'esecuzione di questo script posso vedere il report Web Master presso 192.168.1.10:8080, o andare ad un'altra macchina sulla LAN che ha una distribuzione scintilla, ed esegui ./spark-shell --master spark://192.168.1.10:7077 e visualizzerà una scala scala interattiva.

Problemi correlati