2015-04-03 12 views
6

Nie można uruchomić Apache Spark w Docker.Jak uruchomić Spark na Dockerze?

Kiedy staram się komunikować z moim kierowcą iskra pana otrzymam kolejny błąd:

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

Miałem ten sam problem, gdy próbowałem uruchomić Spark Job Server w Dockerze. Problem polega na tym, że Spark wykorzystuje losowe porty do komunikacji między mistrzem, robotnikiem i kierowcą. Docker jest systemem zamkniętym według projektu i musisz ujawnić określone porty poprzez EXPOSE. Kiedy Spark nie może się komunikować, pojawia się ten błąd. –

Odpowiedz

4

drugie jest bardziej powszechne przyczyną wypadku Döcker. Należy sprawdzić, że

  • Expose wszystkie niezbędne porty
  • ustawiona poprawnie spark.broadcast.factory
  • uchwytem Döcker aliasy

Bez obsługi wszystkich 3 kwestie iskra części klastrów (mistrz, pracownik , sterownik) nie może się komunikować. można dokładnie odczytać na każdym numerze na http://sometechshit.blogspot.ru/2015/04/running-spark-standalone-cluster-in.html lub stosować gotowe iskry z https://registry.hub.docker.com/u/epahomov/docker-spark/

Jeśli problemem w zasoby, starają się przeznaczyć mniej zasobów (liczba wykonawców, pamięci, rdzenie) z flagami z https://spark.apache.org/docs/latest/configuration.html. Sprawdź, ile zasobów masz na domyślnej stronie interfejsu iskry, domyślnie http://localhost:8080.

5

Ten błąd wygląda na to, że pracownicy nie zarejestrowali się w systemie głównym.

Można to sprawdzić w pana zapłonowej internetowej stolcu http://<masterip>:8080

Można też po prostu użyć innego Döcker obraz lub porównać obrazy Döcker z jednym, który działa i zobaczyć, co jest inne.

Udostępniłem dockerized spark master i spark worker.

Jeśli masz maszynę Linux siedzącą za routerem NAT, taką jak domowa zapora sieciowa, która przydziela adresy w prywatnej sieci 192.168.1. * Do komputerów, ten skrypt pobierze iskrę 1.3.1 master i robotę uruchamiać w osobnych kontenerach doków o adresach odpowiednio 192.168.1.10 i .11. Konieczne może być dostrojenie adresów, jeśli 192.168.1.10 i 192.168.1.11 są już używane w sieci LAN.

pipework to narzędzie do mostkowania sieci LAN do kontenera zamiast korzystania z wewnętrznego mostka dokowanego.

Spark wymaga, aby wszystkie urządzenia były w stanie komunikować się ze sobą. O ile wiem, iskra nie jest hierarchiczna, widziałem, jak robotnicy próbowali otwierać sobie nawzajem porty. Tak więc w skrypcie powłoki ujawniam wszystkie porty, co jest ok, jeśli maszyny są inaczej zaporą ogniową, na przykład za domowym routerem NAT.

./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] 

Po uruchomieniu tego skryptu widzę internetowej raport mistrzem 192.168.1.10:8080, lub udać się do innego komputera w mojej sieci, która ma rozkład zapłonową, i uruchom ./spark-shell --master spark://192.168.1.10:7077 i wyświetli interaktywną powłokę scala.