2017-10-11 3 views
0

J'ai installé un système comme suit:Mesos Spark Slave a essayé de se connecter au maître privé IP au lieu de IP publique

IP privé de maître de

de 10.xx2, Public 35.xx6

- IP privée esclave mésos de 192.xx10, Public 111.xx2

Maintenant que le maître a correctement affecté la tâche à l'esclave, la tâche a échoué. Le message d'erreur est comme suit:

Exception dans le thread "principal" 17/10/11 22:38:01 erreur RpcOutboxMessage: Demandez délai d'attente avant de connecter avec succès

Causée par: org.apache.spark .rpc.RpcTimeoutException: ne peut pas recevoir aucune réponse en 120 secondes. Ce délai est contrôlé par spark.rpc.askTimeout

Quand je regarde l'environnement, les points spark.driver.host à l'adresse IP privée du maître 10.xx2 au lieu de l'adresse IP publique 35 .xx6. Je regarde la capture de Wireshark et en effet, il y avait un paquet TCP échoué à l'adresse IP privée principale.

Maintenant, si je mets spark.driver.bindAddress du maître à son adresse IP locale, spark.driver.host du maître à son adresse IP publique, je reçois le message suivant.

erreur TaskSchedulerImpl: Lost exécuteur 1 sur myhostname.singnet.com.sg: Impossible de créer l'exécuteur en raison de ne peut pas attribuer adresse demandée:

De ma compréhension, le spark.driver.bindAddress Réglez-le à la fois pour le maître et l'esclave, d'où l'esclave obtenir la dite erreur. Maintenant, je me demande vraiment comment faire pour configurer correctement la mise en cluster sur IP public?

Répondre

0

Je vous recommande soit d'avoir une installation tout privé ou une installation publique. Pas entre les deux.

Généralement vous voulez tout privé et si vous avez besoin de données exposées à l'extérieur, vous venez d'exposer le point de terminaison de données sur une adresse IP publique. Par exemple, exécutez tous vos travaux d'étincelles et stockez les données dans S3. Ensuite, vous activez l'accès public S3 sur le compartiment. L'utilisation d'adresses IP privées est généralement plus sécurisée.

En ce qui concerne le paramètre --advertise-ip sur le maître mesos. C'est pour les esclaves mésos de trouver le maître mesos. L'étincelle de ce problème ne prend pas en charge une combinaison publique, privée, donc vous devrez faire l'un ou l'autre. Vous pouvez exécuter vos charges de travail spark sur des machines mesos qui se connectent à des adresses IP publiques, mais cela signifie que vous aurez besoin d'un zookeeper accessible, etc. pour ces machines.

+0

Merci d'avoir répondu. En ce qui concerne ma connaissance du réseau, je ne vois pas de scénario où je peux avoir une configuration publique. Chaque machine exposée à une adresse IP publique est assignée à une adresse privée pour son réseau interne. L'IP publique n'est pas la machine elle-même mais sur le routeur (corrigez-moi si je me trompe). Mesos a résolu ce problème en incluant le paramètre --advertise_IP afin que les machines puissent se trouver en se connectant à cette adresse (qui est publique). Je ne suis pas sûr de savoir comment il est mis en œuvre sur Spark. – TheCyberliem

+0

@TheCyberliem sûr. Vérifiez mon ajout à la réponse – Rico

+0

Merci pour la réponse.Cependant, si vous lisez attentivement la description de mon problème, vous verrez que vous ne pouvez pas avoir un paramètre tout public sans IP privé (Comme je l'ai mentionné, l'IP publique n'est jamais sur la machine mais sur le routeur. et le routeur le mappent à IP publique.) – TheCyberliem