全部產品
Search
文件中心

:Spark應用配置指南

更新時間:Jul 06, 2024

雲原生資料倉儲AnalyticDB MySQL版企業版及湖倉版Spark應用的描述格式為JSON格式,包含名稱、JAR包路徑以及執行時配置參數等資訊。本文主要介紹如何配置一個Spark應用。

離線應用

應用程式套件含BatchStreamingSQL,其中Batch為離線應用,任務執行時需要入口類所在的JAR包或Python檔案。根據業務的不同,可能還需要提供入口類參數、執行依賴的JAR包、Python執行環境沙箱等。

雲原生資料倉儲AnalyticDB MySQL版Spark離線應用的編寫方法與社區Spark-Submit工具的命令列參數類似。

離線應用配置樣本

本章節以讀取OSS資料為例,描述了典型的Spark離線應用的編寫方式,包括應用程式名稱、入口類所在的JAR包、入口類、入口類參數以及執行時的參數配置。命令列參數格式為JSON格式。樣本如下:
 {
  "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應用程式名稱。
filePython/Java/Scala應用必填"file":"oss://testBucketName/path/to/your/jar"Spark應用主檔案的儲存位置。主檔案是入口類所在的JAR包或者Python的入口執行檔案。
說明 Spark應用主檔案目前只支援儲存在OSS中。
classNameJava/Scala應用必填"className":"com.aliyun.spark.oss.SparkReadOss"Java或者Scala程式入口類。Python不需要指定入口類。
sqlsSQL應用必填"sqls":["select * from xxxx","show databases"]本關鍵字允許使用者不提交JAR包和Python檔案,直接提交SQL離線應用。該關鍵字跟fileclassNameargs關鍵字不能同時使用。使用者可以同時指定多條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進程的當前執行目錄下。

支援設定檔別名,例如oss://testBucketName/test/test1.txt#test1,test1為檔案別名,使用者可以使用./test1或者./test1.txt訪問檔案。

多個檔案中間用英文逗號(,)分隔。
說明
  • files中包含名為oss://<path/to>/log4j.properties的檔案時(檔案名稱固定為log4j.properties),Spark會使用該log4j.properties作為日誌配置。
  • Spark應用所依賴的所有檔案須儲存在OSS中。
archives"archives":["oss://testBucketName/path/to/archives","oss://testBucketName/path/to/archives"]Spark應用依賴的壓縮包資源,目前支援.TAR.GZ尾碼。壓縮包會被解壓到當前Spark進程的目前的目錄下。

支援設定檔別名,例如oss://testBucketName/test/test1.tar.gz#test1,test1為檔案別名。假設test2.txt是test1.tar.gz壓縮包中的檔案,使用者可以使用./test1/test2.txt或者./test1.tar.gz/test2.txt訪問解壓後的檔案。

多個壓縮包中間使用英文逗號(,)分隔。
說明 Spark應用所依賴的所有壓縮包須儲存在OSS中。壓縮包解壓縮失敗,任務會失敗。
pyFilesPython應用可選"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語句以英文分號(;)分隔。

Spark SQL支援以下類型命令:
  • CONF命令
    • 用於指定Spark的設定,置於SQL語句的前面。
    • 每條CONF命令指定一個Spark啟動時參數的值,每條CONF命令以英文分號(;)分隔。
    • CONF命令的KeyValue均不加單引號或雙引號。
    • 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等。

切換中繼資料服務

Spark SQL預設使用AnalyticDB MySQL中繼資料服務。如果使用其它中繼資料服務,可以採用以下兩種方式切換:
  • 使用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特有的配置參數。

  • 指定DriverExecutor資源
    重要 此用法與社區Spark不同。
    spark.driver.resourceSpecspark.executor.resourceSpec參數取值相同。
    參數名稱使用說明對應社區Spark參數
    spark.driver.resourceSpecSpark driver的資源規格。不同型號的取值對應不同的規格,詳情請參見Spark資源規格列表的型號列。

    例如CONF spark.driver.resourceSpec = c.small;,則Spark driver的資源規格為1核2 GB。

    spark.driver.coresspark.driver.memory
    spark.executor.resourceSpecSpark executor的資源規格。不同型號的取值對應不同的規格,詳情請參見Spark資源規格列表的型號列。

    例如CONF spark.executor.resourceSpec = c.small;,則Spark executor的資源規格為1核2 GB。

    spark.executor.coresspark.executor.memory
  • Spark UI
    參數名稱預設值參數說明
    spark.app.log.rootPath儲存AnalyticDB MySQL版Spark應用執行時產生的日誌以及SparkUI EventLog的目錄。目前只支援使用者手動填寫用於儲存日誌的OSS路徑。如果不填寫,則無法在應用結束後看到日誌,也無法在應用結束後開啟Spark UI。
  • RAM使用者營運Spark
    參數名稱預設值參數說明
    spark.adb.roleArnRAM系統中授予提交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.nativefalse標識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.maxAttempts1最大嘗試次數,預設值為1,代表不需要重試。

    假設配置為3,則這個應用在一個滑動視窗期時間內最多嘗試3次。

    spark.adb.attemptFailuresValidityIntervalLong.MAX重試計數的滑動視窗時間,單位:毫秒(ms)。

    假設配置為6000,那麼當一次重試失敗後,系統會計算過去6000ms總共進行了多少次重試,如果重試次數少於maxAttempts的配置值,則會繼續重試。

  • 源配置
    參數名稱預設值參數說明
    spark.adb.driver.cpu-vcores-ratio1Driver虛擬Core與實際CPU Core之間的比例。假設Driver是Medium規格(2Core8 GB),本參數值設定為2,那麼Driver進程可以按照4個Core進行並發控制,相當於spark.driver.cores=4。
    spark.adb.executor.cpu-vcores-ratio1Executor虛擬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.small12
small14
m.small18
c.medium24
medium28
m.medium216
c.large48
large416
m.large432
c.xlarge816
xlarge832
m.xlarge864
c.2xlarge1632
2xlarge1664
m.2xlarge16128