spark-submit 任務提交
spark-submit \
--class sparksql.Oracle_Sqs_Hive \
--master yarn \
--deploy-mode cluster \
/home/spark/333.jar
幾個重要的參數說明:
(1)executor_cores*num_executors
表示能夠並行執行Task的數目不宜太小或太大!一般不超過總隊列 cores 的 25%,比如隊列總 cores 400,最大不要超過100,最小不建議低於40,除非日志量很小。
(2)executor_cores
不宜為1!否則 work 進程中線程數過少,一般 2~4 為宜。
(3)executor_memory
一般 6~10g 為宜,最大不超過20G,否則會導致GC代價過高,或資源浪費嚴重。
(4)driver-memory
driver 不做任何計算和存儲,只是下發任務與yarn資源管理器和task交互,除非你是 spark-shell,否則一般 1-2g
增加每個executor的內存量,增加了內存量以后,對性能的提升,有三點:
(5)如果需要對RDD進行cache,那么更多的內存,就可以緩存更多的數據,將更少的數據寫入磁盤,
甚至不寫入磁盤。減少了磁盤IO。
(6)對於shuffle操作,reduce端,會需要內存來存放拉取的數據並進行聚合。如果內存不夠,也會寫入磁盤。
如果給executor分配更多內存以后,就有更少的數據,需要寫入磁盤,甚至不需要寫入磁盤。減少了磁盤IO,提升了性能。
(7)對於task的執行,可能會創建很多對象.如果內存比較小,可能會頻繁導致JVM堆內存滿了,然后頻繁GC,垃圾回收 ,minor GC和full GC.(速度很慢).內存加大以后,帶來更少的GC,垃圾回收,避免了速度變慢,性能提升。
spark提交參數的設置非常的重要,如果設置的不合理,會影響性能,所以大家要根據具體的情況適當的調整參數的配置有助於提高程序執行的性能
--conf spark.driver.userClassPathFirst=true
設置自己上傳的jar包在executor和driver上優先級高於集群自己jar包,倆個參數都要配
spark-submit 詳細參數說明
參數名 | 參數說明 |
--master | master 的地址,提交任務到哪里執行,例如 spark://host:port, yarn, local |
--deploy-mode | 在本地 (client) 啟動 driver 或在 cluster 上啟動,默認是 client |
--class | 應用程序的主類(包名+類名),僅針對 java 或 scala 應用 |
--name | 應用程序的名稱 |
--jars | 用逗號分隔的本地 jar 包,設置后,這些 jar 將包含在 driver 和 executor 的 classpath 下 |
--packages | 包含在driver 和executor 的 classpath 中的 jar 的 maven 坐標 |
--exclude-packages | 為了避免沖突 而指定不包含的 package |
--repositories | 遠程 repository |
--conf PROP=VALUE | 指定 spark 配置屬性的值, 例如 -conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m"
spark.executor.userClassPathFirst=true
實驗性)當在executor中加載類時,是否用戶添加的jar比Spark自己的jar優先級高。這個屬性可以降低Spark依賴和用戶依賴的沖突。它現在還是一個實驗性的特征。 spark.driver.userClassPathFirst=true
實驗性)當在driver中加載類時,是否用戶添加的jar比Spark自己的jar, 優先級高。這個屬性可以降低Spark依賴和用戶依賴的沖突。它現在還是一個實驗性的特征。
|
--properties-file | 加載的配置文件,默認為 conf/spark-defaults.conf |
--driver-memory | Driver內存,默認 1G |
--driver-java-options | 傳給 driver 的額外的 Java 選項 |
--driver-library-path | 傳給 driver 的額外的庫路徑 |
--driver-class-path | 傳給 driver 的額外的類路徑 |
--driver-cores | Driver 的核數,默認是1。在 yarn 或者 standalone 下使用 |
--executor-memory | 每個 executor 的內存,默認是1G |
--total-executor-cores | 所有 executor 總共的核數。僅僅在 mesos 或者 standalone 下使用 |
--num-executors | 啟動的 executor 數量。默認為2。在 yarn 下使用 |
--executor-cores | 每個 executor 的核數。在yarn或者standalone下使用 |
--files | 用逗號隔開的文件列表,會放置在每個 executor 工作目錄中 |