# 提交應用程序
在Spark bin目錄下的`spark-submit`可以用來在集群上啟動應用程序。它可以通過統一的接口使用Spark支持的所有[集群管理器](https://spark.apache.org/docs/latest/cluster-overview.html#cluster-manager-types)
,所有你不必為每一個管理器做相應的配置。
## 用spark-submit啟動應用程序
`bin/spark-submit`腳本負責建立包含Spark以及其依賴的類路徑(classpath),它支持不同的集群管理器以及Spark支持的加載模式。
```shell
./bin/spark-submit \
--class <main-class>
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
```
一些常用的選項是:
- `--class`:你的應用程序的入口點(如org.apache.spark.examples.SparkPi)
- `--master`:集群的master URL(如spark://23.195.26.187:7077)
- `--deploy-mode`:在worker節點部署你的driver(cluster)或者本地作為外部客戶端(client)。默認是client。
- `--conf`:任意的Spark配置屬性,格式是key=value。
- `application-jar`:包含應用程序以及其依賴的jar包的路徑。這個URL必須在集群中全局可見,例如,存在于所有節點的`hdfs://`路徑或`file://`路徑
- `application-arguments`:傳遞給主類的主方法的參數
一個通用的部署策略是從網關集群提交你的應用程序,這個網關機器和你的worker集群物理上協作。在這種設置下,`client`模式是適合的。在`client`模式下,driver直接在`spark-submit`進程
中啟動,而這個進程直接作為集群的客戶端。應用程序的輸入和輸出都和控制臺相連接。因此,這種模式特別適合涉及REPL的應用程序。
另一種選擇,如果你的應用程序從一個和worker機器相距很遠的機器上提交,通常情況下用`cluster`模式減少drivers和executors的網絡遲延。注意,`cluster`模式目前不支持獨立集群、
mesos集群以及python應用程序。
有幾個我們使用的集群管理器特有的可用選項。例如,在Spark獨立集群的`cluster`模式下,你也可以指定`--supervise`用來確保driver自動重啟(如果它因為非零退出碼失敗)。
為了列舉spark-submit所有的可用選項,用`--help`運行它。
```shell
# Run application locally on 8 cores
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[8] \
/path/to/examples.jar \
100
# Run on a Spark Standalone cluster in client deploy mode
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://207.184.161.138:7077 \
--executor-memory 20G \
--total-executor-cores 100 \
/path/to/examples.jar \
1000
# Run on a Spark Standalone cluster in cluster deploy mode with supervise
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://207.184.161.138:7077 \
--deploy-mode cluster
--supervise
--executor-memory 20G \
--total-executor-cores 100 \
/path/to/examples.jar \
1000
# Run on a YARN cluster
export HADOOP_CONF_DIR=XXX
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn-cluster \ # can also be `yarn-client` for client mode
--executor-memory 20G \
--num-executors 50 \
/path/to/examples.jar \
1000
# Run a Python application on a Spark Standalone cluster
./bin/spark-submit \
--master spark://207.184.161.138:7077 \
examples/src/main/python/pi.py \
1000
```
## Master URLs
傳遞給Spark的url可以用下面的模式
Master URL | Meaning
--- | ---
local | 用一個worker線程本地運行Spark
local[K] | 用k個worker線程本地運行Spark(理想情況下,設置這個值為你的機器的核數)
local[*] | 用盡可能多的worker線程本地運行Spark
spark://HOST:PORT | 連接到給定的Spark獨立部署集群master。端口必須是master配置的端口,默認是7077
mesos://HOST:PORT | 連接到給定的mesos集群
yarn-client | 以`client`模式連接到Yarn集群。群集位置將基于通過HADOOP_CONF_DIR變量找到
yarn-cluster | 以`cluster`模式連接到Yarn集群。群集位置將基于通過HADOOP_CONF_DIR變量找到
- Introduction
- 快速上手
- Spark Shell
- 獨立應用程序
- 開始翻滾吧!
- RDD編程基礎
- 基礎介紹
- 外部數據集
- RDD 操作
- 轉換Transformations
- map與flatMap解析
- 動作Actions
- RDD持久化
- RDD容錯機制
- 傳遞函數到 Spark
- 使用鍵值對
- RDD依賴關系與DAG
- 共享變量
- Spark Streaming
- 一個快速的例子
- 基本概念
- 關聯
- 初始化StreamingContext
- 離散流
- 輸入DStreams
- DStream中的轉換
- DStream的輸出操作
- 緩存或持久化
- Checkpointing
- 部署應用程序
- 監控應用程序
- 性能調優
- 減少批數據的執行時間
- 設置正確的批容量
- 內存調優
- 容錯語義
- Spark SQL
- 概述
- SparkSQLvsHiveSQL
- 數據源
- RDDs
- parquet文件
- JSON數據集
- Hive表
- 數據源例子
- join操作
- 聚合操作
- 性能調優
- 其他
- Spark SQL數據類型
- 其它SQL接口
- 編寫語言集成(Language-Integrated)的相關查詢
- GraphX編程指南
- 開始
- 屬性圖
- 圖操作符
- Pregel API
- 圖構造者
- 部署
- 頂點和邊RDDs
- 圖算法
- 例子
- 更多文檔
- 提交應用程序
- 獨立運行Spark
- 在yarn上運行Spark
- Spark配置
- RDD 持久化