自定义配置文件功能支持根据特定需求创建个性化配置,灵活控制任务执行环境。支持多种文件格式(如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
。