2016-12-29 31 views
7

Rozpocząłem pracę w iskrze w trybie klastrowania przędzy poprzez przesyłanie iskier. Aby wskazać błąd częściowy itp. Chcę przekazać kod exitcode ze sterownika do skryptu wywołującego iskrzenie.przekaż niestandardowy kod wyjścia z iskry w trybie klastrowania przędzy do CLI

Próbowałem obu, System.exit i rzucając SparkUserAppException w sterowniku, ale w obu przypadkach CLI otrzymał tylko 1, a nie jakikolwiek kod I przeszedł.

Myślę, że nie można przekazać niestandardowego kodu wyjścia, ponieważ każdy kod, który przeszedł przez sterownik, zostanie przekonwertowany na status przędzy, a przędza zamieni dowolny nieudany kod wyjścia na 1 lub nie.

+0

Czy możesz powiedzieć mi polecenie, którego użyłeś do przesłania pracy? – code

+0

$ SPARK_HOME/bin/spark-submit --verbose .... - Przędza dla programistów - klaster trybu zdalnego ... .... . Używam iskry 2.0.0 z hadoopem 2.3. Każda konkretna opcja, której szukasz? –

+0

Wydaje mi się, że klient trybu -deploy może ci pomóc. Lub przynajmniej z hackerem, powinieneś być w stanie osiągnąć to, czego potrzebujesz. – code

Odpowiedz

1

Patrząc na kod zapłonowej, mogę stwierdzić to:

Jest to możliwe w trybie client. Spójrz na runMain() metody SparkSubmit klasy

Natomiast w trybie cluster, to nie jest możliwe, aby uzyskać status wyjścia sterownika, ponieważ klasa kierowca zostanie uruchomiony w jednym z wykonawców.

Nie alternatywny rozwiązanie, które może/nie może być odpowiednie dla przypadku użycia:

Host API REST z punktu końcowego do otrzymywania aktualizacji statusu z kodu kierowcy. W przypadku jakichkolwiek wyjątków, pozwól, aby kod Twojego sterownika użył tego punktu końcowego do aktualizacji statusu.

+0

spark-submit nadal będzie zwracać exultode przędzy do cli. Dlatego potrzebujemy sposobu, aby sterownik mógł bezpośrednio pozwolić cli znać kod wyjścia. Jest kilka brzydkich sposobów na zrobienie tego. : P –

+0

Tak, są. Czy mogę wiedzieć, dlaczego nie można korzystać z trybu klienta? – code

+0

Tryb klastra jest zalecany do użytku produkcyjnego. W węzłach o niejednolitej konfiguracji tryb klastra IMHO dba o to, aby sterownik działał na węźle, który wymaga pamięci RAM, procesora. –

1

Możesz zapisać kod wyjścia w pliku wyjściowym (w HDFS lub lokalnym FS) i sprawić, by twój skrypt czekał na pojawienie się tego pliku, przeczytaj i kontynuuj. To zdecydowanie nie jest elegancki sposób, ale może ci pomóc. Podczas zapisywania pliku należy zwrócić uwagę na uprawnienia do tej lokalizacji. Twój proces iskrzenia musi mieć dostęp do RW.

+0

Tak, to jest brzydki sposób, który powiedziałem w innym komentarzu. –