自訂設定檔功能支援根據特定需求建立個人化配置,靈活控制任務執行環境。支援多種檔案格式(如XML和JSON),確保配置的安全性和一致性,並可直接應用於各類任務(如批處理、會話等)。
前提條件
已建立工作空間,詳情請參見管理工作空間。
建立自訂設定檔
進入組態管理頁面。
在左側導覽列,選擇。
在Spark頁面,單擊目標工作空間的名稱。
在EMR Serverless Spark頁面,單擊左側導覽列中的組態管理。
在組態管理頁面,單擊自訂設定檔頁簽。
單擊建立自訂設定檔。
在建立自訂設定檔頁面,配置以下參數,單擊建立。
參數
說明
路徑
選擇檔案儲存體路徑。
檔案名稱
定義檔案名稱及尾碼,根據檔案類型選擇
.txt、.xml或.json。檔案內容
填寫具體的配置內容,確保符合所選檔案類型的格式要求。
描述
添加檔案的用途說明,便於後續管理和維護。
說明系統預定義了一些關鍵設定檔,這些檔案的名稱和內容由系統維護,您無法直接修改其名稱或覆蓋其內容。不支援更改的檔案名稱包括:
spark-defaults.conf、kyuubi-defaults.conf、executorPodTemplate.yaml、spark-pod-template.yaml、driver_log4j.xml、executor_log4j.xml、session_log4j.xml、spark.properties和syncer_log4j.xml。
建立自訂設定檔後,您可以單擊操作列的編輯或刪除,以修改或移除自訂設定檔。
使用自訂設定檔
樣本1:在Spark Thrift Server中啟用Ranger鑒權
本文通過為Serverless Spark Thrift Server啟用Ranger鑒權為例,示範如何建立並使用自訂設定檔。
建立自訂設定檔。
建立一個名為
ranger-spark-security.xml的設定檔,並將其儲存在路徑/etc/spark/conf中。檔案內容如下所示。<configuration> <property> <name>ranger.plugin.spark.policy.cache.dir</name> <value>/opt/emr-hive/policycache</value> </property> <property> <name>ranger.plugin.spark.ambari.cluster.name</name> <value>serverless-spark</value> </property> <property> <name>ranger.plugin.spark.service.name</name> <value>emr-hive</value> </property> <property> <name>ranger.plugin.spark.policy.rest.url</name> <value>http://<ranger_admin_ip>:<ranger_admin_port></value> </property> <property> <name>ranger.plugin.spark.policy.source.impl</name> <value>org.apache.ranger.admin.client.RangerAdminRESTClient</value> </property> <property> <name>ranger.plugin.spark.super.users</name> <value>root</value> </property> </configuration>請根據您的實際情況替換
<ranger_admin_ip>和<ranger_admin_port>,填寫為Ranger Admin服務的內網IP地址和連接埠。如果您串連的是阿里雲EMR on ECS叢集的Ranger服務,<ranger_admin_ip>可填寫為Master節點的內網IP地址,<ranger_admin_port>為6080。配置Spark Thrift Server。
對於希望開啟Ranger鑒權功能的Spark Thrift Server會話,需先停止該會話。在網路連接下拉式清單中選擇已建立的串連名稱,在Spark配置中添加以下配置項。編輯完成後,請務必重新啟動會話,以確保配置更改生效。
spark.emr.serverless.user.defined.jars /opt/ranger/ranger-spark.jar spark.sql.extensions org.apache.kyuubi.plugin.spark.authz.ranger.RangerSparkExtension測試連接。
使用Spark Beeline進行串連測試,更多串連方式請參見串連Spark Thrift Server。如果您訪問無許可權的資料庫、表或其他資源,系統將返回許可權失敗的錯誤提示。
Error: org.apache.hive.service.cli.HiveSQLException: Error running query: org.apache.kyuubi.plugin.spark.authz.AccessControlException: Permission denied: user [test] does not have [update] privilege on [database=default/table=students/column=name] at org.apache.spark.sql.hive.thriftserver.HiveThriftServerErrors$.runningQueryError(HiveThriftServerErrors.scala:46) at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation.org$apache$spark$sql$hive$thriftserver$SparkExecuteStatementOperation$$execute(SparkExecuteStatementOperation.scala:262) at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$2$$anon$3.$anonfun$run$2(SparkExecuteStatementOperation.scala:166) at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23) at org.apache.spark.sql.hive.thriftserver.SparkOperation.withLocalProperties(SparkOperation.scala:79) at org.apache.spark.sql.hive.thriftserver.SparkOperation.withLocalProperties$(SparkOperation.scala:63) at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation.withLocalProperties(SparkExecuteStatementOperation.scala:41) at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$2$$anon$3.run(SparkExecuteStatementOperation.scala:166) at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$2$$anon$3.run(SparkExecuteStatementOperation.scala:161) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1730) at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$2.run(SparkExecuteStatementOperation.scala:175) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:750)
樣本2:EMR on ECS遷移任務訪問OSS檔案
在從EMR on ECS遷移至Serverless Spark時,如果非SQL類型的任務需要訪問阿里雲OSS/OSS-HDFS,並且任務代碼中未通過SparkContext#hadoopConfiguration初始化FileSystem,則必須手動設定OSS/OSS-HDFS檔案系統的實作類別及相關訪問參數。否則,由於Serverless Spark預設不會注入core-site.xml檔案,遷移後的任務將因缺少對OSS/OSS-HDFS的支援而拋出UnsupportedFileSystemException等錯誤。
在組態管理的自訂設定檔頁簽,建立一個名為core-site.xml的設定檔,並將其儲存到路徑/etc/spark/conf中。該檔案內容如下所示。
<?xml version="1.0" ?>
<configuration>
<property>
<name>fs.AbstractFileSystem.oss.impl</name>
<value>com.aliyun.jindodata.oss.OSS</value>
</property>
<property>
<name>fs.oss.endpoint</name>
<value>oss-cn-<region>-internal.aliyuncs.com</value>
</property>
<property>
<name>fs.oss.impl</name>
<value>com.aliyun.jindodata.oss.JindoOssFileSystem</value>
</property>
<property>
<name>fs.oss.credentials.provider</name>
<value>com.aliyun.jindodata.oss.auth.SimpleCredentialsProvider</value>
</property>
<property>
<name>fs.oss.accessKeyId</name>
<value>OSS/OSS-HDFS的AccessKey ID</value>
</property>
<property>
<name>fs.oss.accessKeySecret</name>
<value>OSS/OSS-HDFS的AccessKey Secret</value>
</property>
</configuration>請將<region>替換為您實際使用的OSS地區,例如hangzhou。