2015-09-25 12 views
5

Mam tylko jedną maszynę i chcę uruchamiać zadania iskrzenia w trybie klastra mezos. Być może sensownym rozwiązaniem byłoby uruchamianie klastra węzłów, ale przede wszystkim chcę przetestować mezony w pierwszej kolejności, aby sprawdzić, czy jest on w stanie wydajniej wykorzystywać zasoby (uruchamiać wiele zadań iskier w tym samym czasie bez partycjonowania statycznego). Próbowałem na wiele sposobów, ale bez powodzenia. Oto co zrobiłem:Tryb klastra Spark Mesos przy użyciu Dispatchera

  1. Buduj mezony i uruchamiaj zarówno mezos master, jak i slaves (2 slave na tych samych maszynach).

    sudo ./bin/mesos-master.sh --ip=127.0.0.1 --work_dir=/var/lib/mesos 
    sudo ./bin/mesos-slave.sh --master=127.0.0.1:5050 --port=5051 --work_dir=/tmp/mesos1 
    sudo ./bin/mesos-slave.sh --master=127.0.0.1:5050 --port=5052 --work_dir=/tmp/mesos2 
    
  2. Uruchom zapłonie meso-dyspozytorskie

    sudo ./sbin/start-mesos-dispatcher.sh --master mesos://localhost:5050 
    
  3. submit aplikację z dyspozytorem jako master URL.

    spark-submit --master mesos://localhost:7077 <other-config> <jar file> 
    

Ale to nie robi praca:

E0925 17:30:30.158846 807608320 socket.hpp:174] Shutdown failed on fd=61: Socket is not connected [57] 
    E0925 17:30:30.159545 807608320 socket.hpp:174] Shutdown failed on fd=62: Socket is not connected [57] 

Jeśli używam zapłonie złożyć klaster --deploy-mode, potem mam inny komunikat o błędzie:

Exception in thread "main" org.apache.spark.deploy.rest.SubmitRestConnectionException: Unable to connect to server 

It działa doskonale, jeśli nie korzystam z usług dyspozytora, ale bezpośrednio z adresu URL mesos master: --master mesos: // localhost: 5050 (tryb klienta). Zgodnie z documentation tryb klastra nie jest obsługiwany dla klastrów Mesos, ale daje inną instrukcję dla trybu klastra here. Czyli jest to trochę mylące? Moje pytanie brzmi:

  1. Jak mogę to uruchomić?
  2. Czy powinienem użyć trybu klienta zamiast trybu klastra, jeśli chcę przesłać aplikację/jar bezpośrednio z głównego węzła?
  3. Jeśli mam jeden komputer, powinienem odrodzić 1 lub więcej procesów slave. Zasadniczo mam pewną liczbę iskier i nie chcę robić statycznego podziału zasobów. Ale kiedy używasz mesów bez statycznego partycjonowania, wydaje się, że jest on znacznie wolniejszy?

Dzięki.

Odpowiedz

1

Używam Twojego scenariusza, aby spróbować, może to być praca. Jedno jest inne, używam adresu IP zamiast "localhost" i "127.0.0.1" Po prostu spróbuj ponownie i sprawdź http://your_dispatcher:8081 (w przeglądarce), jeśli istnieje.

To mój zapłonie złożyć polecenie:

$spark-submit --deploy-mode cluster --master mesos://192.168.11.79:7077 --class "SimpleApp" SimpleAppV2.jar 

przypadku sukcesu, można zobaczyć, jak poniżej

{ 
    "action" : "CreateSubmissionResponse", 
    "serverSparkVersion" : "1.5.0", 
    "submissionId" : "driver-20151006164749-0001", 
    "success" : true 
} 

Kiedy dostałem swój dziennik błędów jak ty, ja ponownie uruchomić komputer i ponowić próbę krok. To również działa.

1

Wydaje się, że są dwie rzeczy, które są mylące: uruchamianie aplikacji Spark w klastrze (w przeciwieństwie do lokalnie) i uruchamianie sterownika w klastrze.

Ze szczytu Submitting Applications:

Skrypt zapłonie złożyć w katalogu bin Sparka jest używany do uruchamiania aplikacji w klastrze. Może używać wszystkich obsługiwanych przez Spark menedżerów klastrów za pomocą jednolitego interfejsu, dzięki czemu nie trzeba konfigurować aplikacji specjalnie dla każdego z nich.

Tak, Mesos jest jednym z obsługiwanych menedżerów klastrów, a więc można run Spark apps on a Mesos cluster.

Co Mesos jako czas zapisu nie obsługuje uruchamiania sterownika w klastrze, jest to określone przez argument wiersza poleceń --deploy-mode z ./bin/spark-submit. Ponieważ wartość domyślna --deploy-mode jest client można po prostu pominąć, albo jeśli chcesz, aby jednoznacznie określić go, a następnie użyj:

./bin/spark-submit --deploy-mode client ... 
Powiązane problemy