在 Mesos 上執行 Spark
- 安全性
- 運作方式
- 安裝 Mesos
- 將 Spark 連接到 Mesos
- Mesos 執行模式
- Mesos Docker 支援
- 與 Hadoop 並行執行
- 使用 Mesos 進行動態資源配置
- 設定
- 疑難排解和除錯
注意:自 Apache Spark 3.2.0 起,Apache Mesos 支援已棄用。它將在未來版本中移除。
Spark 可以執行在由 Apache Mesos 管理的硬體叢集上。
使用 Mesos 部署 Spark 的優點包括
- Spark 與其他 架構 之間的動態分割
- 多個 Spark 執行個體之間的可擴充分割
安全性
安全性功能(例如驗證)預設未啟用。在部署開放給網際網路或不受信任網路的叢集時,保護叢集存取權限以防止未經授權的應用程式在叢集上執行非常重要。在執行 Spark 之前,請參閱 Spark 安全性 和此文件中的特定安全性章節。
運作方式
在獨立叢集部署中,下圖中的叢集管理員是 Spark 主控執行個體。使用 Mesos 時,Mesos 主控會取代 Spark 主控作為叢集管理員。
現在,當驅動程式建立工作並開始發出排程工作時,Mesos 會決定哪些機器處理哪些工作。由於在排程這些許多短期工作時會考量其他架構,因此多個架構可以在同一個叢集上共存,而不需要訴諸靜態資源分割。
若要開始,請按照以下步驟安裝 Mesos 並透過 Mesos 部署 Spark 工作。
安裝 Mesos
Spark 3.5.1 設計為與 Mesos 1.0.0 或更新版本搭配使用,不需要任何 Mesos 特殊修補程式。基於檔案和環境的機密支援需要 Mesos 1.3.0 或更新版本。
如果您已經執行 Mesos 叢集,您可以略過此 Mesos 安裝步驟。
否則,為 Spark 安裝 Mesos 與為其他架構使用而安裝 Mesos 沒有不同。您可以從原始碼或使用預建封裝安裝 Mesos。
從原始碼
若要從原始碼安裝 Apache Mesos,請執行以下步驟
注意:如果您想在未將其安裝到系統上的預設路徑(例如,如果您沒有安裝管理員權限)的情況下執行 Mesos,請將 --prefix
選項傳遞給 configure
,以告訴它安裝位置。例如,傳遞 --prefix=/home/me/mesos
。預設前置詞為 /usr/local
。
第三方套件
Apache Mesos 專案只發布原始碼版本,不發布二進制封裝。但其他第三方專案會發布二進制版本,這可能有助於設定 Mesos。
其中之一是 Mesosphere。若要使用 Mesosphere 提供的二進制版本安裝 Mesos
- 從 下載頁面 下載 Mesos 安裝封裝
- 請依照他們的說明進行安裝和設定
Mesosphere 安裝文件建議設定 ZooKeeper 來處理 Mesos 主控端故障轉移,但 Mesos 也可以使用單一主控端在沒有 ZooKeeper 的情況下執行。
驗證
若要驗證 Mesos 集群是否已準備好供 Spark 使用,請在埠 :5050
瀏覽 Mesos 主控端 webui。確認所有預期的機器都出現在代理人標籤中。
將 Spark 連接到 Mesos
若要從 Spark 使用 Mesos,您需要一個 Spark 二進制套件,且該套件必須放置在 Mesos 可存取的位置,以及一個設定為連線到 Mesos 的 Spark 驅動程式。
或者,您也可以在所有 Mesos 代理中安裝 Spark,並設定 spark.mesos.executor.home
(預設為 SPARK_HOME) 來指向該位置。
驗證 Mesos
當啟用 Mesos Framework 驗證時,有必要提供一個主體和密碼,以便 Spark 對 Mesos 進行驗證。每個 Spark 工作都會以獨立的 Framework 註冊到 Mesos。
根據您的部署環境,您可能希望建立一組單一的 Framework 憑證,供所有使用者共用,或為每個使用者建立 Framework 憑證。建立和管理 Framework 憑證應遵循 Mesos 驗證文件。
Framework 憑證可以根據您的部署環境和安全性需求以各種方式指定。最簡單的方法是在 Spark 設定中直接指定 spark.mesos.principal
和 spark.mesos.secret
值。或者,您可以透過指定 spark.mesos.principal.file
和 spark.mesos.secret.file
來間接指定這些值,這些設定會指向包含主體和密碼的檔案。這些檔案必須是 UTF-8 編碼的純文字檔案。結合適當的檔案所有權和模式/ACL,這提供了更安全的憑證指定方式。
此外,如果您偏好使用環境變數,您可以透過環境變數指定上述所有內容,環境變數名稱只是將設定值大寫,並將 .
替換為 _
,例如 SPARK_MESOS_PRINCIPAL
。
憑證規格偏好順序
請注意,如果您指定多種取得憑證的方式,則會套用以下優先順序。Spark 會使用找到的第一個有效值,而任何後續值都會被忽略
spark.mesos.principal
組態設定SPARK_MESOS_PRINCIPAL
環境變數spark.mesos.principal.file
組態設定SPARK_MESOS_PRINCIPAL_FILE
環境變數
機密套用等效順序。基本上,我們偏好直接指定組態,而不是間接透過檔案指定,而且我們偏好使用組態設定而非環境變數。
部署到在安全通訊端點上執行的 Mesos
如果您要將 Spark 應用程式部署到以安全模式執行的 Mesos 群集,則需要設定一些環境變數。
LIBPROCESS_SSL_ENABLED=true
啟用 SSL 通訊LIBPROCESS_SSL_VERIFY_CERT=false
驗證 SSL 憑證LIBPROCESS_SSL_KEY_FILE=pathToKeyFile.key
金鑰路徑LIBPROCESS_SSL_CERT_FILE=pathToCRTFile.crt
要使用的憑證檔案
所有選項都可以在 http://mesos.apache.org/documentation/latest/ssl/ 找到
然後,提交會如以下的「用戶端模式」或「群集模式」中所述發生
上傳 Spark 套件
當 Mesos 首次在 Mesos 代理程式上執行工作時,該代理程式必須具備 Spark 二進制套件,才能執行 Spark Mesos 執行器後端。Spark 套件可以儲存在任何 Hadoop 可存取的 URI,包括透過 http://
的 HTTP、透過 Amazon Simple Storage Service 的 s3n://
,或透過 hdfs://
的 HDFS。
若要使用預先編譯的套件
- 從 Spark 下載頁面 下載 Spark 二進制套件
- 上傳至 hdfs/http/s3
若要儲存在 HDFS,請使用 Hadoop fs put 指令:hadoop fs -put spark-3.5.1.tar.gz /path/to/spark-3.5.1.tar.gz
或者,如果您使用的是自訂編譯版本的 Spark,則需要使用 Spark 原始碼 tarball/checkout 中包含的 dev/make-distribution.sh
腳本建立套件。
- 使用此處的說明下載並建置 Spark
- 使用
./dev/make-distribution.sh --tgz
建立二進位套件。 - 上傳封存檔至 http/s3/hdfs
使用 Mesos 主控台網址
Mesos 的主控端網址格式為 mesos://host:5050
(單主控端 Mesos 叢集),或 mesos://zk://host1:2181,host2:2181,host3:2181/mesos
(使用 ZooKeeper 的多主控端 Mesos 叢集)。
用戶端模式
在用戶端模式中,Spark Mesos 架構會直接在用戶端機器上啟動,並等待驅動程式輸出。
驅動程式需要在 spark-env.sh
中進行一些設定,才能與 Mesos 正確互動
- 在
spark-env.sh
中設定一些環境變數export MESOS_NATIVE_JAVA_LIBRARY=<path to libmesos.so>
。此路徑通常為<prefix>/lib/libmesos.so
,其中預設前置詞為/usr/local
。請參閱上述 Mesos 安裝說明。在 Mac OS X 上,此函式庫稱為libmesos.dylib
,而非libmesos.so
。export SPARK_EXECUTOR_URI=<URL of spark-3.5.1.tar.gz uploaded above>
.
- 同時將
spark.executor.uri
設定為<URL of spark-3.5.1.tar.gz>
。
現在,當針對叢集啟動 Spark 應用程式時,請在建立 SparkContext
時,傳遞 mesos://
URL 作為主控端。例如
val conf = new SparkConf()
.setMaster("mesos://HOST:5050")
.setAppName("My app")
.set("spark.executor.uri", "<path to spark-3.5.1.tar.gz uploaded above>")
val sc = new SparkContext(conf)
(您也可以使用 spark-submit
,並在 conf/spark-defaults.conf 檔案中設定 spark.executor.uri
。)
當執行 shell 時,spark.executor.uri
參數會從 SPARK_EXECUTOR_URI
繼承,因此不需要重複傳遞為系統屬性。
./bin/spark-shell --master mesos://host:5050
叢集模式
Spark on Mesos 也支援叢集模式,其中驅動程式會在叢集中啟動,而用戶端可以從 Mesos 網路使用者介面中找到驅動程式的結果。
若要使用叢集模式,您必須透過 sbin/start-mesos-dispatcher.sh
指令碼在叢集中啟動 MesosClusterDispatcher
,並傳遞 Mesos 主控端 URL(例如:mesos://host:5050)。此動作會將 MesosClusterDispatcher
作為在主機上執行的守護程式啟動。請注意,MesosClusterDispatcher
不支援驗證。您應確保對其的所有網路存取都受到保護(預設為 7077 埠)。
設定 Mesos 代理程式設定屬性(需要 mesos 版本 >= 1.4),--conf spark.mesos.proxy.baseURL=https://127.0.0.1:5050
在啟動調度器時,每個驅動程式的 mesos sandbox URI 會新增到 mesos 調度器 UI。
如果您想使用 Marathon 執行 MesosClusterDispatcher
,您需要在前台執行 MesosClusterDispatcher
(例如:./bin/spark-class org.apache.spark.deploy.mesos.MesosClusterDispatcher
)。請注意,MesosClusterDispatcher
尚未支援多個 HA 執行個體。
MesosClusterDispatcher
也支援將復原狀態寫入 Zookeeper。這將允許 MesosClusterDispatcher
能夠在重新啟動時復原所有已提交和正在執行的容器。為了啟用此復原模式,您可以在 spark-env 中設定 SPARK_DAEMON_JAVA_OPTS,方法是設定 spark.deploy.recoveryMode
和相關的 spark.deploy.zookeeper.* 設定。有關這些設定的更多資訊,請參閱設定 文件。
您也可以在 spark-env 中設定環境變數 SPARK_DAEMON_CLASSPATH,在類別路徑中指定 MesosClusterDispatcher
所需的任何其他 jar。
從客戶端,您可以執行 spark-submit
並指定主控項 URL 到 MesosClusterDispatcher
的 URL(例如:mesos://dispatcher:7077),以將工作提交到 Mesos 群集。您可以在 Spark 群集 Web UI 上查看驅動程式狀態。
例如
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master mesos://207.184.161.138:7077 \
--deploy-mode cluster \
--supervise \
--executor-memory 20G \
--total-executor-cores 100 \
http://path/to/examples.jar \
1000
請注意,傳遞給 spark-submit 的 jar 或 python 檔案應該是 Mesos 代理程式可以存取的 URI,因為 Spark 驅動程式不會自動上傳本機 jar。
Mesos 執行模式
Spark 可以透過兩種模式在 Mesos 上執行:「粗粒度」(預設)和「細粒度」(已棄用)。
粗粒度
在「粗粒度」模式中,每個 Spark 執行器都以單一 Mesos 工作執行。Spark 執行器的大小依下列設定變數而定
- 執行器記憶體:
spark.executor.memory
- 執行器核心:
spark.executor.cores
- 執行器數量:
spark.cores.max
/spark.executor.cores
請參閱 Spark 設定 頁面,以取得詳細資料和預設值。
執行器會在應用程式啟動時被急切地建立,直到達到 spark.cores.max
。如果您未設定 spark.cores.max
,Spark 應用程式將會消耗 Mesos 提供給它的所有資源,因此,我們當然會敦促您在任何類型的多租戶叢集中設定這個變數,包括執行多個並發 Spark 應用程式的叢集。
排程器會在 Mesos 給它的報價上輪詢啟動執行器,但沒有擴散保證,因為 Mesos 沒有在報價串流上提供此類保證。
在此模式中,如果使用者提供了埠分配,Spark 執行器將會遵守埠分配。特別是,如果使用者在 Spark 組態中定義 spark.blockManager.port
,mesos 排程器將會檢查可用的報價,以取得包含埠號的有效埠範圍。如果沒有此類範圍,它將不會啟動任何工作。如果使用者未對埠號施加限制,則會像往常一樣使用臨時埠。如果使用者定義埠,這個遵守埠的實作表示每部主機一個工作。在未來的網路中,將會支援網路隔離。
粗粒度模式的好處是啟動開銷低很多,但代價是為應用程式的完整期間保留 Mesos 資源。若要設定您的工作以動態調整其資源需求,請參閱 動態分配。
細粒度(已棄用)
注意:自 Spark 2.0.0 起,精細粒度模式已不建議使用。考慮使用 動態分配 以取得部分好處。如需完整說明,請參閱 SPARK-11857
在「精細粒度」模式中,Spark 執行器內的每個 Spark 工作都會作為一個獨立的 Mesos 工作執行。這允許 Spark(和其他架構)的多個執行個體以非常精細的粒度共用核心,其中每個應用程式在啟動和關閉時會取得更多或更少核心,但它會帶來啟動每個工作的額外開銷。此模式可能不適合低延遲需求,例如互動式查詢或提供網路請求。
請注意,雖然精細粒度的 Spark 工作會在終止時放棄核心,但它們不會放棄記憶體,因為 JVM 沒有將記憶體還給作業系統。執行器在閒置時也不會終止。
若要以精細模式執行,請在 SparkConf 中將 spark.mesos.coarse
屬性設定為 false
conf.set("spark.mesos.coarse", "false")
您也可以使用 spark.mesos.constraints
來設定 Mesos 資源提供之基於屬性的限制。預設情況下,將會接受所有資源提供。
conf.set("spark.mesos.constraints", "os:centos7;us-east-1:false")
例如,假設 spark.mesos.constraints
設定為 os:centos7;us-east-1:false
,則會檢查資源提供是否符合這兩個限制,然後才會接受並開始執行新的執行器。
若要限制驅動程式任務執行的位置,請使用 spark.mesos.driver.constraints
Mesos Docker 支援
Spark 可以透過在 SparkConf 中設定屬性 spark.mesos.executor.docker.image
來使用 Mesos Docker 容器化程式。
所使用的 Docker 映像必須已經包含適當版本的 Spark,或者您可以讓 Mesos 透過一般方法下載 Spark。
需要 Mesos 版本 0.20.1 或更新版本。
請注意,預設情況下,如果映像已經存在於代理程式上,Mesos 代理程式不會提取映像。如果您使用可變動映像標籤,則可以將 spark.mesos.executor.docker.forcePullImage
設定為 true
,以強制代理程式在執行執行器之前始終提取映像。強制提取映像僅在 Mesos 版本 0.22 及以上版本中可用。
與 Hadoop 並行執行
您可以將 Spark 和 Mesos 與現有的 Hadoop 群集一起執行,只要將它們作為機器上的獨立服務啟動即可。若要從 Spark 存取 Hadoop 資料,需要完整的 hdfs://
URL(通常為 hdfs://<namenode>:9000/path
,但您可以在 Hadoop Namenode 網頁 UI 中找到正確的 URL)。
此外,也可以在 Mesos 上執行 Hadoop MapReduce,以改善這兩者之間的資源隔離和共用。在這種情況下,Mesos 將作為統一的排程器,將核心分配給 Hadoop 或 Spark,而不是讓它們透過每個節點上的 Linux 排程器共用資源。請參閱 Mesos 上的 Hadoop。
在任何情況下,HDFS 都會與 Hadoop MapReduce 分開執行,而不會透過 Mesos 排程。
使用 Mesos 進行動態資源配置
Mesos 僅支援使用精細模式進行動態配置,這可以根據應用程式的統計資料調整執行器的數量。有關一般資訊,請參閱 動態資源配置。
要使用的外部 Shuffle 服務為 Mesos Shuffle 服務。它在 Shuffle 服務之上提供 Shuffle 資料清理功能,因為 Mesos 尚未支援通知其他架構終止。若要啟動它,請在所有代理節點上執行 $SPARK_HOME/sbin/start-mesos-shuffle-service.sh
,並將 spark.shuffle.service.enabled
設為 true
。
也可以透過 Marathon 來達成此目的,使用獨特的 host 約束和下列指令:./bin/spark-class org.apache.spark.deploy.mesos.MesosExternalShuffleService
。
設定
請參閱 設定頁面 以取得 Spark 設定資訊。下列設定專門針對 Mesos 上的 Spark。
Spark 屬性
屬性名稱 | 預設值 | 意義 | 版本 |
---|---|---|---|
spark.mesos.coarse |
true |
如果設為 true ,會在「粗粒度」共用模式中執行 Mesos 群集,其中 Spark 會在每部機器上取得一個長駐 Mesos 工作。如果設為 false ,會在「細粒度」共用模式中執行 Mesos 群集,其中會為每個 Spark 工作建立一個 Mesos 工作。詳細資訊請參閱 「Mesos 執行模式」。
|
0.6.0 |
spark.mesos.extra.cores |
0 |
設定執行器要宣告的額外核心數。這不會導致配置更多核心。而是表示執行器會「假裝」它有更多核心,以便驅動程式會傳送更多工作給它。使用這個設定來增加並行度。此設定僅用於 Mesos 粗粒度模式。 | 0.6.0 |
spark.mesos.mesosExecutor.cores |
1.0 |
(僅限細粒度模式)要給予每個 Mesos 執行器的核心數。這不包括用於執行 Spark 工作的核心。換句話說,即使沒有執行任何 Spark 工作,每個 Mesos 執行器仍會佔用在此設定的的核心數。此值可以是小數點數字。 | 1.4.0 |
spark.mesos.executor.docker.image |
(無) |
設定 Spark 執行器將在其中執行的 Docker 映像名稱。選取的映像必須已安裝 Spark,以及相容版本的 Mesos 函式庫。可以在映像中使用 spark.mesos.executor.home 指定 Spark 的安裝路徑;可以使用 spark.executorEnv.MESOS_NATIVE_JAVA_LIBRARY 指定 Mesos 函式庫的安裝路徑。
|
1.4.0 |
spark.mesos.executor.docker.forcePullImage |
false |
強制 Mesos 代理程式擷取 spark.mesos.executor.docker.image 中指定的映像。預設情況下,Mesos 代理程式不會擷取已快取的映像。
|
2.1.0 |
spark.mesos.executor.docker.parameters |
(無) |
設定自訂參數清單,這些參數會在使用 Docker 容器化程式在 Mesos 上啟動 Spark 執行器時傳遞給 docker run 指令。此屬性的格式為以逗號分隔的鍵值配對清單。範例
key1=val1,key2=val2,key3=val3 |
2.2.0 |
spark.mesos.executor.docker.volumes |
(無) |
設定將掛載到 Docker 映像的磁碟區清單,此映像是使用 spark.mesos.executor.docker.image 設定的。此屬性的格式為以逗號分隔的對應清單,遵循傳遞給 docker run -v 的格式。它們採用下列格式
[host_path:]container_path[:ro|:rw] |
1.4.0 |
spark.mesos.task.labels |
(無) | 設定要新增到每個工作項的 Mesos 標籤。標籤是自由形式的鍵值配對。鍵值配對應以冒號分隔,並使用逗號列出多個標籤。如果標籤包含冒號或逗號,可以使用反斜線進行跳脫。例如:key:value,key2:a\:b。 | 2.2.0 |
spark.mesos.executor.home |
驅動程式端的 SPARK_HOME |
設定 Spark 安裝在 Mesos 中執行器的目錄。預設情況下,執行器只會使用驅動程式的 Spark 主目錄,而執行器可能無法看到該目錄。請注意,只有在未透過 spark.executor.uri 指定 Spark 二進位套件時,此設定才有意義。
|
1.1.1 |
spark.mesos.executor.memoryOverhead |
執行器記憶體 * 0.10,最小值為 384 |
為每個執行器分配的額外記憶體量,以 MiB 為單位。預設情況下,額外記憶體會大於 384 或 spark.executor.memory 的 10%。如果設定,最後的額外記憶體會是這個值。
|
1.1.1 |
spark.mesos.driver.memoryOverhead |
驅動程式記憶體 * 0.10,最小值為 384 |
分配給驅動程式的額外記憶體量,以 MB 為單位。預設情況下,額外記憶體會大於 384 或 spark.driver.memory 的 10%。如果設定,最後的額外記憶體會是這個值。僅適用於叢集模式。
|
|
spark.mesos.uris |
(無) | 當 Mesos 啟動驅動程式或執行器時,要下載到沙盒的 URI 清單,以逗號分隔。這適用於粗略模式和細緻模式。 | 1.5.0 |
spark.mesos.principal |
(無) | 設定 Spark 架構用來向 Mesos 進行驗證的身分。您也可以透過環境變數 `SPARK_MESOS_PRINCIPAL` 指定此設定。 | 1.5.0 |
spark.mesos.principal.file |
(無) | 設定包含身分的檔案,Spark 架構會用此身分向 Mesos 進行驗證。允許在更注重安全性部署中間接指定身分。此檔案必須由啟動工作項的使用者可讀取,且必須是 UTF-8 編碼的純文字。您也可以透過環境變數 `SPARK_MESOS_PRINCIPAL_FILE` 指定此設定。 | 2.4.0 |
spark.mesos.secret |
(無) | 設定 Spark 架構用來向 Mesos 進行驗證的機密。例如,在向登錄驗證時使用。您也可以透過環境變數 `SPARK_MESOS_SECRET` 指定此設定。 | 1.5.0 |
spark.mesos.secret.file |
(無) | 設定包含機密的檔案,Spark 架構會用此機密向 Mesos 進行驗證。例如,在向登錄驗證時使用。允許在更注重安全性部署中間接指定機密。此檔案必須由啟動工作項的使用者可讀取,且必須是 UTF-8 編碼的純文字。您也可以透過環境變數 `SPARK_MESOS_SECRET_FILE` 指定此設定。 | 2.4.0 |
spark.mesos.role |
* |
設定此 Spark 架構在 Mesos 中的角色。角色用於 Mesos 中的保留和資源權重共享。 | 1.5.0 |
spark.mesos.constraints |
(無) |
基於屬性的 mesos 資源提供約束。預設情況下,所有資源提供都會被接受。此設定僅適用於執行器。有關屬性的更多資訊,請參閱 Mesos 屬性與資源。
|
1.5.0 |
spark.mesos.driver.constraints |
(無) |
與 spark.mesos.constraints 相同,但適用於透過分配器啟動時驅動程式。預設情況下,所有具有足夠資源的提供都會被接受。
|
2.2.1 |
spark.mesos.containerizer |
docker |
這只會影響 docker 容器,且必須是「docker」或「mesos」之一。Mesos 支援兩種 docker 容器化器:「docker」容器化器,以及偏好的「mesos」容器化器。在此處閱讀更多資訊:http://mesos.apache.org/documentation/latest/container-image/ | 2.1.0 |
spark.mesos.driver.webui.url |
(無) |
設定 Spark Mesos 驅動程式 webui_url 以與架構互動。如果未設定,它將指向 Spark 的內部網路使用者介面。 | 2.0.0 |
spark.mesos.driver.labels |
(無) |
要新增到驅動程式的 Mesos 標籤。有關格式資訊,請參閱 spark.mesos.task.labels 。
|
2.3.0 |
spark.mesos.driver.secret.values 、spark.mesos.driver.secret.names 、spark.mesos.executor.secret.values 、spark.mesos.executor.secret.names
|
(無) |
秘密由其內容和目的地指定。這些屬性指定秘密的內容。若要指定秘密的目的地,請參閱下方的儲存格。 您可以透過 (1) 值或 (2) 參考來指定秘密的內容。
(1) 若要依據值指定機密,請設定 spark.mesos.driver.secret.values=guessme
(2) 若要指定已置於機密儲存庫中的機密,請透過設定 spark.mesos.driver.secret.names=password 注意:若要使用機密儲存庫,請確定已透過自訂 SecretResolver 模組 將其與 Mesos 整合。 若要指定多個機密,請提供逗號分隔清單 spark.mesos.driver.secret.values=guessme,passwd123或 spark.mesos.driver.secret.names=password1,password2 |
2.3.0 |
spark.mesos.driver.secret.envkeys 、spark.mesos.driver.secret.filenames 、spark.mesos.executor.secret.envkeys 、spark.mesos.executor.secret.filenames ,
|
(無) |
機密由其內容和目的地指定。這些屬性指定機密的目的地。若要指定機密的內容,請參閱上方的儲存格。 您可以在驅動程式或執行器中將機密的目的地指定為 (1) 環境變數或 (2) 檔案。
(1) 若要建立基於環境的機密,請設定 spark.mesos.driver.secret.envkeys=PASSWORD
(2) 若要建立基於檔案的機密,請設定 spark.mesos.driver.secret.filenames=pwdfile 路徑相對於容器的工作目錄。絕對路徑必須已存在。注意:基於檔案的機密需要自訂 SecretResolver 模組。 若要指定對應多個機密的環境變數或檔名,請提供逗號分隔清單 spark.mesos.driver.secret.envkeys=PASSWORD1,PASSWORD2或 spark.mesos.driver.secret.filenames=pwdfile1,pwdfile2 |
2.3.0 |
spark.mesos.driverEnv.[EnvironmentVariableName] |
(無) |
這只會影響在叢集模式下提交的驅動程式。將 EnvironmentVariableName 指定的環境變數新增至驅動程式處理程序。使用者可以指定多個,以設定多個環境變數。 | 2.1.0 |
spark.mesos.dispatcher.webui.url |
(無) |
設定 Spark Mesos dispatcher webui_url,以與架構互動。如果未設定,它將指向 Spark 的內部 Web UI。 | 2.0.0 |
spark.mesos.dispatcher.driverDefault.[PropertyName] |
(無) |
設定透過 dispatcher 提交的驅動程式的預設屬性。例如,spark.mesos.dispatcher.driverProperty.spark.executor.memory=32g 會導致在叢集模式下提交的所有驅動程式的執行器在 32g 容器中執行。 | 2.1.0 |
spark.mesos.dispatcher.historyServer.url |
(無) |
設定 歷程記錄伺服器 的 URL。然後,dispatcher 會將每個驅動程式連結至其在歷程記錄伺服器中的項目。 | 2.1.0 |
spark.mesos.dispatcher.queue |
(無) |
設定應用程式提交到的 dispatcher 佇列名稱。指定的佇列必須使用 spark.mesos.dispatcher.queue.[QueueName] 新增到 dispatcher。如果未指定佇列,則應用程式會提交到優先權為 0.0 的「預設」佇列。
|
3.1.0 |
spark.mesos.dispatcher.queue.[QueueName] |
0.0 |
使用指定的優先權新增一個新的佇列,供提交的驅動程式使用。數字越大,優先權越高。使用者可以指定多個佇列,為 dispatcher 中佇列中的驅動程式定義工作負載管理政策。然後,可以使用 spark.mesos.dispatcher.queue 將驅動程式提交到特定佇列。預設情況下,dispatcher 有單一佇列,優先權為 0.0(無法覆寫)。透過將優先權佇列對應到加權 Mesos 角色,以及在提交應用程式時指定 spark.mesos.role 和 spark.mesos.dispatcher.queue ,可以在驅動程式的整個生命週期中實作一致且全面的工作負載管理政策。例如,使用 URGENT Mesos 角色
spark.mesos.dispatcher.queue.URGENT=1.0 spark.mesos.dispatcher.queue=URGENT spark.mesos.role=URGENT |
3.1.0 |
spark.mesos.gpus.max |
0 |
設定此工作要取得的最大 GPU 資源數。請注意,即使找不到 GPU 資源,執行器仍會啟動,因為此組態只是一個上限,而不是保證的數量。 | 2.1.0 |
spark.mesos.network.name |
(無) |
將容器附加到指定的命名網路。如果此工作是在叢集模式中啟動,也會在指定的命名網路中啟動驅動程式。請參閱 Mesos CNI 文件,以取得更多詳細資料。 | 2.1.0 |
spark.mesos.network.labels |
(無) |
將網路標籤傳遞給 CNI 外掛程式。這是一個以逗號分隔的鍵值對清單,其中每個鍵值對的格式為 key:value。範例
key1:val1,key2:val2請參閱 Mesos CNI 文件,以取得更多詳細資料。 |
2.3.0 |
spark.mesos.fetcherCache.enable |
false |
如果設為 `true`,所有 URI(範例:`spark.executor.uri`、`spark.mesos.uris`)都會被 Mesos Fetcher Cache 快取 | 2.1.0 |
spark.mesos.driver.failoverTimeout |
0.0 |
在驅動程式暫時斷線後,主控端會等待驅動程式重新連線的時間(以秒為單位),然後才會終止驅動程式架構,並終止其所有執行器。預設值為零,表示沒有逾時:如果驅動程式斷線,主控端會立即終止架構。 | 2.3.0 |
spark.mesos.rejectOfferDuration |
120 秒 |
將未使用的資源視為拒絕的時間,作為 `spark.mesos.rejectOfferDurationForUnmetConstraints`、`spark.mesos.rejectOfferDurationForReachedMaxCores` 的備用 | 2.2.0 |
spark.mesos.rejectOfferDurationForUnmetConstraints |
spark.mesos.rejectOfferDuration |
將未滿足約束的未使用的資源視為拒絕的時間 | 1.6.0 |
spark.mesos.rejectOfferDurationForReachedMaxCores |
spark.mesos.rejectOfferDuration |
當達到核心最大數目 spark.cores.max 時,考慮拒絕未使用的資源
|
2.0.0 |
spark.mesos.appJar.local.resolution.mode |
host |
提供支援,讓 `local:///` 架構在叢集模式中參照應用程式 jar 資源。如果使用者使用本機資源 (`local:///path/to/jar`),且未使用設定選項,則預設為 `host`,例如 mesos fetcher 會嘗試從主機的檔案系統取得資源。如果值為 unknown,則會在 dispatcher 記錄檔中印出警告訊息,並預設為 `host`。如果值為 `container`,則在容器中提交 spark 會使用容器路徑中的 jar:`/path/to/jar`。 | 2.4.0 |
疑難排解和除錯
除錯時可以查看的幾個地方
- 埠
:5050
上的 Mesos 主控程式- 代理程式應該會出現在代理程式索引標籤中
- Spark 應用程式應該會出現在架構索引標籤中
- 工作應該會出現在架構的詳細資料中
- 查看失敗工作的 sandbox 的 stdout 和 stderr
- Mesos 記錄檔
- 主控程式和代理程式記錄檔預設都在
/var/log/mesos
中
- 主控程式和代理程式記錄檔預設都在
常見的陷阱
- 無法到達/存取 Spark 組合
- 代理程式必須能夠從您提供的
http://
、hdfs://
或s3n://
URL 下載 Spark 二進位套件
- 代理程式必須能夠從您提供的
- 防火牆阻擋通訊
- 查看有關連線失敗的訊息
- 暫時停用防火牆進行除錯,然後建立適當的孔洞