2017-08-01 1 views
3

Je peux me connecter au conducteur très bien en ajoutant ce qui suit:Comment se connecter avec JMX à distance au travailleur Spark sur Dataproc

spark.driver.extraJavaOptions=-Dcom.sun.management.jmxremote \ 
           -Dcom.sun.management.jmxremote.port=9178 \ 
           -Dcom.sun.management.jmxremote.authenticate=false \ 
           -Dcom.sun.management.jmxremote.ssl=false 

Mais faire ...

spark.executor.extraJavaOptions=-Dcom.sun.management.jmxremote \ 
           -Dcom.sun.management.jmxremote.port=9178 \ 
           -Dcom.sun.management.jmxremote.authenticate=false \ 
           -Dcom.sun.management.jmxremote.ssl=false 

... seulement donner un tas d'erreurs sur le pilote ...

Container id: container_1501548048292_0024_01_000003 
Exit code: 1 
Stack trace: ExitCodeException exitCode=1: 
    at org.apache.hadoop.util.Shell.runCommand(Shell.java:972) 
    at org.apache.hadoop.util.Shell.run(Shell.java:869) 
    at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:1170) 
    at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:236) 
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:305) 
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:84) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:748) 


Container exited with a non-zero exit code 1 

... et finalement bloque le travail.

Il n'y a pas d'erreur sur les travailleurs, il sort simplement avec:

[org.apache.spark.util.ShutdownHookManager] - Shutdown hook called 

Spark v2.2.0, et le cluster est un simple 1m-2W configuration et mes travaux sont exécutés sans problèmes sans les paramètres de l'exécuteur testamentaire.

+1

Avez-vous vérifié que les ports sont libres? Si ces exécuteurs sont instanciés sur la même machine, les collisions de ports sont problématiques. –

+0

Conflits des ports sur le travailleur semble être la source de l'accident, en effet. Cependant, comment puis-je contrôler cela autrement? Le mettre à '0' me donnera un aléatoire. Est-il possible de passer des arguments différents à différents exécuteurs? – habitats

+1

Je vous recommande de régler la mémoire de l'exécuteur assez grande, une seule pouvant tenir sur chaque machine. Vous devrez peut-être également ajuster les paramètres de votre gestionnaire de ressources. –

Répondre

0

En tant que Rick Mortiz souligné, le problème était les ports en conflit pour l'exécuteur jmx.

Cadre:

-Dcom.sun.management.jmxremote.port=0 

donne un port aléatoire et supprimé les erreurs de Spark. Pour savoir quel port il finit par utiliser faire:

netstat -alp | grep LISTEN.*<executor-pid>/java 

qui répertorie les ports actuellement ouverts pour ce processus.