【Spark學習】Apache Spark安全機制


Spark版本:1.1.1

本文系從官方文檔翻譯而來,轉載請尊重譯者的工作,注明以下鏈接:

http://www.cnblogs.com/zhangningbo/p/4135808.html

 

目錄


  • Web UI
  • 事件日志
  • 網絡安全(配置端口)
  1. 僅適用於Standalone模式的端口
  2. 適用於所有集群管理器的通用端口

 

 

  現在,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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM