本文以ECS連接EMR Serverless Spark為例,介紹如何通過EMR Serverless spark-submit命令行工具進行Spark任務開發。
前提條件
已安裝Java 1.8或以上版本。
如果使用RAM用戶(子賬號)提交Spark任務,需要將RAM用戶(子賬號)添加至Serverless Spark的工作空間中,并授予開發者或開發者以上的角色權限,操作請參見管理用戶和角色。
操作流程
步驟一:下載并安裝EMR Serverless spark-submit工具
將安裝包上傳至ECS實例,詳情請參見上傳或下載文件。
執行以下命令,解壓并安裝EMR Serverless spark-submit工具。
unzip emr-serverless-spark-tool-0.2.0-bin.zip
步驟二:配置相關參數
在已安裝Spark的環境中,如果系統中設置了SPARK_CONF_DIR
環境變量,則需將配置文件放置在SPARK_CONF_DIR
所指定的目錄下。例如,在EMR集群中,該目錄通常為/etc/taihao-apps/spark-conf
。否則,系統會報錯。
執行以下命令,修改connection.properties中的配置。
vim emr-serverless-spark-tool-0.2.0/conf/connection.properties
推薦按照如下內容對文件進行配置,參數格式為
key=value
,示例如下。accessKeyId=yourAccessKeyId accessKeySecret=yourAccessKeySecret # securityToken=yourSecurityToken regionId=cn-hangzhou endpoint=emr-serverless-spark.cn-hangzhou.aliyuncs.com workspaceId=w-xxxxxxxxxxxx resourceQueueId=dev_queue # networkServiceId=xxxxxx releaseVersion=esr-2.2 (Spark 3.3.1, Scala 2.12, Java Runtime)
涉及參數說明如下表所示。
參數
是否必填
說明
accessKeyId
是
執行Spark任務使用的阿里云賬號或RAM用戶的AccessKey ID。
accessKeySecret
是
執行Spark任務使用的阿里云賬號或RAM用戶的AccessKey Secret。
securityToken
否
RAM用戶的Token。
說明僅在進行STS認證時需要填寫該項。
regionId
是
地域ID。本文以杭州地域為例。
endpoint
是
EMR Serverless Spark的Endpoint。地址詳情參見服務接入點。
本文以杭州地域公網訪問地址為例,參數值為
emr-serverless-spark.cn-hangzhou.aliyuncs.com
。說明如果ECS實例沒有公網訪問能力,需要使用VPC地址。
workspaceId
是
EMR Serverless Spark工作空間ID。
resourceQueueId
否
隊列名稱。默認值為dev_queue。
networkServiceId
否
網絡連接名稱。
說明僅當Spark任務需要訪問VPC資源時,才需要填寫此項。具體操作,請參見EMR Serverless Spark與其他VPC間網絡互通。
releaseVersion
否
EMR Serverless Spark版本號。例如,esr-2.2 (Spark 3.3.1, Scala 2.12, Java Runtime)。
步驟三:提交Spark任務
執行以下命令,進入EMR Serverless spark-submit工具目錄。
cd emr-serverless-spark-tool-0.2.0
請按照以下格式提交任務。
Java/Scala類型任務
本文示例使用的spark-examples_2.12-3.3.1.jar,您可以單擊spark-examples_2.12-3.3.1.jar,直接下載測試JAR包,然后上傳JAR包至OSS。該JAR包是Spark自帶的一個簡單示例,用于計算圓周率π的值。
./bin/spark-submit --name SparkPi \ --queue dev_queue \ --num-executors 5 \ --driver-memory 1g \ --executor-cores 2 \ --executor-memory 2g \ --class org.apache.spark.examples.SparkPi \ oss://<yourBucket>/path/to/spark-examples_2.12-3.3.1.jar \ 10000
PySpark類型任務
本文示例使用的DataFrame.py和employee.csv,您可以單擊DataFrame.py和employee.csv,直接下載測試文件,然后上傳JAR包至OSS。
說明DataFrame.py文件是一段使用Apache Spark框架進行OSS上數據處理的代碼。
employee.csv文件中定義了一個包含員工姓名、部門和薪水的數據列表。
./bin/spark-submit --name PySpark \ --queue dev_queue \ --num-executors 5 \ --driver-memory 1g \ --executor-cores 2 \ --executor-memory 2g \ --conf spark.tags.key=value \ --files oss://<yourBucket>/path/to/employee.csv \ oss://<yourBucket>/path/to/DataFrame.py \ 10000
相關參數說明如下:
兼容開源spark-submit工具的參數。
參數名稱
示例值
說明
--class
org.apache.spark.examples.SparkPi
指定Spark任務的入口類名(Java或者Scala程序),Python程序無需此參數。
--num-executors
10
Spark任務的Executor數量。
--driver-cores
1
Spark任務的Driver核數。
--driver-memory
4g
Spark任務的Driver內存。
--executor-cores
1
Spark任務的Executor核數。
--executor-memory
1024m
Spark任務的Executor內存。
--files
oss://<yourBucket>/file1,oss://<yourBucket>/file2
Spark任務需要引用的資源文件,僅支持OSS資源,多個文件使用逗號(,)分隔。
--py-files
oss://<yourBucket>/file1.py,oss://<yourBucket>/file2.py
Spark任務需要引用的Python腳本,僅支持OSS資源,多個文件使用逗號(,)分隔。該參數僅對PySpark程序生效。
--jars
oss://<yourBucket>/file1.jar,oss://<yourBucket>/file2.jar
Spark任務需要引用的JAR包資源,僅支持OSS資源,多個文件使用逗號(,)分隔。
--archives
oss://<yourBucket>/archive.tar.gz#env,oss://<yourBucket>/archive2.zip
Spark任務需要引用的archive包資源,僅支持OSS資源,多個文件使用逗號(,)分隔。
--queue
root_queue
Spark任務運行的隊列名稱,需與EMR Serverless Spark工作空間隊列管理中的隊列名稱保持一致。
--conf
spark.tags.key=value
Spark任務自定義參數。
--status
jr-8598aa9f459d****
查看Spark任務狀態。
--kill
jr-8598aa9f459d****
終止Spark任務。
非開源spark-submit工具的參數。
參數名稱
示例值
說明
--detach
無需填充
使用此參數,spark-submit將在提交任務后立即退出,不再等待或查詢任務狀態。
--detail
jr-8598aa9f459d****
查看Spark任務詳情。
不支持的開源spark-submit工具的參數如下:
--deploy-mode
--master
--proxy-user
--repositories
--keytab
--principal
--total-executor-cores
--driver-library-path
--driver-class-path
--supervise
--verbose
步驟四:查詢Spark任務
CLI方式
查詢Spark任務狀態
cd emr-serverless-spark-tool-0.2.0
./bin/spark-submit --status <jr-8598aa9f459d****>
查詢Spark任務詳情
cd emr-serverless-spark-tool-0.2.0
./bin/spark-submit --detail <jr-8598aa9f459d****>
UI方式
在EMR Serverless Spark頁面,單擊左側導航欄中的任務歷史。
在任務歷史的開發任務頁簽,您可以查看提交的任務。
(可選)步驟五:終止Spark任務
cd emr-serverless-spark-tool-0.2.0
./bin/spark-submit --kill <jr-8598aa9f459d****>
僅能終止處于運行狀態(running)的任務。