您可以通過建立EMR(E-MapReduce) Spark SQL節點,實現分布式SQL查詢引擎處理結構化資料,提高作業的執行效率。
前提條件
開始進行節點開發前,若您需要定製組件環境,此時即可基於官方鏡像
dataworks_emr_base_task_pod建立自訂鏡像,並在資料開發中使用鏡像。例如:在建立自訂鏡像時替換Spark Jar包或是依賴特定的
庫、檔案或jar包。已建立阿里雲EMR叢集,並註冊EMR叢集至DataWorks。操作詳情請參見新版資料開發:綁定EMR計算資源。
(可選,RAM帳號需要)進行任務開發的RAM帳號已被添加至對應工作空間中,並具有開發或空間管理員(許可權較大,謹慎添加)角色許可權,新增成員的操作詳情請參見為工作空間增加空間成員。
如果您使用的是主帳號,則可忽略該添加操作。
如果您在開發工作單位時,需要特定的開發環境支援,可使用DataWorks提供的自訂鏡像功能,定製化構建任務執行所需的組件鏡像。更多資訊,請參見自訂鏡像。
使用限制
僅支援使用Serverless資源群組(推薦)或獨享調度資源群組運行該類型任務,若在資料開發時需使用鏡像,則必須使用Serverless資源群組。
DataLake或自訂叢集若要在DataWorks管理中繼資料,需先在叢集側配置EMR-HOOK。詳情請參見配置Spark SQL的EMR-HOOK。
說明若未在叢集側配置EMR-HOOK,則無法在DataWorks中即時展示中繼資料、產生審計日誌、展示血緣關係、開展EMR相關治理任務。
EMR on ACK類型的Spark叢集不支援查看血緣,EMR Serverless Spark叢集支援查看血緣。
DataLake叢集與自訂叢集支援使用可視化註冊函數,EMR on ACK 類型的Spark叢集、EMR Serverless Spark叢集不支援使用可視化註冊函數。
注意事項
若您已為當前工作空間綁定的EMR叢集中的Spark開啟Ranger許可權控制。
使用預設鏡像運行Spark任務時,該功能將預設可用。
如需使用自訂鏡像運行Spark任務,請提交工單聯絡技術支援人員,對鏡像進行升級以支援該功能。
操作步驟
在EMR Spark SQL節點編輯頁面,執行如下開發操作。
開發SQL代碼
在SQL編輯地區開發工作單位代碼,您可在代碼中使用${變數名}的方式定義變數,並在節點編輯頁面右側調度配置的調度參數中為該變數賦值。實現調度情境下代碼的動態傳參,調度參數使用詳情,請參考調度參數支援格式,樣本如下。
SHOW TABLES; -- 通過${var}定義名為var的變數,若將該變數賦值${yyyymmdd},可實現建立以業務日期作為尾碼的表。 CREATE TABLE IF NOT EXISTS userinfo_new_${var} ( ip STRING COMMENT'IP地址', uid STRING COMMENT'使用者ID' )PARTITIONED BY( dt STRING ); --可以結合調度參數使用。(可選)配置進階參數
您可在節點右側調度配置的中配置下表特有屬性參數。
說明不同類型EMR叢集可配置的進階參數存在部分差異,具體如下表。
更多開源Spark屬性參數,可在節點右側調度配置的中進行配置。
DataLake叢集/自訂叢集:EMR on ECS
進階參數
配置說明
queue
提交作業的調度隊列,預設為default隊列。關於EMR YARN說明,詳情請參見隊列基礎配置。
priority
優先順序,預設為1。
FLOW_SKIP_SQL_ANALYZE
SQL語句執行方式。取值如下:
true:表示每次執行多條SQL語句。false(預設值):表示每次執行一條SQL語句。
說明該參數僅支援用於資料開發環境測試回合流程。
ENABLE_SPARKSQL_JDBC
提交SQL代碼的方式。取值如下:
true:表示採用JDBC的方式提交SQL代碼。當EMR叢集無Kyuubi服務時,提交SQL代碼至Spark Thrift-Server,當EMR叢集有Kyuubi服務時,則通過JDBC方式提交SQL代碼至Kyuubi,並支援自訂Spark參數。兩種方式均支援中繼資料血緣,但提交至Thrift-Server的任務會缺少中繼資料對應節點任務的產出資訊。
false(預設值):表示採用Spark-submit cluster方式提交SQL代碼。此提交方式下,Spark2和Spark3均支援中繼資料血緣和產出資訊。還支援自訂Spark參數。說明Spark-submit cluster提交方式預設在EMR叢集HDFS的
/tmp目錄下建立臨時檔案及目錄,您需要保證目錄具有讀寫權限。當選擇Spark-submit cluster方式提交時,您可以直接在進階配置裡追加自訂SparkConf參數。提交代碼時DataWorks會自行在命令中加上新增的參數。例如,
"spark.driver.memory" : "2g"。
DATAWORKS_SESSION_DISABLE
適用於開發環境直接測試回合情境。取值如下:
true:表示每次運行SQL語句都會建立一個JDBC Connection。false(預設值):表示使用者在一個節點裡運行不同的SQL語句時會複用同一個JDBC Connection。
說明該參數配置為
false時不會列印Hive的yarn applicationId,如需列印yarn applicationId,請將該參數配置為true。其他
自訂Spark Configuration參數,添加Spark特有屬性參數。
配置格式如下:
spark.eventLog.enabled : false,DataWorks會自動在最終下發EMR叢集的代碼中進行補全,格式為:--conf key=value。更多參數配置詳情,請參見設定全域Spark參數。說明DataWorks支援您設定全域Spark參數,即按照工作空間粒度指定DataWorks各模組使用的Spark參數,您可自行指定該全域Spark參數的優先順序是否高於指定模組內的Spark參數。
如需啟用Ranger許可權控制,請在設定全域Spark參數中添加配置
spark.hadoop.fs.oss.authorization.method=ranger,以確保Ranger許可權控制生效。
EMR Serverless Spark叢集
相關參數設定請參見提交Spark任務參數設定。
進階參數
配置說明
FLOW_SKIP_SQL_ANALYZE
SQL語句執行方式。取值如下:
true:表示每次執行多條SQL語句。false(預設值):表示每次執行一條SQL語句。
說明該參數僅支援用於資料開發環境測試回合流程。
DATAWORKS_SESSION_DISABLE
任務提交方式。在資料開發執行任務時,預設將任務提交至SQL Compute執行。您可以通過該參數指定任務是通過SQL Compute執行還是提交到隊列執行。
true:任務提交到隊列執行。預設使用綁定計算資源時指定的預設隊列。當DATAWORKS_SESSION_DISABLE參數為true時,您可以配置SERVERLESS_QUEUE_NAME參數來指定資料開發執行時任務提交的隊列。false(預設值):任務提交到SQL Compute執行。說明該參數僅在資料開發執行時生效,調度運行時不生效。
SERVERLESS_RELEASE_VERSION
Spark引擎版本,預設使用管理中心的計算資源中叢集配置的預設引擎版本。如需為不同任務設定不同的引擎版本,您可在此進行設定。
說明註冊叢集指定的SQL Compute(會話)在EMR Serverless Spark控制台處於未啟動狀態的時候,進階設定配置中的
SERVERLESS_RELEASE_VERSION參數才會生效。SERVERLESS_QUEUE_NAME
指定任務確定資源隊列。當任務指定提交到隊列執行時,預設使用管理中心的叢集管理中叢集配置的預設資源隊列。如有資源隔離和管理需求,可通過添加隊列實現。詳情請參見管理資源隊列。
配置方式:
通過設定節點參數指定任務確定資源隊列。
通過設定全域Spark參數指定任務確定資源隊列。
說明註冊叢集指定的SQL Compute(會話)在EMR Serverless Spark控制台處於未啟動狀態的時候,進階設定配置中的
SERVERLESS_QUEUE_NAME參數才會生效。資料開發執行時:您需要先將
DATAWORKS_SESSION_DISABLE設定為true,任務才會提交到隊列執行。此時配置SERVERLESS_QUEUE_NAME參數指定任務隊列才會生效。營運中心調度執行時:任務會強制提交到隊列執行,無法提交到SQL Compute執行。
SERVERLESS_SQL_COMPUTE
指定SQL Compute(SQL會話),預設使用管理中心的計算資源中叢集配置的預設SQL Compute。如需面向不同任務設定不同的SQL會話,您可在此進行設定。如需建立管理SQL會話,詳情請參見管理SQL會話。
其他
自訂Spark Configuration參數,添加Spark特有屬性參數。
配置格式如下:
spark.eventLog.enabled : false,DataWorks會自動在最終下發EMR叢集的代碼中進行補全,格式為:--conf key=value。說明DataWorks支援您設定全域Spark參數,即按照工作空間粒度指定DataWorks各模組使用的Spark參數,您可自行指定該全域Spark參數的優先順序是否高於指定模組內的Spark參數。關於設定全域Spark參數,詳情請參見設定全域Spark參數。
Spark叢集:EMR on ACK
進階參數
配置說明
FLOW_SKIP_SQL_ANALYZE
SQL語句執行方式。取值如下:
true:表示每次執行多條SQL語句。false(預設值):表示每次執行一條SQL語句。
說明該參數僅支援用於資料開發環境測試回合流程。
其他
自訂Spark Configuration參數,添加Spark特有屬性參數。
配置格式如下:
spark.eventLog.enabled : false,DataWorks會自動在最終下發EMR叢集的代碼中進行補全,格式為:--conf key=value。說明DataWorks支援您設定全域Spark參數,即按照工作空間粒度指定DataWorks各模組使用的Spark參數,您可自行指定該全域Spark參數的優先順序是否高於指定模組內的Spark參數。關於全域Spark參數設定,詳情請參見設定全域Spark參數。
Hadoop叢集:EMR on ECS
進階參數
配置說明
queue
提交作業的調度隊列,預設為
default隊列。關於EMR YARN說明,詳情請參見隊列基礎配置。priority
優先順序,預設為1。
FLOW_SKIP_SQL_ANALYZE
SQL語句執行方式。取值如下:
true:表示每次執行多條SQL語句。false(預設值):表示每次執行一條SQL語句。
說明該參數僅支援用於資料開發環境測試回合流程。
USE_GATEWAY
設定本節點提交作業時,是否通過Gateway叢集提交。取值如下:
true:通過Gateway叢集提交。false(預設值):不通過Gateway叢集提交,預設提交到header節點。
說明如果本節點所在的叢集未關聯Gateway叢集,此處手動設定參數取值為
true時,後續提交EMR作業時會失敗。其他
自訂Spark Configuration參數,添加Spark特有屬性參數。
配置格式如下:
spark.eventLog.enabled : false,DataWorks會自動在最終下發EMR叢集的代碼中進行補全,格式為:--conf key=value。更多參數配置詳情,請參見設定全域Spark參數。說明DataWorks支援您設定全域Spark參數,即按照工作空間粒度指定DataWorks各模組使用的Spark參數,您可自行指定該全域Spark參數的優先順序是否高於指定模組內的Spark參數。
如需啟用Ranger許可權控制,請在設定全域Spark參數中添加配置
spark.hadoop.fs.oss.authorization.method=ranger,以確保Ranger許可權控制生效。
執行SQL任務
在調試配置選擇配置計算資源和資源群組。
說明您還可以根據任務執行所需的資源情況來調度 CU。預設CU為
0.25。訪問公用網路或VPC網路環境的資料來源需要使用與資料來源測試連通性成功的調度資源群組。詳情請參見網路連通方案。
在工具列的參數對話方塊中選擇對應的資料來源,單擊運行SQL任務。
如需定期執行節點任務,請根據業務需求配置調度資訊。配置詳情請參見節點調度。
節點任務配置完成後,需對節點進行發布。詳情請參見節點/工作流程發布。
任務發布後,您可以在營運中心查看周期任務的運行情況。詳情請參見營運中心入門。
常見問題
在資料開發中執行EMR Spark SQL節點任務時,若需將任務提交至SQL Compute執行,請確保所使用的SQL Compute狀態為運行中,否則任務將執行失敗。SQL Compute狀態查看可參見管理SQL會話。