spark2-submit參數(shù)及調(diào)優(yōu)

“將欲取天下而為之俏橘,吾見(jiàn)其不得已允华。
天下神器,不可為也寥掐。
為者敗之靴寂,執(zhí)者失之。
故物或行或隨召耘;或噓或吹百炬,或強(qiáng)或羸,或挫或隳污它。
是以圣人去甚剖踊,去奢庶弃,去泰〉鲁海”[1]

本文以spark2.3.0版本(on YARN)為主歇攻,可以移步spark2.3.0官方了解更多。
你可以通過(guò):

spark2-submit --help

來(lái)查看詳細(xì)的參數(shù)配置說(shuō)明圃验。

spark2-submit  \
  --master yarn \
  --deploy-mode cluster \
  --num-executors 48 \
  --driver-memory 2g \
  --executor-memory 7g \
  --executor-cores 3 \
  /home/data/demo/spark/sparkwordcount.jar \
  --class com.cgoshine.sh.demo.SparkWordCount  \
  [application-arguments]

--master

master url 含義
local 使用1個(gè)worker線程在本地運(yùn)行spark應(yīng)用程序
local[k] 使用k個(gè)worker線程在本地運(yùn)行spark應(yīng)用程序
local[*] 使用剩余可用的所有worker線程在本地運(yùn)行spark應(yīng)用程序
spark://host:port 連接到Spark Standalone集群掉伏,以便在該集群上運(yùn)行Spark應(yīng)用程序
yarn Connect to a YARN cluster in client or cluster mode depending on the value of --deploy-mode. The cluster location will be found based on the HADOOP_CONF_DIR or YARN_CONF_DIR variable.

Spark使用下面幾種URI來(lái)處理文件的傳播:

  • file:// 使用file://和絕對(duì)路徑,是由driver的HTTP server來(lái)提供文件服務(wù)澳窑,各個(gè)executor從driver上拉回文件斧散。
  • hdfs:, http:, https:, ftp: executor直接從URL拉回文件
  • local: executor本地本身存在的文件,不需要拉回摊聋;也可以是通過(guò)NFS網(wǎng)絡(luò)共享的文件鸡捐。

其他參數(shù)說(shuō)明:

參數(shù) 含義
--name 應(yīng)用程序名稱
--proxy-user 模擬提交作業(yè)的用戶
--conf 以key=value的方式對(duì)其他參數(shù)進(jìn)行配置,例子見(jiàn)文末麻裁。
--queue yarn-only,提交應(yīng)用程序給哪個(gè)YARN的隊(duì)列箍镜,默認(rèn)是default隊(duì)列
--num-executors yarn-only,啟動(dòng)executor的數(shù)量,默認(rèn)2個(gè)煎源。
--executor-cores yarn-only,每個(gè)executor使用的內(nèi)核數(shù)色迂,默認(rèn)1個(gè)。
--archives ARCHIVES yarn-only,被每個(gè)executor提取到工作目錄的檔案列表手销,用逗號(hào)隔開(kāi)歇僧。提交python作業(yè)的時(shí)候其依賴的包可以用這種形式。
--driver-memory driver內(nèi)存大小锋拖,默認(rèn)512M
--executor-memory executor內(nèi)存大小诈悍,默認(rèn)1G
--verbose 打印debug信息,生成更詳細(xì)的運(yùn)行信息以做參考兽埃,可以知道配置是如何加載的侥钳。

資源參數(shù)調(diào)優(yōu)

Spark資源參數(shù)調(diào)優(yōu),其實(shí)主要就是對(duì)Spark運(yùn)行過(guò)程中各個(gè)使用資源的地方柄错,通過(guò)調(diào)節(jié)各種參數(shù)舷夺,來(lái)優(yōu)化資源使用的效率,從而提升Spark作業(yè)的執(zhí)行性能鄙陡。

參數(shù) 說(shuō)明 優(yōu)化建議
num-executors 該參數(shù)用于設(shè)置Spark作業(yè)總共要用多少個(gè)Executor進(jìn)程來(lái)執(zhí)行冕房。Driver在向YARN集群管理器申請(qǐng)資源時(shí),YARN集群管理器會(huì)盡可能按照你的設(shè)置來(lái)在集群的各個(gè)工作節(jié)點(diǎn)上趁矾,啟動(dòng)相應(yīng)數(shù)量的Executor進(jìn)程耙册。這個(gè)參數(shù)非常之重要,如果不設(shè)置的話毫捣,默認(rèn)只會(huì)給你啟動(dòng)少量的Executor進(jìn)程详拙,此時(shí)你的Spark作業(yè)的運(yùn)行速度是非常慢的帝际。 參數(shù)調(diào)優(yōu)建議:每個(gè)Spark作業(yè)的運(yùn)行一般設(shè)置50~100個(gè)左右的Executor進(jìn)程比較合適,設(shè)置太少或太多的Executor進(jìn)程都不好饶辙。設(shè)置的太少蹲诀,無(wú)法充分利用集群資源;設(shè)置的太多的話弃揽,大部分隊(duì)列可能無(wú)法給予充分的資源脯爪。
executor-memory 參數(shù)說(shuō)明:該參數(shù)用于設(shè)置每個(gè)Executor進(jìn)程的內(nèi)存。Executor內(nèi)存的大小矿微,很多時(shí)候直接決定了Spark作業(yè)的性能痕慢,而且跟常見(jiàn)的JVM OOM異常,也有直接的關(guān)聯(lián)涌矢。 參數(shù)調(diào)優(yōu)建議:每個(gè)Executor進(jìn)程的內(nèi)存設(shè)置4G-8G較為合適掖举。但是這只是一個(gè)參考值,具體的設(shè)置還是得根據(jù)不同部門的資源隊(duì)列來(lái)定娜庇∷危可以看看自己團(tuán)隊(duì)的資源隊(duì)列的最大內(nèi)存限制是多少,num-executors乘以executor-memory名秀,是不能超過(guò)隊(duì)列的最大內(nèi)存量的励负。此外,如果你是跟團(tuán)隊(duì)里其他人共享這個(gè)資源隊(duì)列匕得,那么申請(qǐng)的內(nèi)存量最好不要超過(guò)資源隊(duì)列最大總內(nèi)存的1/3~1/2熄守,避免你自己的Spark作業(yè)占用了隊(duì)列所有的資源,導(dǎo)致別的同學(xué)的作業(yè)無(wú)法運(yùn)行耗跛。
executor-cores 該參數(shù)用于設(shè)置每個(gè)Executor進(jìn)程的CPU core數(shù)量。這個(gè)參數(shù)決定了每個(gè)Executor進(jìn)程并行執(zhí)行task線程的能力攒发。因?yàn)槊總€(gè)CPU core同一時(shí)間只能執(zhí)行一個(gè)task線程调塌,因此每個(gè)Executor進(jìn)程的CPU core數(shù)量越多,越能夠快速地執(zhí)行完分配給自己的所有task線程惠猿。 Executor的CPU core數(shù)量設(shè)置為2~4個(gè)較為合適羔砾。同樣得根據(jù)不同部門的資源隊(duì)列來(lái)定,可以看看自己的資源隊(duì)列的最大CPU core限制是多少偶妖,再依據(jù)設(shè)置的Executor數(shù)量姜凄,來(lái)決定每個(gè)Executor進(jìn)程可以分配到幾個(gè)CPU core。同樣建議趾访,如果是跟他人共享這個(gè)隊(duì)列态秧,那么num-executors * executor-cores不要超過(guò)隊(duì)列總CPU core的1/3~1/2左右比較合適,也是避免影響其他同學(xué)的作業(yè)運(yùn)行扼鞋。
driver-memory 該參數(shù)用于設(shè)置Driver進(jìn)程的內(nèi)存申鱼。 Driver的內(nèi)存通常來(lái)說(shuō)不設(shè)置愤诱,或者設(shè)置1G左右應(yīng)該就夠了。唯一需要注意的一點(diǎn)是捐友,如果需要使用collect算子將RDD的數(shù)據(jù)全部拉取到Driver上進(jìn)行處理淫半,那么必須確保Driver的內(nèi)存足夠大,否則會(huì)出現(xiàn)OOM內(nèi)存溢出的問(wèn)題匣砖。
spark.default.parallelism 該參數(shù)用于設(shè)置每個(gè)stage的默認(rèn)task數(shù)量科吭。這個(gè)參數(shù)極為重要,如果不設(shè)置可能會(huì)直接影響你的Spark作業(yè)性能猴鲫。 Spark作業(yè)的默認(rèn)task數(shù)量為500~1000個(gè)較為合適对人。很多同學(xué)常犯的一個(gè)錯(cuò)誤就是不去設(shè)置這個(gè)參數(shù),那么此時(shí)就會(huì)導(dǎo)致Spark自己根據(jù)底層HDFS的block數(shù)量來(lái)設(shè)置task的數(shù)量变隔,默認(rèn)是一個(gè)HDFS block對(duì)應(yīng)一個(gè)task规伐。通常來(lái)說(shuō),Spark默認(rèn)設(shè)置的數(shù)量是偏少的(比如就幾十個(gè)task)匣缘,如果task數(shù)量偏少的話猖闪,就會(huì)導(dǎo)致你前面設(shè)置好的Executor的參數(shù)都前功盡棄。試想一下肌厨,無(wú)論你的Executor進(jìn)程有多少個(gè)培慌,內(nèi)存和CPU有多大,但是task只有1個(gè)或者10個(gè)柑爸,那么90%的Executor進(jìn)程可能根本就沒(méi)有task執(zhí)行吵护,也就是白白浪費(fèi)了資源!因此Spark官網(wǎng)建議的設(shè)置原則是表鳍,設(shè)置該參數(shù)為num-executors * executor-cores的2~3倍較為合適备徐,比如Executor的總CPU core數(shù)量為300個(gè),那么設(shè)置1000個(gè)task是可以的饼煞,此時(shí)可以充分地利用Spark集群的資源身腻。
spark.storage.memoryFraction 該參數(shù)用于設(shè)置RDD持久化數(shù)據(jù)在Executor內(nèi)存中能占的比例,默認(rèn)是0.6厘熟。也就是說(shuō)屯蹦,默認(rèn)Executor 60%的內(nèi)存,可以用來(lái)保存持久化的RDD數(shù)據(jù)绳姨。根據(jù)你選擇的不同的持久化策略登澜,如果內(nèi)存不夠時(shí),可能數(shù)據(jù)就不會(huì)持久化飘庄,或者數(shù)據(jù)會(huì)寫入磁盤 如果Spark作業(yè)中脑蠕,有較多的RDD持久化操作,該參數(shù)的值可以適當(dāng)提高一些跪削,保證持久化的數(shù)據(jù)能夠容納在內(nèi)存中空郊。避免內(nèi)存不夠緩存所有的數(shù)據(jù)份招,導(dǎo)致數(shù)據(jù)只能寫入磁盤中,降低了性能狞甚。但是如果Spark作業(yè)中的shuffle類操作比較多锁摔,而持久化操作比較少,那么這個(gè)參數(shù)的值適當(dāng)降低一些比較合適哼审。此外谐腰,如果發(fā)現(xiàn)作業(yè)由于頻繁的gc導(dǎo)致運(yùn)行緩慢(通過(guò)spark web ui可以觀察到作業(yè)的gc耗時(shí)),意味著task執(zhí)行用戶代碼的內(nèi)存不夠用涩盾,那么同樣建議調(diào)低這個(gè)參數(shù)的值十气。
spark.shuffle.memoryFraction 該參數(shù)用于設(shè)置shuffle過(guò)程中一個(gè)task拉取到上個(gè)stage的task的輸出后,進(jìn)行聚合操作時(shí)能夠使用的Executor內(nèi)存的比例春霍,默認(rèn)是0.2砸西。也就是說(shuō),Executor默認(rèn)只有20%的內(nèi)存用來(lái)進(jìn)行該操作址儒。shuffle操作在進(jìn)行聚合時(shí)芹枷,如果發(fā)現(xiàn)使用的內(nèi)存超出了這個(gè)20%的限制,那么多余的數(shù)據(jù)就會(huì)溢寫到磁盤文件中去莲趣,此時(shí)就會(huì)極大地降低性能鸳慈。 如果Spark作業(yè)中的RDD持久化操作較少,shuffle操作較多時(shí)喧伞,建議降低持久化操作的內(nèi)存占比走芋,提高shuffle操作的內(nèi)存占比比例,避免shuffle過(guò)程中數(shù)據(jù)過(guò)多時(shí)內(nèi)存不夠用潘鲫,必須溢寫到磁盤上翁逞,降低了性能。此外溉仑,如果發(fā)現(xiàn)作業(yè)由于頻繁的gc導(dǎo)致運(yùn)行緩慢熄攘,意味著task執(zhí)行用戶代碼的內(nèi)存不夠用,那么同樣建議調(diào)低這個(gè)參數(shù)的值彼念。資源參數(shù)的調(diào)優(yōu),沒(méi)有一個(gè)固定的值浅萧,需要根據(jù)自己的實(shí)際情況(包括Spark作業(yè)中的shuffle操作數(shù)量逐沙、RDD持久化操作數(shù)量以及spark web ui中顯示的作業(yè)gc情況),

合理地設(shè)置上述參數(shù)洼畅。

示例:

spark-submit \
  --master yarn \
  --deply-mode cluster \
  --num-executors 100 \
  --executor-memory 4G \
  --executor-cores 4 \
  --driver-memory 1G \
  --conf spark.default.parallelism=1000 \
  --conf spark.storage.memoryFraction=0.5 \
  --conf spark.shuffle.memoryFraction=0.3 \

  1. 老子《道德經(jīng)》第二十九章吩案,老子故里,中國(guó)鹿邑帝簇。 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末徘郭,一起剝皮案震驚了整個(gè)濱河市靠益,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌残揉,老刑警劉巖胧后,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異抱环,居然都是意外死亡壳快,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門镇草,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)眶痰,“玉大人,你說(shuō)我怎么就攤上這事梯啤∈” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵因宇,是天一觀的道長(zhǎng)七婴。 經(jīng)常有香客問(wèn)我,道長(zhǎng)羽嫡,這世上最難降的妖魔是什么本姥? 我笑而不...
    開(kāi)封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮杭棵,結(jié)果婚禮上婚惫,老公的妹妹穿的比我還像新娘。我一直安慰自己魂爪,他們只是感情好先舷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著滓侍,像睡著了一般蒋川。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撩笆,一...
    開(kāi)封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天捺球,我揣著相機(jī)與錄音,去河邊找鬼夕冲。 笑死氮兵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的歹鱼。 我是一名探鬼主播泣栈,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了南片?” 一聲冷哼從身側(cè)響起掺涛,我...
    開(kāi)封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疼进,沒(méi)想到半個(gè)月后薪缆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颠悬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年矮燎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赔癌。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诞外,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出灾票,到底是詐尸還是另有隱情峡谊,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布刊苍,位于F島的核電站既们,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏正什。R本人自食惡果不足惜啥纸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望婴氮。 院中可真熱鬧斯棒,春花似錦、人聲如沸主经。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)罩驻。三九已至穗酥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惠遏,已是汗流浹背砾跃。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留节吮,地道東北人抽高。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像课锌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容