Spark版本:1.1.1
本文系從官方文檔翻譯而來,轉載請尊重譯者的工作,注明以下鏈接:
http://www.cnblogs.com/zhangningbo/p/4135808.html
目錄
- Web UI
- 事件日志
- 網絡安全(配置端口)
- 僅適用於Standalone模式的端口
- 適用於所有集群管理器的通用端口
現在,Spark支持通過共享秘鑰進行認證。啟用認證功能可以通過參數spark.authenticate來配置。此參數控制spark通信協議是否使用共享秘鑰進行認證。這種認證方式基於握手機制,以確保通信雙方都有相同的共享秘鑰時才能通信。如果共享秘鑰不一致,則雙方將無法通信。可以通過以下過程來創建共享秘鑰:
- 在spark on YARN部署模式下,配置spark.authenticate為true,就可以自動產生並分發共享秘鑰。每個應用程序都使用唯一的共享秘鑰。
- 其他部署方式下,應當在每個節點上都配置參數spark.authenticate.secret。此秘鑰將由所有Master、worker及應用程序來使用。
- 注意:實驗性的Netty shuffle路徑(spark.shuffle.use.netty)是不安全的,因此,如果啟用認證功能就不要使用Netty for shuffle了。
Web UI
通過設置參數spark.ui.filters來使用javax servlet filters就可以實現安全的spark UI。如果用戶有某些不該讓其他人看到的數據,那么該用戶就會要求UI也能有安全性。用戶指定了Java servlet filter就可以進行認證了。接下來,一旦用戶登錄,spark就可以在ACL列表中查詢該用戶是否有權查看UI。配置參數spark.acls.enable和spark.ui.view.acls控制着ACL的行為。注意:啟動應用程序的用戶總是有權訪問UI。在YARN上,spark UI使用標准的YARN web代理機制並通過已安裝的Hadoop filters進行認證。
spark還支持通過修改ACL表來控制哪個用戶有權修改正在運行着的spark應用程序。比如,kill一個應用程序或任務。這類操作是通過配置spark.acls.enable和spark.modify.acls來控制的。注意:如果你正在認證Web UI,那么,為了使用Web UI上的kill按鈕,你就必須把用戶添加到view acls表中。在YARN上,修改后的acls被傳入並控制着哪個用戶可以通過YARN接口來訪問web UI。
如果有多個管理員存在,那么spark允許在acls中指定多個管理員,讓他們總可以查看所有應用程序,以及修改應用的權限。這一功能是由配置參數spark.admin.acls來控制的。這在共享集群上是很有用的,因為這類集群中往往有多個管理員或者幫助用戶調試程序的技術支持人員。
事件日志
如果應用程序正在使用事件日志記錄功能,那么,應當手動創建用來存放事件日志的路徑(spark.eventLog.dir),並賦予其合適的權限。如果你想讓這些日志文件也是安全的,那么,該路徑的權限應當設為drwxrwxrwxt。該路徑的所有者應該是正在運行history server進程的那個超級用戶,而且用戶組權限應限制為超級用戶組。這樣做可以讓所有用戶都能對該路徑執行寫操作,但會阻止那些未經授權的用戶刪除或重命名文件,除非他們是該文件或者路徑的所有者。事件日志文件由spark創建並賦予權限,比如只有所有者及其所在用戶組有讀寫權限。
網絡安全(配置端口)
spark大量使用網絡,而且有些環境嚴格要求使用嚴密的防火牆設置。下面是spark用於通信的主要端口,以及如何配置這些端口。
僅適用於Standalone模式的端口
From | To | 默認端口 | 用途 | 配置 | 備注 |
Browser | Standalone Master | 8080 | Web UI | spark.master.ui.port / SPARK_MASTER_WEBUI_PORT | Jetty-based,僅用於Standalone模式 |
Browser | Standalone Worker | 8081 | Web UI | spark.worker.ui.port / SPARK_WORKER_WEBUI_PORT | Jetty-based,僅用於Standalone模式 |
Driver / Standalone Worker | Standalone Master | 7077 | 向集群提交作業(Submit) | SPARK_MASTER_PORT | Akka-based。設為0意思是隨機選擇端口,僅用於Standalone模式 |
Standalone Master | Standalone Worker | random | 調度executors | SPARK_WORKER_PORT | Akka-based。設為0意思是隨機選擇端口,僅用於Standalone模式 |
適用於所有集群管理器的通用端口
From | To | 默認端口 | 用途 | 配置 | 備注 |
Browser | Application | 4040 | Web UI | spark.ui.port | Jetty-based |
Browser | History Server | 18080 | Web UI | spark.history.ui.port | Jetty-based |
Executor / Standalone Master | Driver | random | 連接到Application,或通知executor狀態變化 | spark.driver.port | Akka-based。設為0意思是隨機選擇端口 |
Driver | Executor | random | 調度任務task | spark.executor.port | Akka-based。設為0意思是隨機選擇端口 |
Executor | Driver | random | files和jars文件服務器 | spark.fileserver.port | Jetty-based |
Executor | Driver | random | HTTP廣播 | spark.broadcast.port | Jetty-based,TorrentBroadcast不使用該端口,它通過block manager發送數據 |
Executor | Driver | random | 類(class)文件服務器 | spark.replClassServer.port | Jetty-based,僅用於spark shell |
Executor / Driver | Executor / Driver | random | Block Manager端口 | spark.blockManager.port | Raw socket via ServerSocketChannel |
有關安全的配置參數詳見配置頁面,安全機制的實現參考 org.apache.spark.SecurityManager
。