簡體   English   中英

使用Spark獨立集群如何在工作節點上管理多個執行者?

[英]How multiple executors are managed on the worker nodes with a Spark standalone cluster?

到目前為止,我只在YARN作為資源管理器的Hadoop集群上使用了Spark。 在這種類型的集群中,我確切地知道要運行多少個執行程序以及資源管理的工作方式。 但是,知道我正在嘗試使用獨立Spark集群,我有些困惑。 糾正我在哪里我錯了。

本文中 ,默認情況下,輔助節點使用該節點的所有內存減去1 GB。 但是我知道通過使用SPARK_WORKER_MEMORY ,我們可以使用更少的內存。 例如,如果節點的總內存為32 GB,但是我指定了16 GB,那么Spark worker是否在該節點上使用的內存不會超過16 GB?

但是執行者呢? 假設我們要在每個節點上運行2個執行程序,是否可以通過在spark-submit期間將執行程序內存指定為SPARK_WORKER_MEMORY一半來實現SPARK_WORKER_MEMORY如果我想在每個節點上運行4個執行程序,可以通過指定執行程序內存為四分之一來實現的SPARK_WORKER_MEMORY

如果是這樣的話,我認為,除了執行程序內存外,我還必須正確指定執行程序核心。 例如,如果我要在一個工作程序上運行4個執行程序,則必須將執行程序核心指定為SPARK_WORKER_CORES的四分之一? 如果我指定一個更大的數字會怎樣? 我的意思是,如果我指定執行程序內存為SPARK_WORKER_MEMORY的四分之一,但是執行程序核心僅是SPARK_WORKER_CORES一半? 在這種情況下,我將讓2或4個執行程序在該節點上運行嗎?

根據我的經驗,這是控制執行程序,內核和內存數量的最佳方法。

  • 核心數:您可以設置所有執行者的核心總數,也可以設置每個執行者的核心數

  • 內存:執行程序單獨的內存

    -總執行者核心數12-執行者核心數2-執行者內存6G

    這將為您提供6個執行器和每個執行器2個內核/ 6G,因此總共需要考慮12個內核和36G

  • 您可以使用以下方式設置驅動程序內存

    -驅動程序內存2G

因此,我自己親自測試了Spark Standalone集群,這就是我注意到的。

  1. 我的直覺是,通過調整執行器內核,可以在一個工人內部運行多個執行器,這的確是正確的。 讓我們說,您的工人有16個核心。 現在,如果您為執行程序指定8個內核,Spark將為每個工作程序運行2個執行程序。

  2. 在一個工作程序中運行多少執行程序還取決於您指定的執行程序內存。 例如,如果工作程序內存為24 GB,並且您要為每個工作程序運行2個執行程序,則不能將執行程序內存指定為大於12 GB。

  3. 通過specifing可選參數的值開始從設備時工人的存儲器可以是有限--memory或通過改變的值SPARK_WORKER_MEMORY 與內核數相同( --cores / SPARK_WORKER_CORES )。

如果希望能夠在獨立Spark集群上運行多個作業,則可以在執行spark-submit時使用spark.cores.max配置屬性。 例如,像這樣。

spark-submit <other parameters> --conf="spark.cores.max=16" <other parameters>

因此,如果您的獨立Spark群集總共允許64個內核,而您的程序僅提供16個內核,則其他Spark作業可以使用剩余的48個內核。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM