2014-09-19 59 views
5

當Apache Spark以獨立集羣模式運行時,它使用多個端口用於驅動程序和執行程序/工作程序之間的不同類型的網絡通信。Apache Spark網絡端口配置

在spark版本1.1.0中,他們添加了許多屬性來允許配置使用的端口,併爲此開發了一個指南:http://spark.apache.org/docs/latest/security.html#configuring-ports-for-network-security但是似乎只能控制服務器端口,即正在監聽的端口。

但是,我沒有找到我可以控制客戶端端口的方式,一個火花執行器/工作者將打開連接到驅動程序。我的驅動程序在tomcat中運行,我必須在我的catalina.policy中非常具體,只允許特定的IP地址/端口。

那麼,有沒有一種方法可以控制Spark使用的所有端口來配置運行驅動程序的tomcat的catalina.policy中的套接字權限,以便它能夠與執行程序/工作者進行通信?

EDIT 我在Tomcat側得到的錯誤是:

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] 

回答

1

客戶端端口通常動態地確定,在運行時。

服務器端口是由初始客戶端請求連接的端口,因爲正在處理初始請求,連接將「完成」(其中包括)在請求上打開「客戶端」端口機器獲取回覆信息。通常,此客戶端端口嵌入在初始請求中,並從客戶端操作系統(或至少是客戶端網絡堆棧的tcp層)中配置的範圍中提取。

如果可以將客戶端配置爲僅提供一個端口,則可能會引入問題,因爲當您運行客戶端程序的兩個實例時,後續實例將無法從服務器端口打開其輸入,並且第一個客戶會得到對客戶請求的迴應。

當你看到你的服務器無法打開客戶端(響應)端口,您可能需要檢查(按照這個順序)

  1. 從服務器到客戶端的網絡路徑(也可以是不同的比從客戶端到服務器)。如果沒關係...
  2. 客戶端防火牆配置。可能是過熱的防火牆配置可能阻止通過阻止客戶端端口範圍來完成客戶端連接請求的請求。
  3. 客戶端軟件/系統配置。雖然極爲罕見,但有時候人們會將系統配置爲將客戶端端口放在可支持的範圍之外(這似乎不是您的情況)。通常情況下,它是65535.

你有一個花園多種網絡問題的可能性,但它可能是一個防火牆問題(或過熱的病毒掃描儀/防火牆解決方案)。