1、簡(jiǎn)介
本文主要講述spark-submit/spark-shell等spark啟動(dòng)指令的參數(shù)機(jī)器作用。
參數(shù)調(diào)用方式:-- 參數(shù)key 參數(shù)value。
2、參數(shù)說(shuō)明
2.1 通用參數(shù)(java,scala,python等程序)
- master master
這個(gè)master_url可以是如下幾種:
spark://host:port #standalone
mesos://host:port
yarn
yarn-cluster
yarn-client
local
deploy-mode deploy-mode
Driver 程序的運(yùn)行模式,client或者cluster,client表示master就是本地機(jī)器作為master,使用cluster表示使用有yarn從集群中選擇機(jī)器作為master。建議使用client,使用client可以從本地關(guān)閉進(jìn)程,即方便控制程序。class class_name
應(yīng)用程序的入口點(diǎn),main函數(shù)所在的類。主類的名稱,包括完整的包路徑,可借助pwd+相對(duì)路徑,name name
spark application的名字,即該spark任務(wù)的名稱queue queue_name
提交應(yīng)用程序給哪個(gè)yarn隊(duì)列, 默認(rèn)的隊(duì)列是default隊(duì)列, 僅限與spark on yarn模式。properties-file file
設(shè)置應(yīng)用程序?qū)傩缘奈募窂?,默認(rèn)是$SPARK_HOME/conf/spark-defaults.conf。
executor運(yùn)行(內(nèi)存/線程)參數(shù):
- executor-memory
每個(gè)執(zhí)行程序進(jìn)程使用的內(nèi)存量,e.g. 2g/2G - executor-cores num
單個(gè)executor運(yùn)行使用的核數(shù),即開多少線程來(lái)并發(fā)執(zhí)行task,默認(rèn)為1, 僅限于spark on yarn模式。 - num-executors num
executor運(yùn)行個(gè)數(shù),即執(zhí)行節(jié)點(diǎn)的個(gè)數(shù),默認(rèn)為2, 僅限于spark on yarn模式。 - total-executor-cores num
executor的運(yùn)行使用的總核數(shù),僅限與standalone和spark on mesos。
spark 任務(wù)中的最高并發(fā)的 task 數(shù)量為:
注意:所有核共用Executor的內(nèi)存,所以要在內(nèi)存和核數(shù)之間做好平衡$
driver 參數(shù):
driver-memory mem
Driver 程序運(yùn)行時(shí)需要的內(nèi)存, 默認(rèn)為1g。該參數(shù)一般使用默認(rèn)的即可,如果使用到了collect操作或者任務(wù)的平行度變大,可以將該參數(shù)變大一點(diǎn);driver-cores num
Driver的運(yùn)行核數(shù),默認(rèn)為1個(gè),僅限于standalone模式。conf:Key = value格式的任意Spark配置屬性。對(duì)于包含空格的值,用引號(hào)括起“key = value”,eg:
--conf spark.driver.maxResultSize=0
總結(jié)
在執(zhí)行 Spark 的應(yīng)用程序時(shí),Spark 集群會(huì)啟動(dòng) Driver 和 Executor 兩種 JVM 進(jìn)程,前者為主控進(jìn)程,負(fù)責(zé)創(chuàng)建 Spark 上下文,提交 Spark 作業(yè)(Job),并將作業(yè)轉(zhuǎn)化為計(jì)算任務(wù)(Task),在各個(gè) Executor 進(jìn)程間協(xié)調(diào)任務(wù)的調(diào)度,后者負(fù)責(zé)在工作節(jié)點(diǎn)上執(zhí)行具體的計(jì)算任務(wù),并將結(jié)果返回給 Driver,同時(shí)為需要持久化的 RDD 提供存儲(chǔ)功能。
spark-shuffle中的read和write操所需要的內(nèi)存主要是在exector中的堆內(nèi)內(nèi)存中運(yùn)行。
2.2 java參數(shù)介紹
driver-library-path path
Driver程序依賴的第三方j(luò)ar包。driver-java-options
Driver應(yīng)用程序運(yùn)行時(shí)的一些java配置選項(xiàng),例如GC的相關(guān)信息等。jars jars
加入到Driver和集群executor的類路徑中的jar包列表,以逗號(hào)進(jìn)行分隔,可以是本地列表packages package1,package2
項(xiàng)目所需要包,集群模式下該參數(shù)需要跟repositories參數(shù)一起使用repositories remoteAdress
maven格式的遠(yuǎn)程存儲(chǔ)庫(kù)列表,如果不給定,則會(huì)使用機(jī)器安裝的默認(rèn)源,package指定的包也從這里下載。
spark 應(yīng)用程序第三方j(luò)ar文件依賴解決方法
1、將第三方j(luò)ar文件打包到最終形成的spark應(yīng)用程序jar文件中,適應(yīng)于第三方j(luò)ar文件比較小
2、使用spark-submit提交的參數(shù):--jars,適應(yīng)于spark-submit命令的機(jī)器上存在對(duì)應(yīng)的jar文件
3、使用spark-submit提交命令的參數(shù):--package,適應(yīng)于遠(yuǎn)程倉(cāng)庫(kù)中的jar包
2.3 python參數(shù)介紹
- py-files py-files
使用逗號(hào)分隔的放置在python應(yīng)用程序PYTHONPATH 上的.zip, .egg, .py的文件列表。
3、conf常用參數(shù)
3.1 使用方法
--conf key=value
3.2 常用key
spark.driver.maxResultSize
每個(gè)Spark操作(例如,收集)的所有分區(qū)的序列化結(jié)果的總大小限制(以字節(jié)為單位)。 應(yīng)至少為1M,或0為無(wú)限制。 如果總大小超過(guò)此限制,則將中止作業(yè)。 具有高限制可能會(huì)導(dǎo)致驅(qū)動(dòng)程序中出現(xiàn)內(nèi)存不足錯(cuò)誤(取決于spark.driver.memory和JVM中對(duì)象的內(nèi)存開銷)。 設(shè)置適當(dāng)?shù)南拗瓶梢员Wo(hù)驅(qū)動(dòng)程序免受內(nèi)存不足錯(cuò)誤的影響。但常用0,可以以此來(lái)查程序中bugspark.network.timeout
所有網(wǎng)絡(luò)的交互間隔時(shí)間,如果超過(guò)這個(gè)時(shí)間executor將停止spark.executor.heartbeatInterval
executor給driver發(fā)送心跳的時(shí)間間隔,在任務(wù)執(zhí)行的過(guò)程中,executot需要一直給driver發(fā)送心跳,如果超過(guò)該間隔,driver認(rèn)為任務(wù)執(zhí)行失敗。單位ms,另外該值需要遠(yuǎn)小于spark.network.timeoutspark.executor.extraJavaOptions
要傳遞給executors的一串額外JVM選項(xiàng)。 例如,GC設(shè)置或其他日志記錄。