在常用的計算框架中,無論是spark、storm、yarn,如何提高并發(fā)量,提高集群的整體吞吐量是需要考慮的問題,其中資源容量規(guī)劃和資源申請,對APP任務(wù)的并行執(zhí)行方面有比較多的影響,下面羅列一下以上計算框架在資源規(guī)劃和資源申請方面的一些類比: 對于整個集群的處理能力來講總是有限的,這個在很多資源管理調(diào)度框架中都有相應(yīng)的總體容量的規(guī)劃,每個APP或者JOB在申請資源執(zhí)行時,也是需要提出多少資源的申請,集群再依照當(dāng)前可用的資源,依據(jù)資源管理任務(wù)調(diào)度機制進行資源的分配和任務(wù)執(zhí)行。資源的規(guī)劃和申請一般都是以CPU和Core為單位。 對于Spark來講,在standalone模式下,集群的整體處理能力依賴于每個節(jié)點的SPARK_WORKER_INSTANCES以及每個Instance的SPARK_WORKER_CORES、SPARK_WORKER_MEMORY,當(dāng)然在配置各節(jié)點資源時需要留出足夠的空間給系統(tǒng)使用;在APP進行資源申請(spark-submit)的時,可以以total-executor-cores指定executor使用的總的核數(shù),以及用每個executor使用的內(nèi)存executor-memory;這樣集群節(jié)點從當(dāng)前可用的work中劃分資源給App,若不指定申請的總核數(shù)量,在沒有申請最大額度的限制下,則會占用當(dāng)前集群所有的剩余cores,直到App運行完成。 Spark是一個core運行一個task,所以增加App申請的cores可以增加task的并行執(zhí)行能力,但是也要綜合平衡每個task的可用內(nèi)存滿足需求。 下圖是spark 應(yīng)用在standalone模式下的執(zhí)行流程,
對于Yarn來講,集群的整體處理能力依賴于NodeManager的資源配置,NodeManager可用的核數(shù)nodemanager.cpu-vcores,以及可用的內(nèi)存nodemanager.memory-mb;在yarn中是以container為單位進行資源調(diào)度的,任務(wù)的資源申請都不能超過container的限制,包括container最大內(nèi)存scheduler.maxinum-allocation-mb,最小內(nèi)存限制scheduler.mininum-allocation-mb ,最大核數(shù)限制scheduler.maxinum-allocation-vcores,最小核數(shù)限制scheduler.mininum-allocation-vcores。 Yarn是一種資源管理任務(wù)調(diào)度框架,在container中支持MapReduce、Spark的計算; MapReduce運算,可以設(shè)置map和reduce的內(nèi)存以及core的使用量, mapreduce.map.memory.mb,mapreduce.map.cpu.vcores,mapreduce.reduce.memory.mb,mapreduce.reduce.cpu.vcores。 Spark的yarn部署方式下,在提交App時,可以通過spark-submit聲明需要的executors 數(shù)量num-executors(SPARK_EXECUTOR_INSTANCES),以及每個executor的核數(shù)executor-cores(SPARK_EXECUTOR_CORES)和內(nèi)存大小executor-memory。executor是在container中啟動的進程實例,區(qū)別于MR的container資源在每個task結(jié)束后,就進行回收釋放,spark中的Container的占用一直到APP運行結(jié)束后再進行回收。 對于Storm來講,并行處理能力依賴于拓?fù)鋞opology的Work數(shù)量(每個work都屬于一個特征的topology)、executor數(shù)量、task數(shù)量,每個Supervisor可以運行多個work,每個work對應(yīng)單獨的端口。Executor是產(chǎn)生于work進程內(nèi)部的線程,執(zhí)行同一個component的一個或多個task,而task用于進行實際的數(shù)據(jù)處理,在Topology的生命周期中,每個組件的task數(shù)目是不會發(fā)生變化的,而executor的數(shù)目卻不一定,executor數(shù)目小于等于task的數(shù)目,默認(rèn)情況下,二者是相等的?梢杂泻芏嗟胤絹碓O(shè)置。因此提高并發(fā)量,主要從Topology的work、executor、task數(shù)量上來考慮,來增加并發(fā)性。 |