2014-09-19 19 views
5

Gdy Apache Spark działa w trybie autonomicznym, wykorzystuje wiele portów do różnych rodzajów komunikacji sieciowej między (między innymi) sterownikiem i wykonawcami/pracownikami.Konfiguracja portów sieciowych Apache Spark

W wersji iskry 1.1.0 dodano wiele właściwości, aby umożliwić konfigurowanie używanych portów, a także opracowano dla nich przewodnik: http://spark.apache.org/docs/latest/security.html#configuring-ports-for-network-security Wygląda jednak na to, że można kontrolować tylko porty serwera, czyli te, które są odsłuchiwane.

Jednak nie znalazłem sposobu, w jaki mogę kontrolować porty klienta, a wykonawca iskier/pracownik otworzy się, aby połączyć się z programem sterownika. Mój program sterownika działa w tomcat i muszę być bardzo konkretny w mojej catalina.policy, aby zezwalać tylko na określone adresy IP/porty.

Czy istnieje sposób, w jaki mogę kontrolować wszystkie porty używane przez Spark do konfigurowania uprawnień do gniazd w catalina.policy z tomcat uruchamiającego program sterownika tak, aby był w stanie komunikować się z executorami/pracownikami?

EDIT Błąd Dostaję tomcat na stronie jest:

2014-09-19 16:55:42,437 [New I/O server boss #6] WARN T:[] V:[]o.j.n.c.s.nio.AbstractNioSelector - Failed to accept a connection. 
java.security.AccessControlException: access denied ("java.net.SocketPermission" "<worker IP address>:44904" "accept,resolve") 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372) ~[na:1.7.0_67] 
    at java.security.AccessController.checkPermission(AccessController.java:559) ~[na:1.7.0_67] 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) ~[na:1.7.0_67] 
    at java.lang.SecurityManager.checkAccept(SecurityManager.java:1170) ~[na:1.7.0_67] 
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:261) ~[na:1.7.0_67] 
    at org.jboss.netty.channel.socket.nio.NioServerBoss.process(NioServerBoss.java:100) ~[netty-3.6.6.Final.jar:na] 
    at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:312) ~[netty-3.6.6.Final.jar:na] 
    at org.jboss.netty.channel.socket.nio.NioServerBoss.run(NioServerBoss.java:42) ~[netty-3.6.6.Final.jar:na] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_67] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_67] 
    at java.lang.Thread.run(Thread.java:745) [na:1.7.0_67] 

Odpowiedz

1

Port klient jest zazwyczaj określana dynamicznie przy starcie.

Port serwera to port połączony z pierwotnym żądaniem klienta, ponieważ to pierwsze żądanie jest obsługiwane, połączenie zostanie "zakończone", co (między innymi) otworzy port "klienta" w żądaniu maszynę, aby uzyskać informacje o odpowiedzi. Zwykle ten port klienta jest osadzony w pierwotnym żądaniu i jest pobierany z zakresu skonfigurowanego w systemie operacyjnym klienta (lub co najmniej w warstwie tcp stosu sieciowego klienta).

Jeśli można skonfigurować klienta tak, aby oferował tylko jeden port, prawdopodobnie spowoduje to problemy, ponieważ po uruchomieniu dwóch wystąpień programu klienckiego kolejna instancja nie będzie mogła otworzyć danych wejściowych z portu serwera, a pierwszy klient otrzymywałby odpowiedzi na oba żądania klienta.

Jak widzisz serwer nie otwierać portu klienta (odpowiedź), prawdopodobnie trzeba sprawdzić (w tej kolejności)

  1. Ścieżka sieci z serwera do klienta (może to być inna niż od klienta do serwera). Jeśli jest ok ...
  2. Konfiguracja zapory klienta. Może się zdarzyć, że nadgorliwa konfiguracja zapory może blokować żądania kończenia żądania połączenia klienta przez blokowanie zakresu portów klienta.
  3. Oprogramowanie klienta/konfiguracja systemu. Chociaż są niezwykle rzadkie, czasami ludzie konfigurują swoje systemy tak, aby umieszczać porty klienta poza zakresem tego, co może być obsługiwane (nie wydaje się, aby tak było w twoim przypadku). Zazwyczaj jest to 65535.

Szanse na rozwiązanie problemu ogrodowego, ale może to być problem z zaporą ogniową (lub nadgorliwy skaner antywirusowy/rozwiązanie typu fire-walling).