小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【總結】Spark應用程序的資源分配

 印度阿三17 2019-03-18

執(zhí)行Spark任務,資源分配是很重要的一方面。如果配置不準確,Spark任務將耗費整個集群的機緣導致其他應用程序得不到資源。

怎么去配置Spark任務的executors,cores,memory,有如下幾個因素需要考慮:

  • 數(shù)據(jù)量
  • 任務完成時間點
  • 靜態(tài)或者動態(tài)的資源分配
  • 上下游應用

Spark應用當中術語的基本定義:

  • Partitions : 分區(qū)是大型分布式數(shù)據(jù)集的一小部分。 Spark使用分區(qū)來管理數(shù)據(jù),這些分區(qū)有助于并行化數(shù)據(jù)處理,并且使executor之間的數(shù)據(jù)交換最小化
  • Task:任務是一個工作單元,可以在分布式數(shù)據(jù)集的分區(qū)上運行,并在單個Excutor上執(zhí)行。并行執(zhí)行的單位是任務級別。單個Stage中的Tasks可以并行執(zhí)行
  • Executor:在一個worker節(jié)點上為應用程序創(chuàng)建的JVM,Executor將巡行task的數(shù)據(jù)保存在內(nèi)存或者磁盤中。每個應用都有自己的一些executors,單個節(jié)點可以運行多個Executor,并且一個應用可以跨多節(jié)點。Executor始終伴隨Spark應用執(zhí)行過程,并且以多線程方式運行任務。spark應用的executor個數(shù)可以通過SparkConf或者命令行 –num-executor進行配置
  • Cores:CPU最基本的計算單元,一個CPU可以有一個或者多個core執(zhí)行task任務,更多的core帶來更高的計算效率,Spark中,cores決定了一個executor中并行task的個數(shù)
  • Cluster Manager:cluster manager負責從集群中請求資源

cluster模式執(zhí)行的Spark任務包含了如下步驟:

  1. driver端,SparkContext連接cluster manager(Standalone/Mesos/Yarn)
  2. Cluster Manager在其他應用之間定位資源,只要executor執(zhí)行并且能夠相互通信,可以使用任何Cluster Manager
  3. Spark獲取集群中節(jié)點的Executor,每個應用都能夠有自己的executor處理進程
  4. 發(fā)送應用程序代碼到executor中
  5. SparkContext將Tasks發(fā)送到executors

以上步驟可以清晰看到executors個數(shù)和內(nèi)存設置在spark中的重要作用。

以下將嘗試理解優(yōu)化spark任務的最佳方式:

  1. 靜態(tài)分配:配置值從spark-submit中體現(xiàn)
  2. 動態(tài)分配:從數(shù)據(jù)量和計算需求上衡量資源需求,并在使用后釋放掉,這樣可以讓其他應用重復利用資源

靜態(tài)分配

以下按不同例子討論驗證不同參數(shù)和配置組合

例子1
硬件資源: 6 節(jié)點,每個節(jié)點16 cores, 64 GB 內(nèi)存
每個節(jié)點在計算資源時候,給操作系統(tǒng)和Hadoop的進程預留1core,1GB,所以每個節(jié)點剩下15個core和63GB
內(nèi)存。
core的個數(shù),決定一個executor能夠并發(fā)任務的個數(shù)。所以通常認為,一個executor越多的并發(fā)任務能夠得到更好的性能,但有研究顯示一個應用并發(fā)任務超過5,導致更差的性能。所以core的個數(shù)暫設置為5個。
5個core是表明executor并發(fā)任務的能力,并不是說一個系統(tǒng)有多少個core,即使我們一個CPU有32個core,也設置5個core不變。
executor個數(shù),接下來,一個executor分配 5 core,一個node有15 core,從而我們計算一個node上會有3 executor(15 / 5),然后通過每個node的executor個數(shù)得到整個任務可以分配的executors個數(shù)。
我們有6個節(jié)點,每個節(jié)點3個executor,6 3 = 18個executors,額外預留1個executor給AM,最終要配置17個executors。
最后spark-submit啟動腳本中配置 –num-executors = 17
memory,配置每個executor的內(nèi)存,一個node,3 executor, 63G內(nèi)存可用,所以每個executor可配置內(nèi)存為63 / 3 = 21G
從Spark的內(nèi)存模型角度,Executor占用的內(nèi)存分為兩部分:ExecutorMemory和MemoryOverhead,預留出MemoryOverhead的內(nèi)存量之后,才是ExecutorMemory的內(nèi)存。
MemoryOverhead的計算公式: max(384M, 0.07
spark.executor.memory)

因此 MemoryOverhead值為0.07 * 21G = 1.47G > 384M

最終executor的內(nèi)存配置值為 21G – 1.47 = 19 GB

至此, Cores 5, Executors 17, Executor Memory 19 GB

來源:http://www./content-1-143051.html

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多