Do tej pory uruchamiałem Spark tylko na maszynach Linux i maszynach wirtualnych (bridged networking), ale teraz jestem interesujący w wykorzystywaniu większej ilości komputerów jako niewolników. Przydałaby się dystrybucja kontenera Docker Spark Slave na komputerach i automatyczne połączenie ich z zakodowanym Iskrem głównym IP. To już działa, ale mam problem z skonfigurowaniem odpowiedniego SPARK_LOCAL_IP (lub parametru -host dla start-slave.sh) na kontenerach slave.Spark SPARK_PUBLIC_DNS i SPARK_LOCAL_IP w autonomicznym klastrze z kontenerami dokowania
Wydaje mi się, że poprawnie skonfigurowałem zmienną env SPARK_PUBLIC_DNS tak, aby odpowiadała IP sieci dostępnej dla hosta (z przestrzeni adresowej 10.0.x.x), co najmniej jest pokazywana w interfejsie WWW urządzenia Spark master i jest dostępna dla wszystkich komputerów.
Ustawiłem również SPARK_WORKER_OPTS i port Docker do przodu zgodnie z instrukcją na http://sometechshit.blogspot.ru/2015/04/running-spark-standalone-cluster-in.html, ale w moim przypadku Master Sparka działa na innej maszynie, a nie w Dockerze. Uruchamiam zadania Sparka z innej maszyny w sieci, być może także z samym niewolnikiem.
Rzeczy, które próbowałem:
- należy konfigurować SPARK_LOCAL_IP w ogóle, niewolnik wiąże się z dochodzeniem kontenera (np 172.17.0.45), nie może być połączony z master lub sterownika, obliczenia nadal działa większość czas, ale nie zawsze
- Powiąż z 0.0.0.0, slave rozmawiają z masterem i nawiązują połączenie, ale umiera, inny niewolnik pojawia się i znika, kontynuuje pętlę w ten sposób
- Powiąż z hostem ip, start nie działa jako ten adres IP nie jest widoczny w kontenerze, ale byłby dostępny dla innych, ponieważ przekazywanie portów jest skonfigurowane jako
Zastanawiam się, dlaczego skonfigurowany SPARK_PUBLIC_DNS nie jest używany podczas łączenia się z urządzeniami podrzędnymi? Myślałem, że SPARK_LOCAL_IP wpłynie tylko na lokalne powiązanie, ale nie zostanie ujawnione na komputerach zewnętrznych.
Pod numerem https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/troubleshooting/connectivity_issues.html poinstruowano, aby "ustawić SPARK_LOCAL_IP na adresowalną nazwę hosta dla procesów sterownika, procesora głównego i procesów roboczych", czy jest to jedyna opcja? Uniknąłbym dodatkowej konfiguracji DNS i po prostu użyłbym ips do skonfigurowania ruchu między komputerami. Czy istnieje prosty sposób, aby to osiągnąć?
Edit: Podsumowując obecną Ustawianie:
- Master działa na Linux (VM w VirtualBox Windows z mostku sieci)
- Kierowca twierdzi pracy z innego komputera z systemem Windows, działa świetnie
- Obraz dokowania do uruchamiania niewolników jest rozprowadzany jako "zapisany" plik .tar.gz, ładowany (zwinięty xyz | gunzip | ładunek dokowanego) i uruchamiany na innych maszynach w sieci, ma to probem z prywatnym/publicznym konfiguracja ip
Jak dokładnie próbujesz używać kontenerów? czy były to pojemniki tylko do "piaskownicy" lub "eksperymentowania?" Mam na myśli to, czy próbujesz uruchomić wiele kontenerów równolegle z mistrzem na jednym kontenerze i po prostu niewolnikami w innych? czy instalujesz razem iskrę poza kontenerami? – TravisJ
Tylko niewolnicy będą w Dockerze, master i sterownik działają "natywnie" w systemie operacyjnym (ale prawdopodobnie w maszynie wirtualnej). Mój obraz dokowanego niewolnika wygląda mniej więcej tak (nie całkiem aktualny): https://github.com/nikonyrh/docker-scripts/blob/master/spark_py34/Dockerfile Zasadniczo instaluje Python 3.4, numpy, scipy itp. Będziemy potrzebować do równoległego szkolenia naszych modeli. Musimy skalować na wielu niewolnikach, aby uzyskać wyniki szybciej i myślałem, że obraz Docker będzie łatwy do wdrożenia, a nawet na AWS. – NikoNyrh
FYI Wysłałem również pytanie na https://github.com/apache/spark/pull/3645#issuecomment-142319031, również związane z https://github.com/apache/spark/pull/3893 – NikoNyrh