管理自定义配置文件

自定义配置文件功能支持根据特定需求创建个性化配置,灵活控制任务执行环境。支持多种文件格式(如XMLJSON),确保配置的安全性和一致性,并可直接应用于各类任务(如批处理、会话等)。

前提条件

已创建工作空间,详情请参见管理工作空间

创建自定义配置文件

  1. 进入配置管理页面。

    1. 登录E-MapReduce控制台

    2. 在左侧导航栏,选择EMR Serverless > Spark

    3. Spark页面,单击目标工作空间的名称。

    4. EMR Serverless Spark页面,单击左侧导航栏中的配置管理。

  2. 配置管理页面,单击自定义配置文件页签。

  3. 单击创建自定义配置文件

  4. 创建自定义配置文件页面,配置以下参数,单击创建

    参数

    说明

    路径

    选择文件存储路径。

    文件名称

    定义文件名称及后缀,根据文件类型选择 .txt.xml.json

    文件内容

    填写具体的配置内容,确保符合所选文件类型的格式要求。

    描述

    添加文件的用途说明,便于后续管理和维护。

    说明

    系统预定义了一些关键配置文件,这些文件的名称和内容由系统维护,您无法直接修改其名称或覆盖其内容。不支持更改的文件名包括:spark-defaults.confkyuubi-defaults.confexecutorPodTemplate.yamlspark-pod-template.yamldriver_log4j.xmlexecutor_log4j.xmlsession_log4j.xmlspark.propertiessyncer_log4j.xml

创建自定义配置文件后,您可以单击操作列的编辑删除,以修改或移除自定义配置文件。

使用自定义配置文件

示例1:在Spark Thrift Server中启用Ranger鉴权

本文通过为Serverless Spark Thrift Server启用Ranger鉴权为例,演示如何创建并使用自定义配置文件。

  1. 创建自定义配置文件。

    新建一个名为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。

  2. 配置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
  3. 测试连接。

    使用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