雲原生資料倉儲AnalyticDB MySQL版企業版及湖倉版Spark應用的描述格式為JSON格式,包含名稱、JAR包路徑以及執行時配置參數等資訊。本文主要介紹如何配置一個Spark應用。
離線應用
應用程式套件含Batch、Streaming和SQL,其中Batch為離線應用,任務執行時需要入口類所在的JAR包或Python檔案。根據業務的不同,可能還需要提供入口類參數、執行依賴的JAR包、Python執行環境沙箱等。
雲原生資料倉儲AnalyticDB MySQL版Spark離線應用的編寫方法與社區Spark-Submit工具的命令列參數類似。
離線應用配置樣本
{
"args": ["oss://${testBucketName}/data/test/test.csv"],
"name": "spark-oss-test",
"file": "oss://${testBucketName/jars/test/spark-examples-0.0.1-SNAPSHOT.jar",
"className": "com.aliyun.spark.oss.SparkReadOss",
"conf": {
"spark.driver.resourceSpec": "medium",
"spark.executor.resourceSpec": "medium",
"spark.executor.instances": 2,
"spark.adb.connectors": "oss"
}
}| 參數名稱 | 是否必填 | 樣本值 | 使用說明 |
| args | 否 | "args":["args0", "args1"] | Spark應用傳入的參數,多個參數之間以英文逗號(,)分隔。 |
| name | 否 | "name": "your_job_name" | Spark應用程式名稱。 |
| file | Python/Java/Scala應用必填 | "file":"oss://testBucketName/path/to/your/jar" | Spark應用主檔案的儲存位置。主檔案是入口類所在的JAR包或者Python的入口執行檔案。 說明 Spark應用主檔案目前只支援儲存在OSS中。 |
| className | Java/Scala應用必填 | "className":"com.aliyun.spark.oss.SparkReadOss" | Java或者Scala程式入口類。Python不需要指定入口類。 |
| sqls | SQL應用必填 | "sqls":["select * from xxxx","show databases"] | 本關鍵字允許使用者不提交JAR包和Python檔案,直接提交SQL離線應用。該關鍵字跟file,className,args關鍵字不能同時使用。使用者可以同時指定多條SQL語句,中間以英文逗號(,)分隔。多條SQL語句按照指定的順序依次執行。 |
| jars | 否 | "jars":["oss://testBucketName/path/to/jar","oss://testBucketName/path/to/jar"] | Spark應用依賴的JAR包,多個JAR包之間以英文逗號(,)分隔。JAR包在運行時會被加入到Driver和Executor JVM的ClassPath裡面。 說明 Spark應用所依賴的所有JAR包須儲存在OSS中。 |
| files | 否 | "files":["oss://testBucketName/path/to/files","oss://testBucketName/path/to/files"] | Spark應用依賴的檔案資源,檔案會被下載到Driver和Executor進程的當前執行目錄下。 支援設定檔別名,例如 說明
|
| archives | 否 | "archives":["oss://testBucketName/path/to/archives","oss://testBucketName/path/to/archives"] | Spark應用依賴的壓縮包資源,目前支援.TAR.GZ尾碼。壓縮包會被解壓到當前Spark進程的目前的目錄下。 支援設定檔別名,例如 說明 Spark應用所依賴的所有壓縮包須儲存在OSS中。壓縮包解壓縮失敗,任務會失敗。 |
| pyFiles | Python應用可選 | "pyFiles":["oss://testBucketName/path/to/pyfiles","oss://testBucketName/path/to/pyfiles"] | PySpark依賴的Python檔案,尾碼可以是ZIP、PY和EGG。如果依賴多個Python檔案,建議使用者使用ZIP或者EGG壓縮包。您可以在Python代碼中以module方式引用Python檔案。多個壓縮包中間使用英文逗號(,)分隔。 說明 Spark應用所依賴的所有Python檔案須儲存在OSS中。 |
| conf | 是 | "conf":{"spark.driver.resourceSpec": "medium",spark.executor.resourceSpec":"medium,"spark.executor.instances": 2,"spark.adb.connectors": "oss"} | 與社區Spark中的配置項基本一致,參數格式為key: value形式,多個參數之間以英文逗號(,)分隔。與社區Spark用法不一致的配置參數及AnalyticDB MySQL特有的配置參數,請參見conf配置參數說明。 |
SQL應用
AnalyticDB MySQL版Spark支援在控制台直接提交Spark SQL。無需使用者打包JAR包或者寫Python代碼,更利於資料開發人員使用Spark進行資料分析。提交Spark SQL時需要指定應用類型為SQL。
SQL應用配置樣本
-- Here is just an example of SparkSQL. Modify the content and run your spark program.
conf spark.driver.resourceSpec=medium;
conf spark.executor.instances=2;
conf spark.executor.resourceSpec=medium;
conf spark.app.name=Spark SQL Test;
conf spark.adb.connectors=oss;
-- Here are your sql statements
show databases;Spark SQL支援的命令類型
Spark編輯器支援編輯SQL語句,每條SQL語句以英文分號(;)分隔。
- CONF命令
- 用於指定Spark的設定,置於SQL語句的前面。
- 每條CONF命令指定一個Spark啟動時參數的值,每條CONF命令以英文分號(;)分隔。
- CONF命令的Key和Value均不加單引號或雙引號。
- CONF命令支援的配置參數,請參見conf配置參數說明。
- ADD JAR命令
- 用於增加Spark SQL運行時依賴的JAR包,例如UDF的JAR包,各類資料來源連接器的JAR包等。JAR包目前支援OSS格式路徑,置於SQL語句的前面。
- 每條ADD JAR命令指定一個OSS JAR包路徑,路徑字串不加單引號或雙引號,每條ADD JAR命令以英文分號(;)分隔。
- Spark SQL文法所支援的DDL或DML語句。例如查詢語句
SELECT、插入語句INSERT等。
切換中繼資料服務
- 使用in-memory catalog。
CONF spark.sql.catalogImplementation = in-memory; - 使用Spark內建的hive metastore2.3.7版本或其他版本。
CONF spark.sql.catalogImplementation = hive; CONF spark.sql.hive.metastore.version = 2.3.7;說明 如需要串連自建的Hive Metastore,可以採用社區Spark的標準配置方式,該配置會覆蓋預設配置。社區Spark的標準配置方式,請參見Spark Configuration。
conf配置參數說明
AnalyticDB MySQL版Spark配置項跟社區Spark中的配置項基本一致。本章節介紹AnalyticDB MySQL與社區Spark用法不一致的配置參數及AnalyticDB MySQL特有的配置參數。
- 指定Driver和Executor資源重要 此用法與社區Spark不同。spark.driver.resourceSpec與spark.executor.resourceSpec參數取值相同。
參數名稱 使用說明 對應社區Spark參數 spark.driver.resourceSpec Spark driver的資源規格。不同型號的取值對應不同的規格,詳情請參見Spark資源規格列表的型號列。 例如
CONF spark.driver.resourceSpec = c.small;,則Spark driver的資源規格為1核2 GB。spark.driver.cores及spark.driver.memory spark.executor.resourceSpec Spark executor的資源規格。不同型號的取值對應不同的規格,詳情請參見Spark資源規格列表的型號列。 例如
CONF spark.executor.resourceSpec = c.small;,則Spark executor的資源規格為1核2 GB。spark.executor.cores及spark.executor.memory - Spark UI
參數名稱 預設值 參數說明 spark.app.log.rootPath 無 儲存AnalyticDB MySQL版Spark應用執行時產生的日誌以及SparkUI EventLog的目錄。目前只支援使用者手動填寫用於儲存日誌的OSS路徑。如果不填寫,則無法在應用結束後看到日誌,也無法在應用結束後開啟Spark UI。 - RAM使用者營運Spark
參數名稱 預設值 參數說明 spark.adb.roleArn 無 在RAM系統中授予提交Spark應用的RAM使用者的Role Arn,詳情請參見RAM角色概覽。RAM使用者提交應用需要填寫該參數,阿里雲帳號無需提交該參數。 - AnalyticDB MySQL版Spark內建資料來源連接器
參數名稱 預設值 參數說明 spark.adb.connectors 無 啟用AnalyticDB MySQL版Spark內建的連接器,連接器名稱以逗號分隔,目前可選的連接器有OSS、hbase1.x、tablestore。 spark.hadoop.io.compression.codec.snappy.native false 標識Snappy檔案是否為標準Snappy檔案。Hadoop預設識別的是Hadoop修改過的Snappy格式檔案。設定為true時將使用標準Snappy庫解壓,否則使用hadoop預設的Snappy庫解壓。 - 訪問VPC和串連資料來源
參數名稱 預設值 參數說明 spark.adb.eni.vswitchId 無 開啟VPC功能,配置彈性網卡的交換器ID。如果使用者有ECS可以訪問目標資料來源,那麼可以直接使用該ECS的交換器ID。 spark.adb.eni.securityGroupId 無 開啟VPC功能,用於彈性網卡的安全性群組ID。如果使用者有ECS可以訪問目標資料來源,那麼可以直接使用該ECS的安全性群組ID。 spark.adb.eni.extraHosts 無 需要額外傳入的IP和Host的映射關係,以便Spark能正確解析資料來源中的Host。如串連自建的Hive資料來源,則需要傳入此參數。 說明 IP和Host之間用空格分隔。多個IP和網域名稱用英文逗號(,)分隔,如"ip0 master0, ip1 master1"。 - Spark SQL串連AnalyticDB MySQL中繼資料
參數名稱 預設值 參數說明 spark.sql.hive.metastore.version 無 指定Hive MetaStore的版本。配置為 ADB時,可以串連AnalyticDB MySQL中的中繼資料資訊,讀取AnalyticDB MySQL的表資訊。 - 應用重試
參數名稱 預設值 參數說明 spark.adb.maxAttempts 1 最大嘗試次數,預設值為1,代表不需要重試。 假設配置為3,則這個應用在一個滑動視窗期時間內最多嘗試3次。
spark.adb.attemptFailuresValidityInterval Long.MAX 重試計數的滑動視窗時間,單位:毫秒(ms)。 假設配置為6000,那麼當一次重試失敗後,系統會計算過去6000ms總共進行了多少次重試,如果重試次數少於maxAttempts的配置值,則會繼續重試。
- 源配置
參數名稱 預設值 參數說明 spark.adb.driver.cpu-vcores-ratio 1 Driver虛擬Core與實際CPU Core之間的比例。假設Driver是Medium規格(2Core8 GB),本參數值設定為2,那麼Driver進程可以按照4個Core進行並發控制,相當於spark.driver.cores=4。 spark.adb.executor.cpu-vcores-ratio 1 Executor虛擬Core與實際CPU Core之間的比例。當單個Task的CPU使用率比較低時,可以通過該配置,提升CPU利用效率。假設Executor是Medium規格(2Core8 GB),本參數值設定為2,那麼Executor進程可以按照4個Core進行並發控制,也就是同時調度4個並發任務,相當於spark.executor.cores=4。
Spark資源規格列表
| 型號(Type) | 規格 | |
| CPU(Core) | 記憶體(GB) | |
| c.small | 1 | 2 |
| small | 1 | 4 |
| m.small | 1 | 8 |
| c.medium | 2 | 4 |
| medium | 2 | 8 |
| m.medium | 2 | 16 |
| c.large | 4 | 8 |
| large | 4 | 16 |
| m.large | 4 | 32 |
| c.xlarge | 8 | 16 |
| xlarge | 8 | 32 |
| m.xlarge | 8 | 64 |
| c.2xlarge | 16 | 32 |
| 2xlarge | 16 | 64 |
| m.2xlarge | 16 | 128 |