2016-04-26 37 views
5

Chcę uruchomić aplikację strumieniową iskrzenia w klastrze przędzy na serwerze zdalnym. Domyślną wersją java jest 1.7, ale chcę używać 1.8 dla mojej aplikacji, która również znajduje się na serwerze, ale nie jest domyślna. Czy istnieje sposób, aby określić za pomocą iskry - przesłać lokalizację java 1.8, tak aby nie dostać poważny błąd.Jak określić, której wersji java użyć w poleceniu spark-submit?

+1

używasz maven? Jeśli tak, możesz określić wersję java w pom.xml –

+3

może możesz ustawić JAVA_HOME tuż przed wysłaniem iskry. w ten sposób: "JAVA_HOME =/path/to/java ./bin/spark-submit ......" – Hlib

+2

ustawienie JAVA_HOME przed polecenia spark-submit pracował dla mnie. Dzięki :) – Priyanka

Odpowiedz

2

Mimo że można wymusić uruchomienie kodu sterownika w konkretnej wersji Java (export JAVA_HOME=/path/to/jre/ && spark-submit ... ), pracownicy wykonają kod z domyślną wersją Java ze ścieżki PATH użytkownika przędzy z komputera pracownika.

Możesz ustawić każdą instancję Sparka, aby używała konkretnej wersji JAVA_HOME, edytując pliki spark-env.sh (documentation).

9

JAVA_HOME nie było wystarczające w naszym przypadku, sterownik działał w java 8, ale odkryłem później, że pracownicy Sparka w YARN zostały uruchomione przy użyciu Java 7 (węzły hadoop mają zainstalowaną obie wersje java).

Musiałem dodać spark.executorEnv.JAVA_HOME=/usr/java/<version available in workers> w spark-defaults.conf. Zauważ, że możesz go podać w linii poleceń pod numerem --conf.

Zobacz http://spark.apache.org/docs/latest/configuration.html#runtime-environment

+0

Dla tych, którzy nie mają dostępu/uprawnień do sprawdzania wersji java na węzłach roboczych, użyj 'spark.range (0, 100) .mapPartitions (_. Map (_ => java.lang.System.getProperty ("java.version"))). Pokaż 'dla sprawdzenia poprawności. Może być zbyt trudne określenie wersji java środowiska wykonawczego za pomocą interfejsu przędzy/iskry –